前提・実現したいこと
編集ボタンを押して編集元のテキストを、投稿フォームに表示させることはできたのですが、編集して送信すると新規投稿として表示されてしまいます。
教えていただけたら幸いです。初学者ですが、よろしくお願いします。
該当のソースコード
php
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <title>簡易掲示板</title> 6</head> 7<body> 8 <?php 9 /*ファイルの指定*/ 10 $filename = "mission_3-1.txt"; 11 12 /*POST送信があった時*/ 13 if (isset($_POST['name'])&&($_POST['comment'])&&!($_POST['edit'])){ 14 /*変数に代入*/ 15 $name = $_POST["name"]; 16 $comment = $_POST["comment"]; 17 /*日付データ取得*/ 18 $date = date("Y/m/d H:i:s"); 19 /*ファイルの存在がある場合は投稿番号+1、なかったら1を指定*/ 20 $lines=file($filename); 21 foreach($lines as $line){ 22 $data=explode("<>",$line); 23 $num = 0; 24 if($num<$data[0]){ 25 $num=$data[0]; 26 } 27 } 28 $num++; 29 $fp2=fopen($filename,'a'); 30 fwrite( $fp2 ,"$num<>$name<>$comment<>$date"."\n"); 31 fclose($fp2); 32 } 33 34 /*POST送信があったとき*/ 35 if(isset($_POST["delete"])){ 36 /*変数に代入*/ 37 $delete = $_POST["deleteno"]; 38 /*ファイル全体を読み込んで配列に格納する*/ 39 $delCon = file("mission_3-1.txt"); 40 for ($j = 0; $j < count($delCon) ; $j++){ 41 $delData = explode("<>", $delCon[$j]); 42 43 if ($delData[0] == $delete) { 44 array_splice($delCon, $j, 1); 45 file_put_contents($filename , $delCon); 46 }} 47 } 48 49 /*フォームに元の内容を表示させる処理*/ 50 if(isset($_POST["edit"])){ 51 $number = $_POST["number"]; 52 $ediCon = file("mission_3-1.txt"); 53 for($i = 0; $i < count($ediCon); $i++){ 54 $ediData = explode("<>" , $ediCon[$i]); 55 if ($ediData[0] == $number ){//投稿番号が編集対象番号の時、名前とコメントを定義 56 $newname = $ediData[1];//編集用フォームに元の内容を表示 57 $newcoment = $ediData[2];//編集用フォームに元の内容を表示 58 var_dump($ediData); 59 } 60 } 61 }//if終わり 62 63 64 if(isset($_POST['name'])&&($_POST['comment'])&&($_POST['edit_n'])){ 65 $lines=file("mission_3-1.txt"); 66 $fp=fopen($filename,'w'); 67 $edit=$_POST['edit_n']; 68 foreach($lines as $line){ 69 $ediData=explode("<>",$line); 70 if($ediData[0]==$edit){//投稿番号と編集番号が一致したとき上書き 71 fwrite($fp,"$edit<>$name<>$comment<>$date"."\n"); 72 }else{ 73 fwrite($fp,$line); 74 } 75 fclose($fp); 76 } 77 } 78 79 ?> 80 81 <form action="m3-1.php" method="post"> 82 <!--名前の入力フォーム--> 83 <input type="text" name="name" placeholder="名前" value="<?php echo $newname ; ?>"> 84 <!--コメントの入力フォーム--> 85 <input type="text" name="comment" placeholder="コメント" value="<?php echo $newcoment; ?>"> 86 <input type="submit" name="submit"> 87 <!--消去の入力フォーム--> 88 <input type="text" name="deleteno" value=""> 89 <input type="submit" name="delete" value="削除"> 90 </form> 91 <form method="POST" action="m3-1.php"> 92 <!--編集番号指定用フォーム--> 93 <input type="text" name="number" placeholder="編集対象番号"> 94 <input type="submit" name="edit" value="編集"> 95 <input type="hidden" name="edit_n" value="<?php echo $number;?>"> 96 </form> 97 98 【 投稿一覧 】<br> 99 <?php 100 /*ファイル全体を読み込んで配列に格納する*/ 101 $ret_array = file( $filename); 102 if(file_exists($filename)){ 103 foreach( $ret_array as $value ) { 104 $result = explode("<>", $value); 105 echo "$result[0] $result[1] $result[2] $result[3] ". "<br> \n" ; 106 } 107 } 108 109 ?> 110</body> 111</html>
https://teratail.com/search?q=%E7%B0%A1%E6%98%93%E6%8E%B2%E7%A4%BA%E6%9D%BF+%E7%B7%A8%E9%9B%86
過去にイヤほど同様の質問がありますので参照ください。
どこかが出している課題などだと思うのですが、
この課題って何処が出している物か教えて頂けるのであれば有り難いです。
PHP 簡易掲示板 mission
でGoogle検索するとteratail以外も引っ掛かりますね。
いずれにしてもテキストにデータを保存する形式のプログラムを覚えてもほぼ使えないので、そのテキストは変えた方が良いです(書籍や講座の名前は知らないですが)
回答1件
あなたの回答
tips
プレビュー