前回はいいね機能の実装についてまとめました。↓
今回はユーザーのアイコン変更、及びアカウント、回答の削除機能の実装についてまとめようかと思います。
アイコンについてはユーザー登録の時にアップロードできますが、任意ですので後からでもアップロード出来るように、また既存のアイコンの変更も出来るようにします。
回答削除については、仕様上1つのお題に対して原則1回答としているので、回答の出し直しは可能にしようという事で自分の回答については〆までであれば何回でも取り消し出来るようにします。
それではまずユーザーアイコンの変更から。
目次
ユーザーアイコンのアップロード
サイドメニューにリンクを貼る
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<aside> <div id="slider" class="close"> <h2>menu</h2> <br> <div class="sidemenu"> <img src='/img/ノートのアイコン素材.png'><a href="user_login.php"> ログイン</a> </div> <div class="sidemenu"> <img src='/img/本の無料アイコン素材2.png'><a href="user_logout.php"> ログアウト</a> </div> <div id="ll1"><img src='/img/赤頭巾ちゃんのフリーアイコン3.png'> アカウント <img src='/img/クロスカーソル.png'></div> <ul id="nav1" class="l1"> <li><a href="user_ico.php">アイコン変更</a></li> <li><a href="user_delete.php">アカウント削除</a></li> </ul> |
アイコンの変更はサイドメニューのリンクから実行させようと思います。
アイコンの選択ページ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<?php require_once("header.php"); ?> <warapper> <main> <?php session_start(); session_regenerate_id(true); if(isset($_SESSION["login"]) === true) { $name = $_SESSION["name"]; print $name." さま"; print "<br><br>"; print "アイコンを選択してください"; print "<br><br>"; print "<form action='user_ico_up.php' method='post' enctype='multipart/form-data'>"; print "<input type='file' name='img'>"; print "<br><br>"; print "<input type='hidden' name='name' value='".$name."'>"; print "<input type='submit' value='OK'>"; print "<input type='button' onclick='history.back()' value='戻る'>"; print "</form>"; } else { print "ログインしてください"; print "<br><br>"; print "<a href='user_login.php'>ログイン画面へ</a>"; } ?> |
ログインしていればアイコンを指定しformタグで次ページへpostします。
アイコンのアップロード、DB登録
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
<warapper> <main> <?php try { session_start(); session_regenerate_id(true); if(isset($_SESSION["login"]) === true) { require_once("common/common.php"); $post = sanitize($_POST); $img = $_FILES["img"]; $name = $_POST["name"]; if(!empty($img["name"]) === true) { if($img["size"] > 1000000) { print "画像のサイズが大きすぎます"; print "<br><br>"; print "<input type='button' onclick='history.back()' value='戻る'>"; } else { $dsn = "mysql:host=localhost;dbname=oogiri;charset=utf8"; $user = "root"; $password = ""; $dbh = new PDO($dsn, $user, $password); $dbh -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "SELECT img FROM user WHERE name=?"; $stmt = $dbh -> prepare($sql); $data[] = $name; $stmt -> execute($data); $data = array(); $rec = $stmt -> fetch(PDO::FETCH_ASSOC); if(!empty($rec["img"]) === true) { $gazou = $rec["img"]; unlink("./img/".$gazou); } $sql = "UPDATE user SET img=? WHERE name=?"; $stmt = $dbh -> prepare($sql); $data[] = $img["name"]; $data[] = $name; $stmt -> execute($data); $data = array(); move_uploaded_file($img["tmp_name"],"./img/".$img["name"]); print "アイコン画像を更新いたしました"; print "<br><br>"; print "<a href='index.php'>トップ画面へ</a>"; } } else { print "アイコンを選択してください"; print "<br><br>"; print "<input type='button' onclick='history.back()' value='戻る'>"; } } else { print "ログインしてください"; print "<br><br>"; print "<a href='user_login.php'>ログイン画面へ</a>"; } } catch(Exception $e) { print "只今サーバーに異常が発生しております。<br>"; print "<a href='index.php'>トップページへ</a>"; exit(); } ?> |
画像サイズには1MBの制限をかけています。
DBにアイコンがアップロードされていなければ、そのままDBにアイコンのファイル名を書き込みimgディレクトリにファイルをアップロードさせます。
すでにDBにアイコンが存在する場合は、DBのアイコン名を変更し、imgの元ファイルを削除し、新たにファイルをアップロードさせています。
ユーザーアカウントの削除
削除確認ページ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<warapper> <main> <?php session_start(); session_regenerate_id(true); if(isset($_SESSION["login"]) === true) { require_once("./common/common.php"); $re = $_SESSION["name"]; print "ユーザーアカウントを削除しますか?"; print "<br><br>"; print "<form action='user_delete_done.php' method='post'>"; print "<input type='hidden' name='name' value='".$re."'>"; print "<input type='submit' value='OK'>"; print "<br><br>"; print "削除せずに戻る。"; print "<br><br>"; print "<input type='button' onclick='history.back()' value='戻る'>"; print "</form>"; } else { print "<br>"; print "ログインしていません。<br><br>"; print "<a href='user_login.php'>ログイン画面へ</a>"; } ?> |
アカウント削除の注意喚起を表示し、削除する場合は次ページへ内容をpostします。
ユーザーアカウントの削除ページ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
<warapper> <main> <?php try { session_start(); session_regenerate_id(true); if(isset($_SESSION["login"]) === true) { require_once("./common/common.php"); $post = sanitize($_POST); $name = $post["name"]; $dsn = "mysql:host=localhost;dbname=oogiri;charset=utf8"; $user = "root"; $password = ""; $dbh = new PDO($dsn, $user, $password); $dbh -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "SELECT img FROM user WHERE name=?"; $stmt = $dbh -> prepare($sql); $data[] = $name; $stmt -> execute($data); $data = array(); $rec = $stmt -> fetch(PDO::FETCH_ASSOC); if(!empty($rec["img"]) === true) { $gazou = $rec["img"]; unlink("./img/".$gazou); } $sql = "DELETE FROM user WHERE name=?"; $stmt = $dbh -> prepare($sql); $data[] = $name; $stmt -> execute($data); $data = array(); if(isset($_COOKIE[session_name()]) === true) { setcookie(session_name(), "", time()-42000, "/"); } session_destroy(); print "ユーザーアカウントを削除しました。"; print "<br><br>"; print "<a href='index.php'>トップ画面に戻る</a>"; } else { print "<br>"; print "ログインしていません。<br><br>"; print "<a href='user_login.php'>ログイン画面へ</a>"; } } catch(Exception $e) { print "只今サーバーに異常が発生しております。<br>"; print "<a href='index.php'>トップページへ</a>"; exit(); } ?> |
データベースからユーザーデータの削除、およびimgディレクトリからアイコンの削除を行います。
同時にログアウト処理も行っています。
回答の削除
トップページの回答カードに削除ボタンを表示させる
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
$dsn = "mysql:host=localhost;dbname=oogiri;charset=utf8"; $user = "root"; $password = ""; $dbh = new PDO($dsn, $user, $password); $dbh -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "SELECT * FROM kaitou WHERE m_w = ? ORDER BY time DESC "; $stmt = $dbh -> prepare($sql); $data[] = $day; $stmt -> execute($data); $data = array(); //$dbh = null; while(true) { $rec = $stmt -> fetch(PDO::FETCH_ASSOC); if(empty($rec) === true) { break; } print '<div class="card">'; print '<div class="card-in">'; print '<div class="ico">'; $sql = "SELECT img FROM user WHERE name=?"; $stmt2 = $dbh -> prepare($sql); $data[] = $rec["name"]; $stmt2 -> execute($data); $data = array(); $rec2 = $stmt2 -> fetch(PDO::FETCH_ASSOC); if(empty($rec2["img"]) === true) { $nanasi = "nanasi.png"; $disp_gazou = "<img src='./img/".$nanasi."'>"; print $disp_gazou; } else { $disp_gazou = "<img src='./img/".$rec2['img']."'>"; print $disp_gazou; } print "</div>"; print '<div class="bun">'; print '<div class="time">'; print date('Y年n月j日 g:i', strtotime($rec["time"])); print '</div>'; print '<div class="name">'; print $rec["name"]; print '</div>'; print '</div>'; print '</div>'; print '<div class="kaitou">'; print $rec["comment"]; print "</div>"; $code = $rec["code"]; print "<div class='goodiine'>"; if(!empty($name) === true) { $sql = "SELECT * FROM good WHERE k_code=? AND g_name=?"; $stmt3 = $dbh -> prepare($sql); $data[] = $rec["code"]; $data[] = $name; $stmt3 -> execute($data); $data = array(); $rec3 = $stmt3 -> fetch(PDO::FETCH_ASSOC); if($rec["name"] === $name) { print "<div class='clear'>"; print "<form action='sakujyo.php' method='post'>"; print "<input type='hidden' name='re' value='".$code."'>"; print "<input type='submit' value='回答を削除'>"; print "</form>"; print "</div>"; print "<div id='good$code' class='off'><img src='./img/ハートのマーク3.png'></div>"; //$code = "non"; } else if(!empty($rec3) === true) { //print "<div id='good$code' class='on'>♥</div>"; print "<div id='good$code' class='on'><img src='./img/ハートのマーク3.png'></div>"; } else { print "<div id='good$code' class='off'><img src='./img/ハートのマーク3.png'></div>"; } } else { print "<div id='good$code'><img src='./img/ハートのマーク3.png'></div>"; } |
トップページの回答一覧表示に、ログインしているユーザーの回答がある場合、その回答のみに「削除」のボタンを表示させるようにしました。ボタンをクリックすれば、formタグで回答削除ページに値がpostされます。
回答削除ページ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<warapper> <main> <?php session_start(); session_regenerate_id(true); if(isset($_SESSION["login"]) === true) { require_once("./common/common.php"); $post = sanitize($_POST); $re = $post["re"]; print "回答を取り消しますか?"; print "<br><br>"; print "<form action='sakujyo_done.php' method='post'>"; print "<input type='hidden' name='re' value='".$re."'>"; print "<input type='submit' value='OK'>"; print "<br><br>"; print "取り消さずに戻る。"; print "<br><br>"; print "<input type='button' onclick='history.back()' value='戻る'>"; print "</form>"; } else { print "<br>"; print "ログインしていません。<br><br>"; print "<a href='user_login.php'>ログイン画面へ</a>"; } ?> |
回答削除の再確認を行い、次ページで削除を行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
<warapper> <main> <?php try { session_start(); session_regenerate_id(true); if(isset($_SESSION["login"]) === true) { require_once("./common/common.php"); $post = sanitize($_POST); $re = $post["re"]; $dsn = "mysql:host=localhost;dbname=oogiri;charset=utf8"; $user = "root"; $password = ""; $dbh = new PDO($dsn, $user, $password); $dbh -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "DELETE FROM kaitou WHERE code=?"; $stmt = $dbh -> prepare($sql); $data[] = $re; $stmt -> execute($data); $data = array(); print "回答を取り消しました。"; print "<br><br>"; print "<a href='index.php'>トップ画面に戻る</a>"; } else { print "<br>"; print "ログインしていません。<br><br>"; print "<a href='user_login.php'>ログイン画面へ</a>"; } } catch(Exception $e) { print "只今サーバーに異常が発生しております。<br>"; print "<a href='index.php'>トップページへ</a>"; exit(); } ?> |
回答テーブルから回答を削除します。
次回は過去お題のアーカイブ表示ページを作成したいと思います。