前提・実現したいこと
php掲示板で編集機能を実行したいです。
1.POST送信で「編集対象番号」を送信。受信する際は、if文で既存の各フォームとはまた別に「編集フォーム」で処理を分岐させる
2.ファイル読み込み関数で、ファイルの中身を1行1要素として配列変数に代入する。 ファイルを開き、先ほどの配列の要素数(=行数)だけループさせる
3.ループ処理内:区切り文字「<>」で分割して、投稿番号を取得
4.同・ループ処理内:投稿番号と編集対象番号を比較。イコールの場合はその投稿の「名前」と「コメント」を取得
5.既存の投稿フォームに、上記で取得した「名前」と「コメント」の内容が既に入っている状態で表示させる
6.既存の投稿フォーム内に「いま送信された場合は新規投稿か、編集か(新規登録モード/編集モード)」を判断する情報を追加する
7.編集内容が問題ない場合:投稿番号と編集対象番号を比較して、等しい場合は、ファイルに書き込む内容を送信内容に差し替える
8.上記でフォームに追加した情報が、ブラウザから見えてしまう場合は、type属性をhiddenに変更して見えなくする
発生している問題・エラーメッセージ
うまく実行されなくて困ってます。
該当のソースコード
php
1<html> 2<head> 3<meta charaset = "utf-8"> 4</head> 5 <body> 6 <form action = "mission_3-4.php" method="post"> 7 名前: 8 <input type="text" name="name"><br/> 9 10 コメント: 11 <input type="text" name="comment"><input type="submit" value="送信" ><br/> 12 13 削除: 14 <input type="text" name="delete" placeholder="削除対象番号"> 15 16 <input type="submit" value="削除"><br/> 17 18 編集: 19 <input type="text" name="edit" placeholder="編集対象番号"> 20 21 <input type="submit" value="編集"><br/> 22 </form> 23 24<?php 25 $name = $_POST["name"]; //コメントフォーム 26 $comment = $_POST["comment"]; //名前フォーム 27 $delete = $_POST["delete"] ; //削除フォーム 28 $edit = $_POST["edit"]; //編集フォーム 29 $date = date('Y年m月d日 H時i分'); //日付 30 $filename = "mission_3-4.txt"; //テキストファイル 31 32 //投稿機能 33 34 if(empty($name)==false&&empty($comment)==false){ //もし$nameと$commentが空じゃなかったら 35 $ret_array=file($filename); //テキストファイルを読み込み 36 $d=$ret_array === false ? 1: count($ret_array)+1; 37 $a=$d."<>".$name."<>".$comment."<>".$date; //投稿番号、名前、コメント、日付 38 $fp=fopen($filename,'a+'); //読み込みと追加書き込み 39 fwrite($fp,$a.PHP_EOL); //書き込み 40 fclose($fp); 41 } 42 43 //削除機能 44 45 if(empty($delete)==false){ //もし$deleteが空じゃなかったら 46 $ret_array=file($filename); //テキストファイルを読み込み 47 $kakikomi=fopen($filename,'w'); //上書き書き込み 48 for($i=0; $i<count($ret_array);$i++){ //ループ 49 if($i==$delete-1){ //削除番号と投稿番号が一致したら 50 continue; 51 } 52 fwrite($kakikomi,$ret_array[$i]); //書き込み 53 } 54 fclose($kakikomi); 55 } 56 57 //編集機能 58 59 if(empty($edit)==false){ //$editが空じゃなかったら 60 $ret_array=file($filename); //ファイル読み込み 61 for($i=0; $i<count($ret_array);$i++){ //ループ処理 62 $ex=explode("<>",$ret_array[$i]); 63 if($i==$edit-1){ //投稿番号と編集番号が一致したら 64 $editnumber=$ex[0]; 65 $editname=$ex[1]; 66 $editcomment=$ex[2]; 67 } 68 } 69 $eded=$editnumber."<>".$editname."<>".$editcomment; 70 } 71 72 if(empty($edit)==false&&empty($name)==false&&empty($comment)==false){ 73 //削除番号と$nameと$commentが空じゃなかったら 74 $editel=file($filename); //ファイル読み込み 75 $kakikomi=fopen($filename,'w'); //上書き書き込み 76 for($i=0; $i<count($editel);$i++){ //ループ処理 77 $plode=explode("<>",$editel); 78 if($i==$edit-1){ //一致したら 79 $d=$editel === false ? 1 : count($editel)+1; 80 $a=$d."<>".$name."<>".$comment."<>".$date; 81 fwrite($kakikomi,$a.PHP_EOL); //差し替え 82 } 83 else{ //一致しなかったら 84 fwrite($kakikomi,$plode); //新規投稿 85 } 86 } 87 fclose($kakikomi); 88 } 89 90?> 91 92<?php 93 94 $ret_array=file($filename); 95 for($i=0; $i<count($ret_array);$i++){ 96 $ex=explode("<>",$ret_array[$i]); 97 echo $ex[0].$ex[1].$ex[2].$ex[3]."<br>"; 98 } 99 100?> 101 </body> 102</html>
試したこと
補足情報(FW/ツールのバージョンなど)
回答1件
あなたの回答
tips
プレビュー