前提・実現したいこと
phpで日記を、掲示板をもとに作っている初心者です。
本文とタイトルをDBとつなげて表示する簡単なものですが、削除、編集の時idが定義されていないというエラーが出ます。(undefined index id)
Googleで調べた結果issetを使い1回目と2回目の処理を分けるとありましたが、自分のコードでの応用が分かりません。また、参考にしたのは(https://gray-code.com/php/make-the-board-vol1/)
このサイトです
該当のソースコード
PHP
ソースコード
PHP
1<?php 2 3// データベースの接続情報 4define( 'DB_HOST', 'localhost'); 5define( 'DB_USER', 'root'); 6define( 'DB_PASS', ''); 7define( 'DB_NAME', 'board'); 8 9// タイムゾーン設定 10date_default_timezone_set('Asia/Tokyo'); 11 12// 変数の初期化 13$message_id = null; 14$mysqli = null; 15$sql = null; 16$res = null; 17$error_message = array(); 18$message_data = array(); 19 20session_start(); 21 22 23if( empty($_SESSION['admin_login']) || $_SESSION['admin_login'] !== true ) { 24 25 // ログインページへリダイレクト 26 header("Location: ./admin.php"); 27} 28 29 30if( !empty($_GET['message_id']) && empty($_POST['message_id']) ) { 31 32 $message_id = (int)htmlspecialchars($_GET['message_id'], ENT_QUOTES); 33 34 // データベースに接続 35 $mysqli = new mysqli( DB_HOST, DB_USER, DB_PASS, DB_NAME); 36 37 // 接続エラーの確認 38 if( $mysqli->connect_errno ) { 39 $error_message[] = 'データベースの接続に失敗しました。 エラー番号 '.$mysqli->connect_errno.' : '.$mysqli->connect_error; 40 } else { 41 42 // データの読み込み 43 $sql = "SELECT * FROM message WHERE id = $message_id"; 44 $res = $mysqli->query($sql); 45 46 if( $res ) { 47 $message_data = $res->fetch_assoc(); 48 } else { 49 50 // データが読み込めなかったら一覧に戻る 51 header("Location: ./admin.php"); 52 } 53 54 $mysqli->close(); 55 } 56 57} elseif( !empty($_POST['message_id']) ) { 58 59 $message_id = (int)htmlspecialchars( $_POST['message_id'], ENT_QUOTES); 60 61 // データベースに接続 62 $mysqli = new mysqli( DB_HOST, DB_USER, DB_PASS, DB_NAME); 63 64 // 接続エラーの確認 65 if( $mysqli->connect_errno ) { 66 $error_message[] = 'データベースの接続に失敗しました。 エラー番号 ' . $mysqli->connect_errno . ' : ' . $mysqli->connect_error; 67 } else { 68 $sql = "DELETE FROM message WHERE id = $message_id"; 69 $res = $mysqli->query($sql); 70 } 71 72 $mysqli->close(); 73 74 // 更新に成功したら一覧に戻る 75 if( $res ) { 76 header("Location: ./admin.php"); 77 } 78} 79 80?> 81<!DOCTYPE html> 82<html lang="ja"> 83<head> 84<meta charset="utf-8"> 85<title>ひと言掲示板 管理ページ(投稿の削除)</title> 86</head> 87<body> 88<h1>ひと言掲示板 管理ページ(投稿の削除)</h1> 89<?php if( !empty($error_message) ): ?> 90 <ul class="error_message"> 91 <?php foreach( $error_message as $value ): ?> 92 <li>・<?php echo $value; ?></li> 93 <?php endforeach; ?> 94 </ul> 95<?php endif; ?> 96<p class="text-confirm">以下の投稿を削除します。<br>よろしければ「削除」ボタンを押してください。</p> 97<form method="post"> 98 <div> 99 <label for="view_name">表示名</label> 100 <input id="view_name" type="text" name="view_name" value="<?php if( !empty($message_data['view_name']) ){ echo $message_data['view_name']; } ?>" disabled> 101 </div> 102 <div> 103 <label for="message">本文</label> 104 <textarea id="message" name="message" disabled><?php if( !empty($message_data['message']) ){ echo $message_data['message']; } ?></textarea> 105 </div> 106 <a class="btn_cancel" href="admin.php">キャンセル</a> 107 <input type="submit" name="btn_submit" value="削除"> 108 <input type="hidden" name="message_id" value="<?php echo $message_data['id']; ?>"> 109</form> 110</body> 111</html> 112 113 114 115 116 117 118編集機能の方 119<?php 120//DB接続情報 121define( 'DB_HOST', 'localhost'); 122define( 'DB_USER', 'root'); 123define( 'DB_PASS', ''); 124define( 'DB_NAME', 'board'); 125// タイムゾーン設定 126date_default_timezone_set('Asia/Tokyo'); 127 128// 変数の初期化 129$message_id = null; 130$mysqli = null; 131$sql = null; 132$res = null; 133$error_message = array(); 134$message_data = array(); 135 136session_start(); 137 138// 管理者ログイン 139if( empty($_SESSION['admin_login']) || $_SESSION['admin_login'] !== true ) { 140 141 // ログインページへリダイレクト 142 header("Location: ./admin.php"); 143} 144if( !empty($_GET['message_id'])&& empty($_POST['message_id']) ) { 145//取得 146 $message_id = (int)htmlspecialchars($_GET['message_id'], ENT_QUOTES); 147 148 // データベースに接続 149 $mysqli = new mysqli( DB_HOST, DB_USER, DB_PASS, DB_NAME); 150 151 // 接続エラーの確認 152 if( $mysqli->connect_errno ) { 153 $error_message[] = 'データベースの接続に失敗しました。 エラー番号 '.$mysqli->connect_errno.' : '.$mysqli->connect_error; 154 } else { 155 156 // データの読み込み 157 $sql = "SELECT * FROM message WHERE id = $message_id"; 158 $res = $mysqli->query($sql); 159 160 if( $res ) { 161 $message_data = $res->fetch_assoc(); 162 } else { 163 164 // データが読み込めなかったら一覧に戻る 165 header("Location: ./admin.php"); 166 } 167 168 $mysqli->close(); 169 } 170} 171elseif( !empty($_POST['message_id']) ) { 172 173 $message_id = (int)htmlspecialchars( $_POST['message_id'], ENT_QUOTES); 174 175 if( empty($_POST['view_name']) ) { 176 $error_message[] = 'titleを入力してください。'; 177 } else { 178 $message_data['view_name'] = htmlspecialchars($_POST['view_name'], ENT_QUOTES); 179 } 180 181 if( empty($_POST['message']) ) { 182 $error_message[] = '本文を入力してください。'; 183 } else { 184 $message_data['message'] = htmlspecialchars($_POST['message'], ENT_QUOTES); 185 } 186 187 if( empty($error_message) ) { 188 // データベースに接続 189 $mysqli = new mysqli( DB_HOST, DB_USER, DB_PASS, DB_NAME); 190 191 // 接続エラーの確認 192 if( $mysqli->connect_errno ) { 193 $error_message[] = 'データベースの接続に失敗しました。 エラー番号 ' . $mysqli->connect_errno . ' : ' . $mysqli->connect_error; 194 } else { 195 $sql = "UPDATE message set view_name = '$message_data[view_name]', message= '$message_data[message]' WHERE id = $message_id"; 196 $res = $mysqli->query($sql); 197 } 198 199 $mysqli->close(); 200 201 // 更新に成功したら一覧に戻る 202 if( $res ) { 203 header("Location: ./admin.php"); 204 } 205 206 207 } 208 209} 210 211 212?> 213<!DOCTYPE html> 214<html lang="ja"> 215<head> 216<meta charset="utf-8"> 217<title>管理ページ</title> 218 219</head> 220<body> 221<h1>管理ページ</h1> 222 223<?php if( !empty($error_message) ): ?> 224 <ul class="error_message"> 225 <?php foreach( $error_message as $value ): ?> 226 <li>・<?php echo $value; ?></li> 227 <?php endforeach; ?> 228 </ul> 229<?php endif; ?> 230<form method="post"> 231 <div> 232 <label for="view_name">タイトル</label> 233 <input id="view_name" type="text" name="view_name" value="<?php if( !empty($message_data['view_name']) ){ echo $message_data['view_name']; } ?>"> 234 </div> 235<div> 236 <label for="message">本文</label> 237 <textarea id="message" name="message"><?php if( !empty($message_data['message']) ){ echo $message_data['message']; } ?></textarea> 238 </div> 239 240 241 <a class="btn_cancel" href="admin.php">キャンセル</a> 242 <input type="submit" name="btn_submit" value="書き込む"> 243 <input type="hidden" name="message_id" value="<?php echo $message_data['id']; ?>"> 244 </form> 245</body> 246</html>
回答2件
あなたの回答
tips
プレビュー