自作掲示板に投稿番号とパスワードを入力して投稿を削除できる機能を実装しようとしたのですがファイル内から投稿番号とパスワードを検索するところが上手くいきません。
ゴールはファイルの中からPOSTされた投稿番号とパスワードに一致する行を探して空白を挿入して削除することです。
現象としてはエラー文は出ず投稿番号欄とパスワード欄の文字が消えて他は何も変わらないといった状態です。
正規表現を使っているんですがどなたか助言をお願いします。
機能のところだけ載せようかと思ったのですが全体があった方がいいかと思い載せました。見づらくてすみません。
PHP
1<?php 2ini_set('display_errors', 1); 3//アクセスカウンターの部分 4$filename = 'counter.dat'; 5 6$fp1 = fopen($filename, "r+"); 7flock($fp1,LOCK_EX); 8$count = fgets($fp1,32); 9$count++; 10fseek($fp1, 0); 11fputs($fp1, $count); 12flock($fp1, LOCK_UN); 13fclose($fp1); 14//ここまでアクセスカウンター 15 16//定義系 17$err_msg1 = ""; 18$err_msg2 = ""; 19$err_msg3 = ""; 20$message = ""; 21$name = (isset($_POST["name"]) === TRUE) ?$_POST["name"]:""; 22$comment = (isset($_POST["comment"]) === TRUE) ?trim($_POST["comment"]):""; 23$_POST["date"] = date('Y/m/d H:i:s'); 24$color = isset($_POST["color"]) ? $_POST["color"] : ''; 25$password = (isset($_POST["password"]) === TRUE) ?trim($_POST["password"]):""; 26 27//ここまで定義系 28 29 30//入力の判定と書き込み 31if(isset($_POST["send"]) === TRUE){ 32 if($name === "")$err_msg1 = '名前を入力してください'; 33 34 if($comment === "")$err_msg2 = 'コメントを入力してください'; 35 36 if($password === "" || mb_strlen($_POST["password"]) > 4 || !ctype_digit($_POST["password"])) 37 $err_msg3 = 'パスワードを4字以下の数字で設定してください'; 38 39 if($err_msg1 === "" && $err_msg2 === "" && $err_msg3 ===""){ 40 $fp2 = fopen("data.txt", "a+"); 41 $file = file("data.txt"); 42 $number = count($file)+1; 43 fwrite($fp2, $number."\t".$name."\t".$comment."\t".date('Y/m/d H:i:s')."\t".$color."\t".$password."\r\n"); 44 fclose($fp2); 45 $message = '書き込みに成功しました'; 46 } 47} 48//ここまでエラー文&ファイル書き込み 49 50//ファイル読み込み 51$fp3 = fopen("data.txt", "r"); 52 53$dataArr = array(); 54while($res = fgets($fp3)){ 55 $tmp = explode("\t", $res); 56 $arr = array( 57 "number"=>$tmp[0], 58 "name"=>$tmp[1], 59 "comment"=>$tmp[2], 60 "date"=>$tmp[3], 61 "color"=>$tmp[4], 62 "password"=>$tmp[5] 63 ); 64 65 $dataArr[] = $arr; 66} 67//ここまでファイル読み込み 68 69//削除機能 70if(isset($_POST["delete"]) === TRUE){ 71 $fp4 = fopen("data.txt", "r+"); 72 $file = file("data.txt"); 73 $sakujo = $_POST["sakujo"]; 74 $pass = $_POST["pass"]; 75 $pattern = "/^($sakujo).($pass)$/"; 76 77if(preg_match($pattern, $file) === 1){ 78 preg_replace($pattern, "", $file); 79 $message = '削除しました'; 80 }else{ 81 $message = '<font color="red">この投稿は削除できません</font>'; 82 } 83 fclose($fp4); 84} 85 86//ここまで削除機能 87$fp4 = fopen("data.txt", "r+"); 88$file = file("data.txt"); 89var_dump($file); 90fclose($fp4); 91?> 92 93<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.ong/TR/html4/loose.dtd"> 94<html lang="ja"> 95 <head> 96 <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 97 <title>掲示板</title> 98 </head> 99 <body bgcolor="#9999FF"> 100 <table border="1"> 101 <tr><td><?php echo $count;?></td></tr> 102 </table> 103 <h1><center>一行掲示板</center></h1> 104 <h3><center>思いつくまま、一言メッセージをどうぞ。</center></h3> 105 <h5><center>パスワードを設定し自分の投稿を削除することができます。</center></h5> 106 <?php echo $message; ?> 107 <center><table border="2" bgcolor="#9999FF"> 108 <form action="" method="POST"> 109 <tr> 110 <td>名前</td><td><input type="text" name="name" value="<?php echo $name;?>"></td> 111 </tr> 112 <?php echo '<font color="red">'.$err_msg1.'</font>';?><br> 113 <tr> 114 <td>コメント</td><td><textarea name="comment" row="4" cols="40" value="<?php echo $comment;?>"></textarea></td> 115 </tr> 116 <?php echo '<font color="red">'.$err_msg2.'</font>';?><br> 117 118 <tr> 119 <td> 120 <label for="color">文字の色</label> 121 <select name="color"> 122 <option value="#000000" selected>黒</option> 123 <option value="#FFFFFF">白</option> 124 <option value="#FF0000">赤</option> 125 <option value="#0000FF">青</option> 126 <option value="#00FF00">緑</option> 127 <option value="#660099">紫</option> 128 <option value="#FF3300">橙</option> 129 </select> 130 </td> 131 <td>パスワード<input type="password" name="password"></td> 132 <?php echo '<font color="red">'.$err_msg3.'</font>';?> 133 <td><input type="submit" name="send" value="クリック"></td> 134 </tr> 135 </form> 136 </table></center> 137 <br> 138 <hr> 139 <br> 140 <dl> 141 <?php foreach($dataArr as $data):?> 142 <p><span><?php 143 echo '['.$data["number"].']'; 144 ?></span> 145 <span> 146 <font color="<?php echo htmlspecialchars($data["color"], ENT_QUOTES, 'UTF-8');?>"> 147 <?php echo htmlspecialchars($data["name"], ENT_QUOTES, 'UTF-8');?> 148 </font> 149 </span> > <span> 150 <font color="<?php echo htmlspecialchars($data["color"], ENT_QUOTES, 'UTF-8');?>"> 151 <?php echo htmlspecialchars($data["comment"], ENT_QUOTES,'UTF-8');?> 152 </font> 153 </span> 154 <span>(<?php echo $data["date"];?>)</span> 155 </p> 156 <?php endforeach;?> 157 </dl> 158 <br> 159 <hr> 160 <br> 161 <center><table border="2" bgcolor="#9999FF"> 162 <form action ="" method="POST"> 163 <tr> 164 <td>投稿番号</td><td><input type="text" name="sakujo" required></td> 165 </tr> 166 <tr> 167 <td>パスワード</td><td><input type="password" name="pass" required></td> 168 </tr> 169 <tr><td></td> 170 <td><input type="submit" value="削除" name="delete"></td> 171 </tr> 172 </form></table></center> 173 </body> 174</html> 175
回答3件
あなたの回答
tips
プレビュー