【コード】
php
1<?php 2 3// メッセージを保存するファイルのパス設定 4define( 'FILENAME', './kadai_2_05.txt'); 5 6// タイムゾーン設定 7date_default_timezone_set('Asia/Tokyo'); 8 9// 変数の初期化 10$now_date = null; 11$data = null; 12$file_handle = null; 13$split_data = null; 14$message = array(); 15$message_array = array(); 16$success_message = null; 17$error_message = array(); 18$delete = null; 19$del_con = null; 20$del_data = array(); 21 22//----------------テキストファイルにデータを書き込む----------------- 23 24if(file_exists(FILENAME)){ 25 $num = count(file(FILENAME)) + 1; //$num = count(file(FILENAME))でファイルの行数をカウントできる 26}else{ 27 $num = 1; 28} 29 30if( !empty($_POST['btn_submit']) ) { 31 32 //-----未入力のバリデーション--------- 33 if(empty($_POST['view_name'])){ 34 $error_message[] = '名前を入力してください!'; 35 } 36 37 if(empty($_POST['message'])){ 38 $error_message[] = 'メッセージを入力してください!'; 39 } 40 //------------------------------------ 41 42 if( $file_handle = fopen( FILENAME, "a") ) { //fopen関数で指定したファイルを開く 43 // タイムスタンプ 44 $now_date = date("Y-m-d H:i:s"); 45 46 // 書き込むデータを作成 47 $data = $num."<>".$_POST['view_name']."<>".$_POST['message']."<>".$now_date."\n"; 48 49 // 書き込み 50 fwrite( $file_handle, $data); //file_handleは書き込む対象となるファイル(●●.txt)を判別するためのパラメータ 51 52 // ファイルを閉じる 53 fclose( $file_handle); 54 55 //投稿が成功したことを示すメッセージ 56 $success_message = 'メッセージを送信しました'; 57 } 58} 59//----------------指定した番号のメッセージを削除-------------------- 60if(isset($_POST['delete'])){ 61 62 $delete = $_POST['deleteNo']; 63 $del_con = file(FILENAME); 64 65 for( $i=0; $i<count($del_con); $i++ ){ 66 $del_data = explode("<>", $del_con[$i]); 67 if($del_data[0] == $delete){ 68 array_splice($del_con,$i,1); //array_splice(配列、削除開始位置、削除する配列要素数←これ指定しないと削除開始位置から全部消える) 69 file_put_contents(FILENAME, implode("\n", $del_con)); 70 } 71 } 72} 73 74//----------------指定した番号のメッセージを編集-------------------- 75 76//送られてきた番号と等しい番号にある配列の値を取得 77$edit = $_POST['editNo']; 78$edit_con = file(FILENAME); 79 80if(isset($_POST['edit'])){ 81 foreach($edit_con as $line){ 82 $edit_data = explode("<>",$line); 83 if($edit_data[0] == $edit){ 84 $edit_no = $edit_data[0]; 85 $edit_name = $edit_data[1]; 86 $edit_message = $edit_data[2]; 87 } 88 } 89} 90 91//編集を行う 92if(isset($_POST['edit'])){ 93 $fp=fopen(FILENAME,'w'); 94 95 foreach($edit_con as $ed){ 96 $data = explode("<>",$ed); 97 if($data[0]==$edit){ 98 fwrite($fp,$edit_no."<>".$edit_name."<>".$edit_message."\r\n"); 99 } 100 } 101} 102 103//-------テキストファイルのデータを掲示板のフォーム下に表示-------- 104 105if( $file_handle = fopen( FILENAME,'r') ) { 106 107 while( $data = fgets($file_handle) ){ //fgets関数でファイルからデータを一行ずつ全て取得 108 109 //preg_split関数で文字列を特定の文字で分割する: 110 $split_data = explode("<>",$data); 111 112 $message = array( 113 'view_name' => $split_data[1], 114 'message' => $split_data[2], 115 'post_date' => $split_data[3] 116 ); 117 array_unshift( $message_array, $message); 118 } 119 120 // ファイルを閉じる 121 fclose( $file_handle); 122} 123 124?> 125 126//------------------------------<HTML>----------------------------------- 127 128<!DOCTYPE html> 129<html lang="ja"> 130<head> 131<meta charset="utf-8"> 132<title>簡易掲示板</title> 133</head> 134 135<body> 136<h2>簡易掲示板(^-^*)</h2> 137 <?php if(!empty($success_message)):?> 138 <p class="success_message"><?php echo $success_message;?></p> 139 <?php endif; ?> 140 141 <?php if(!empty($error_message)):?> 142 <ul class="error_message"> 143 <?php foreach($error_message as $value):?> 144 <li>・<?php echo $value; ?></li> 145 <?php endforeach; ?> 146 </ul> 147 <?php endif; ?> 148 149 <form method="post"> 150 <div> 151 <label for="view_name">名前</label> 152 <input id="view_name" type="text" name="view_name" value=""> 153 </div> 154 <div> 155 <label for="message">メッセージ</label> 156 <textarea id="message" name="message"></textarea> 157 </div> 158 <input type="submit" name="btn_submit" value="書き込む"> 159 </form> 160 161 <form method="post"> 162 <div> 163 <label for="deleteNo">削除番号</label> 164 <input id="deleteNo" type="text" name="deleteNo" value=""> 165 </div> 166 <input type="submit" name="delete" value="削除する"> 167 </form> 168 169 <form method="post"> 170 <div> 171 <label for="editNo">編集番号</label> 172 <input id="editNo" type="text" name="editNo" value=""> 173 </div> 174 <input type="submit" name="edit" value="編集する"> 175 <input type="hidden" name="execute_edit" value="<?php if(isset($editNo)){echo $editNo;} ?>"> 176 </form> 177 178<hr> 179 180<section> 181 <?php if( !empty($message_array) ): ?> 182 <?php foreach( $message_array as $value ): ?> 183 <article> 184 <div class="info"> 185 <h2><?php echo $value['view_name']; ?></h2> 186 <time><?php echo date('Y年m月d日 H:i', strtotime($value['post_date'])); ?></time> 187 </div> 188 <p><?php echo $value['message']; ?></p> 189 </article> 190 <?php endforeach; ?> 191 <?php endif; ?> 192</section> 193 194</body> 195</html>
【実現したいこと:一度送信したメッセージを入力フォームに呼び戻し、編集したい】
入力フォームに名前とメッセージを入力して送信する
送信した値をテキストファイルへ記録
編集番号入力フォームへ編集したメッセージの番号を入力・送信
送信した番号と一致するメッセ―ジ・名前を取得し、入力フォームへ再表示して編集できるようにする
例えば、名前:はなこ メッセ―ジ:おはよう が送信されると、
テキストファイルへ「1<>はなこ<>おはよう<>投稿日時」と記録される。このメッセージを編集するために編集番号入力フォームに「1」を入力・送信すると、再度名前とメッセージの入力フォームへ「はなこ」「おはよう」が表示されて、編集できるようにしたいです。
ヒントだけでも良いので何かしらアドバイス頂けたら嬉しいです。
【試したこと】
「php 掲示板 編集」などで検索し、似たような質問をみてまねをしてコードをかいてみましたが、うまく実行されません。
【使用環境】
Windows10
FFFTP
サクラエディタ
【追記】
回答をうけてhidden属性を使用してコードを書き直しましたが、依然動きません。
以下がそのコードです。
★編集のHTML部分
html
1<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 2 <div> 3 <input type="hidden" name="hidden" value="<?php if(isset($editNo)){echo $editNo;} ?>"> 4 <label for="editNo">編集番号</label> 5 <input id="editNo" type="text" name="editNo" value=""> 6 </div> 7 <input type="hidden" name="execute_edit" value="<?php if(isset($editNo)){echo $editNo;} ?>"> 8 <input type="submit" name="edit" value="編集する"> 9 </form>
★編集のPHP部分
php
1//----------------指定した番号のメッセージを編集-------------------- 2 3/***** ファイル編集 入力フォーム表示********/ 4 if (isset($_POST['edit'])){ 5 $file_edit = file(FILENAME);//テキストファイルを読みこむ 6 for($j = 0;$j <count($file_edit); $j++){//ループ処理 7 $editData1 = explode("<>",$file_edit[$j]);//投稿番号を取得 8 if($editData1[0] == ($_POST['editNo'])) { 9 $simEdit = $editData1; 10 } 11 } 12 } 13 14 /***** ファイル編集 ファイル書き込み********/ 15 if (isset($_POST['btn_submit']) && isset($_POST['hidden'])) { 16 17 $file_edit = file(FILENAME); 18 for($k = 0;$k <count($file_edit); $k++){ 19 $editData2 = explode("<>",$file_edit[$k]); 20 if($editData2[0] == ($_POST['hidden'])){ 21 $n = $_POST['hidden']; 22 $editData2[1] = $_POST['name']; 23 $editData2[2] = $_POST['comment']; 24 $file_edit[$m] = implode("<>", $editData2); 25 file_put_contents(FILENAME,implode("", $file_edit)); 26 } 27 } 28 }
回答1件
あなたの回答
tips
プレビュー