前提・実現したいこと
今週PHPを始めた初心者です。qiitaやteratailを参考にPHPで簡易掲示板を作成しているのですが、編集したものを入力済みで表示したいのですがエラーメッセージが発生しまい直すことができません。下記が実装したい内容となっています。
修正点や間違っている部分、ご指摘お願いいたします。
指定された番号のものだけ編集できるようにする a.入力フォームとは別に、編集番号指定用フォームを用意する。項目は編集対象番号。 b.POST送信にて編集番号を送信する。その際if文で編集フォームから値が送信された場合のみの処理に分岐させておく c.fileで配列化して読み込み、ループさせる d.explodeを使って投稿番号を取得する e.各投稿番号とPOSTで送信された編集番号を比較し、イコールの時の配列値を取得する f.(1)で用意した入力フォームに、取得した配列値を入力済み状態で表示させる g.その値をPOSTで送信して編集を行うが、編集かどうかわかるように<input type="hidden">タグを用いて、編集モードかどうかを判別する h.編集内容の値が送信されたら、同じくc~dの処理を行い、eと同じように番号の比較を行って、イコールの時に配列値を取得するのではなく送信された値と差し替える i.差し替えた配列をテキストに上書き保存する
発生している問題・エラーメッセージ
<br /><b>Notice</b>: Undefined index: name3 in
該当のソースコード
php
1<html> 2<head> 3 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 4 <title></title> 5</head> 6<body> 7 <?php 8 9 /***** ファイル書き込み********/ 10 $dataFile = "keiji_2.txt"; 11 12 if(isset($_POST['make'])){ 13 $str = (sizeof(file($dataFile))+1) . '<>' . $_POST['name'] . '<>' . $_POST['comment'] . '<>' . date('m/d/H:i') . '<>' .$_POST['password'] . "\n"; 14 $fp = fopen('keiji_2.txt','a'); 15 fwrite($fp, $str); 16 fclose($fp); 17 } 18 19 /***** ファイル消去********/ 20 if (isset($_POST['del'])){ 21 $file_make = file("keiji_2.txt"); 22 for($k = 0;$k <count($file_make); ++$k){ 23 $file_make[$k] = preg_replace("/\n/", "", $file_make[$k]); 24 25 echo "fn: ".$file_make[$k]."<hr>"; 26 27 $delData = preg_split("/<>/", $file_make[$k]); 28 29 echo "del: ".$delData[4]."<hr>"; 30 31 if(($delData[0] == $_POST['name2']) && ($delData[4] == $_POST['pass'])) 32 { 33 echo 'in<hr>'; 34 array_splice($file_make, $k, 1); 35 file_put_contents($dataFile, implode("", $file_make)); 36 echo ($_POST['pass']);echo ($delData[4]); 37 } 38 } 39 } 40 41 /***** ファイル編集 入力フォーム表示********/ 42 if (isset($_POST['edit'])){ 43 $file_edit = file("keiji_2.txt");//テキストファイルを読みこむ 44 for($l = 0;$l <count($file_edit); ++$l){//ループ処理 45 $editData = explode("<>",$file_edit[$l]);//投稿番号を取得 46 if($editData[0] == ($_POST['name3'])) { 47 $simEdit = $editData; 48 } 49 } 50 } 51 52 /***** ファイル編集 ファイル書き込み********/ 53 if (isset($_POST['make']) && isset($_POST['hidden1'])) { 54 55 $file_edit = file("keiji_2.txt"); 56 for($m = 0;$m <count($file_edit); ++$m){ 57 $editData2 = explode("<>",$file_edit[$m]); 58 if($editData2[0] == ($_POST['hidden1'])){ 59 $n = $_POST['hidden1']; 60 $editData2[1] = $_POST['name']; 61 $editData2[2] = $_POST['comment']; 62 $file_edit[$m] = implode("<>", $editData2); 63 file_put_contents($dataFile,implode("", $file_edit)); 64 } 65 } 66 } 67 68 ?> 69 70 <!-- 書き込み用フォーム --> 71 <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 72 名前:<br/> 73 <input type="text" name="name" size="30" value="" /><br > 74 パスワード:<br/> 75 <input type="text" name="password" size="30" value=""/><br /> 76 コメント:<br/> 77 <input type="text" name="comment" size="30" value=""/><br /> 78 79 <br /> 80 <input type="submit" name="make"> 81 </form> 82 83 <!-- 削除用フォーム --> 84 <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 85 削除番号:<br/> 86 <input type="text" name="name2" size="30" value=""/><br /> 87 パスワード:<br><br/> 88 <input type="text" name="pass" size ="30" placeholder="fill in password"/><br/> 89 <input type="submit" name="del"> 90 </form> 91 92 <!-- 編集用フォーム --> 93 <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 94 <input type="hidden" name="hidden" value="<?php echo($_POST['name3']);?>"> 95 編集番号:<br/><br/> 96 <input type="text" name="name3" size="30" value="<?php echo($_POST['name3']);?> "/><br /> 97 <input type="submit" name="edit"> 98 99 </form> 100 101 <?php 102 103 /***** txtの最終出力********/ 104 $data_File = "keiji_2.txt";//テキストファイルを変数に格納 105 $ret_array = file($data_File);//ファイルを読みこむ 106 for($i = 0;$i <count($ret_array); ++$i){//ループ処理 107 $piece = explode("<>", $ret_array[$i]); 108 for($j = 0; $j < 4; ++$j){ 109 echo ($piece[$j]); 110 } 111 echo "<br />\n"; 112 } 113 ?> 114 115</body></html>
試したこと
デバッグvar_dumpを使用して値が取れているの確認したのですがうまく行かず詰まっていました。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/21 13:40