PHP5.2.4 (バージョンは指定によるもの)
掲示板を作る課題に取り組んでいます。
パスワードを入力し編集と削除を出来るようにするところです。
現在、保存されたパスワードは見えるようにしています(テストしやすくするため)。
削除機能ではパスワードが違った時にMessageを出すことに成功しています。
何故か編集機能ではそれが出来ません。
同じようにしたつもりなんですが。
そこで、変数とかname属性を今一度確認してみました。
スペルミスもチェックしました。
var_dumpしてみると$hpMessageはnullになっています。
何が悪いのかわかりません。
どこがおかしいのか、またそれを見つけるためにするべきことをご教示願います。
php
1<?php 2$fname = "keijiban.txt"; //保存するファイル 3$name = filter_input( INPUT_POST, "name" ); //投稿者の名前 4$comment = filter_input( INPUT_POST, "comment" ); //投稿するコメント 5$D_no = filter_input( INPUT_POST, "D_no" ); //削除番号の変数定義 6$H_no = filter_input( INPUT_POST, "H_no" ); //編集番号の定義 7$hidden = filter_input( INPUT_POST, "hidden" ); //hiddenの送信 8$psw = filter_input( INPUT_POST, "psw" ); //passwordの送信 9$chpsw = filter_input( INPUT_POST, "chpsw" ); //照合するパスワード 10$date = date( "Y-m-d H:i" ); //投稿日時 11$delimiter = "<>"; //区切り文字 12$search = array( "\r\n", "\r", "\n", "<>" ); //置き換え時の検索文字 13$replace = array( "<<改行1>>", "<<改行2>>", "<<改行3>>", "<>" ); //置き換える文字 14//投稿番号の定義 15$rname = str_replace( $search, $replace, $name ); //置き換えられた名前 16$rcomment = str_replace( $search, $replace, $comment ); //置き換えられたコメント 17if ( is_file( $fname ) ) { //ファイルの存在確認。 18 //最後の行にプラス1 19 $ret_array = file( $fname ); 20 $lastline = $ret_array[ count( $ret_array ) - 1 ]; 21 $num = explode( $delimiter, $lastline ); 22 $lastnum = $num[ 0 ] + 1; 23} else { //ファイルが無かった場合変数の定義を1とする 24 $lastnum = 1; 25} 26//書き込み内容 27$hozon = implode( $delimiter, array( $lastnum, $rname, $rcomment, $date, $psw ) ); 28 29//投稿部分 30if ( !empty( $name ) && !empty( $comment ) && !empty( $psw ) && empty( $hidden ) ) { //もし名前とコメントが送信されたら 31 $fp = fopen( $fname, "a" ); //追記モードでファイルを開く 32 if ( flock( $fp, LOCK_EX ) ) { //ロックする 33 fwrite( $fp, $hozon . "\r\n" ); //指定したファイルに追記モードで書き込み 34 } 35 flock( $fp, LOCK_UN ); 36 fclose( $fp ); 37 header( 'Location: tesuto.php', true, 303 ); 38 exit; 39} 40 41//編集番号指定 42elseif ( !empty( $H_no ) ) { //もしPOSTで編集用の番号が送信されたら 43 $ret_array = file( $fname ); //ファイルを配列として読み込む 44 foreach ( $ret_array as $value ) { //ループ 45 $h_bangou = explode( $delimiter, $value ); //<>で分割し投稿番号取り出す 46 if ( $H_no == $h_bangou[ 0 ] ) { //送信と書き込みの番号が同じなら 47 $h_no = $h_bangou[ 0 ]; 48 $h_name = $h_bangou[ 1 ]; 49 $h_comment = $h_bangou[ 2 ]; 50 $hMessage = ""; 51 } 52 if (!in_array($H_no,$h_bangou,true) || empty( $h_bangou )){//投稿番号の中に送信された番号がないか、ファイルの中身が無い時時 53 $sMessage = "該当する投稿がありません"; 54 } 55 } 56 57 } 58 59 60//編集機能 61elseif ( !empty( $name ) && !empty( $comment ) && !empty( $hidden ) ) { //名前とコメントとhiddenが空でなかったら 62 $ret_array = file( $fname ); //ファイルを配列として読み込む 63 $fp = fopen( $fname, "w" ); //書き込みモードでファイルを開く 64 if ( flock( $fp, LOCK_EX ) ) { //排他ロック出来たら 65 foreach ( $ret_array as $value ) { //ループ 66 $h_bangou = explode( $delimiter, trim( $value ) ); //<>で分割し投稿番号取り出す 67 if ( $H_no == $h_bangou[ 0 ] && $chpsw !== $h_bangou[ 4 ] ){ 68 $hpMessage = "パスワードが違います"; 69 } 70 71 if ( $hidden == $h_bangou[ 0 ] && $chpsw == $h_bangou[ 4 ] ) { //送信と書き込みの番号が同じで、且つパスワードが一致すけば 72 $hensyu = implode( $delimiter, array( $hidden, $rname, $rcomment, $date, $chpsw ) ); 73 fwrite( $fp, $hensyu . "\r\n" ); //指定したファイルに追記モードで書き込み 74 } else { 75 fwrite( $fp, $value ); 76 } 77 78 } 79 } 80 flock( $fp, LOCK_UN ); //ロック開放 81 fclose( $fp ); 82 /* header( 'Location: tesuto.php', true, 303 ); 83 exit;*/ 84} 85 86//削除機能 87elseif ( !empty( $D_no ) && !empty( $chpsw ) ) { //削除番号とパスワードがからでなかったら 88 $ret_array = file( $fname ); //ファイルを配列として読み込む 89 $fp = fopen( $fname, "w" ); //wモードで開く 90 if ( flock( $fp, LOCK_EX ) ) { //もし排他ロックかけたら 91 foreach ( $ret_array as $value ) { //ループ 92 $D_bangou = explode( $delimiter, trim( $value ) ); //<>で分割し投稿番号取り出す 93 if ( $D_no == $D_bangou[ 0 ] && $chpsw == $D_bangou[ 4 ] ) { //削除番号とパスワードが一致するものはなにもしない 94 $sMessage = "削除されました"; 95 } else{ //それ以外は 96 fwrite( $fp, $value ); //ファイルに書きこむ 97 } 98 if (!in_array($D_no,$D_bangou,true)|| empty( $D_bangou )){//投稿番号の中に送信された番号がなかった時 99 $sMessage = "該当する投稿がありません"; 100 } 101 if ( $D_no == $D_bangou[ 0 ] && $chpsw !== $D_bangou[ 4 ] ){ 102 $sMessage = "パスワードが違います"; 103 } 104 } 105 } 106 flock( $fp, LOCK_UN ); //ロック開放 107 fclose( $fp ); 108 109} 110var_dump( $fname ); 111var_dump( $ret_array ); 112var_dump( $h_bangou ); 113var_dump( $hpMessage ); 114//var_dump( $D_bangou[ 4 ] ); 115var_dump( $chpsw ); 116?> 117<!doctype html> 118<html lang="ja"> 119<head> 120<meta charset="utf-8"> 121<title>簡易掲示板</title> 122<script> 123window.addEventListener('DOMContentLoaded', function(){ 124document.querySelector('#delbtn').addEventListener('click',function(e){ 125if(!confirm('本当に削除しますか?')){ 126alert('キャンセルされました'); 127e.preventDefault(); 128} 129}); 130}); 131</script> 132<style> 133span { 134 color : red; 135} 136</style> 137</head> 138<body> 139<?php 140$fname = "keijiban.txt"; 141$f_search = array( "<<改行1>>", "<<改行2>>", "<<改行3>>", "<>" ); //置き換え時の検索文字 142$f_replace = array( "\r\n", "\r", "\n", "<>" ); //置き換える文字 143if ( !empty( $H_no ) && $H_no == $h_no ) { 144 echo "<span>" . $h_no . "番</span>の投稿を編集をします<BR>"; 145} 146?> 147<!--投稿フォーム--> 148<form method="post" > 149 <label for="name-field">お名前<span>【必須】</span> </label> 150 <input type="hidden" name="hidden" value="<? echo $h_no; ?>"> 151 <input type="text" name="name" id="name-field" required="required" value="<?php echo str_replace( $f_search, $f_replace, $h_name );?>"> 152 <br> 153 <label for="comment">コメント<span>【必須】</span></label> 154 <textarea name="comment" cols="30" rows="3" id="comment" required="required"><?php echo str_replace( $f_search, $f_replace, $h_comment );?></textarea> 155 <br> 156 <?php 157 if ( !empty( $H_no ) ) { 158 echo "投稿時設定したパスワードを入力して下さい<span>【必須】</span><br><input type='passwoerd' name='chpsw' required='required'>"; 159 echo $hpMessage; 160 } else { 161 echo "<label for='psw' >パスワード設定</label><span>【必須】</span> 162 <input type='password' name='psw' required='required'>"; 163 echo $hpMessage; 164 } 165 ?> 166 <input type="submit" value="<?php if (!empty( $H_no ) ){ echo '編集'; }else{ echo '投稿'; }?>"> 167</form> 168<!--削除番号指定用フォーム--> 169<form method="post" name="sakujo"> 170 <label for="D_no" >削除対象番号</label> 171 <input type="namber" name="D_no" id="D_no" required="required"> 172 <br> 173 <label for="spsw" >削除パスワード</label> 174 <input type="password" name="chpsw" required="required"> 175 <input name="btn" type="submit" value="削除" id="delbtn"> 176 <?php echo $sMessage; ?> 177</form> 178 179<!--編集番号指定用フォーム--> 180<form method="post"> 181 <label for="H_no" >編集対象番号</label> 182 <input type="namber" name="H_no" required="required"> 183 <input type="submit" value="編集"> 184 <?php echo $hMessage; ?> 185</form> 186<?php 187$search = array( "<<改行1>>", "<<改行2>>", "<<改行3>>", "<>" ); //置き換え時の検索文字 188$replace = array( "<br>", "<br>", "<br>", "<>" ); //置き換える文字 189if ( is_file( $fname ) ) { //ファイルの存在確認 190 $ret_array = file( $fname ); //配列として読み込む 191 if ( empty( $ret_array ) === false ) { //配列があれば 192 foreach ( $ret_array as $value ) { //ループ 193 $bunkatu = explode( $delimiter, $value ); //<>で分割する 194 foreach ( $bunkatu as $value2 ) { //ループ 195 echo str_replace( $search, $replace, $value2 ) . "<br>\n"; //投稿内容を表示(<<改行>>と<>を<br>と<>に置き換える) 196 } 197 } 198 } else { //配列がなければ 199 echo "まだ投稿はありません"; //「まだ投稿がありません」と表示させる 200 } 201} else { //ファイルが存在しなければ 202 echo "まだ投稿はありません"; //「まだ投稿がありません」と表示させる 203} 204?> 205</body> 206</html> 207
回答1件
あなたの回答
tips
プレビュー