HTMLとPHPで投稿フォームを作り、送信/受信を行う簡単なサイトを作っています。投稿順に応じて投稿番号が記載されるようにしたいのですが、最初の2投稿だけ番号が1になってしまいます。
(その後は2,3,4,,,とちゃんと増えていく)
コードは以下の通りです。
PHP
1<html lang="ja"> 2 <head> 3 <meta charset="UTF-8"> 4 <title>mission_1-21</title> 5 </head> 6 <body> 7 <!-HTMLとPHPで投稿フォームを作り、送信/受信を行う-> 8 <form action="" method="post"> 9 <input type="text" name="name" placeholder="名前"> 10 <input type="text" name="com" placeholder="コメント"> 11 <input type="submit" name="submit"> 12 <br> 13 <input type="number" name="del" placeholder="削除依頼番号"> 14 <input type="submit" name="削除"> 15 </form> 16 <?php 17 $name = $_POST["name"]; 18 $com = $_POST["com"]; 19 $date = date ( "Y年m月d日 H時i分s秒" ); 20 $filename="mission_3-3.txt"; 21 $num = 1; 22 $num = count(file($filename));//投稿番号の取得 23 $del = $_POST["del"];//削除番号の追加格納 24 25 ///////////////////////////////////確認 26 echo "============================"."<br>"; 27 echo "【確認】<br>"; 28 29 echo "今のnumは".$num."<br>"; 30 echo is_numeric($num)."<br>"; 31 echo $del."<br>"; 32 echo "comは".is_string($com)."<br>"; 33 34 echo "============================"."<br>"; 35 /////////////////////////////////// 36 37 if($com==""){}elseif(is_string($com)==1){ 38 $FP = fopen($filename,"a"); 39 fwrite($FP,$num."<>".$name."<>".$com."<>".$date.PHP_EOL); 40 fclose($FP); 41 } 42 43 if(file_exists($filename)){ 44 $toukous = file($filename,FILE_IGNORE_NEW_LINES); 45 } 46 47 foreach ($toukous as $toukou) { 48 $array = explode('<>', $toukou); 49 $N=count($array); 50 if($array[0]!=$del){ 51 for($i=0; $i<=$N-1; $i++){ 52 echo $array[$i]." "; 53 } 54 } 55 echo "<br>"; 56 } 57 58 ?> 59 60 </body> 61 </html>
【確認】の部分でその時々の投稿番号が、テキストファイルに書き込まれる前でどう定義されているのかを確認しています。
それによると、$numが投稿を送るごとに
1,1,2,3,4,・・・・
と動くので、
おそらく
【最初の投稿】
ファイルが空っぽでも、$num = count(file($filename));でなぜか1行目だけ認識されている
【2回目の投稿】
ファイルに1行しかないので$num = count(file($filename));で1が認識
【3回目】
ファイルに2行あるので$num = count(file($filename));で次の投稿番号が2
・
・
・
といった流れなのではないかの考えます。
とはいっても解決方法がわからないのですが。。。
どなたか解決法を教えていただけると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/19 07:17 編集
2021/01/19 11:56