最近phpの学習を始めました。
そこで入力フォームを作成し、送信ボタンを押すと、入力フォームの下に順次送信内容が表示されていくというものを作っています。
詳細:
・入力フォームのphpファイルを開くと、最初にtxtファイル(送信内容[番号、名前、コメント、時間]が一行ずつ履歴として残されている)から履歴を読み込み、入力フォームの下に一行ずつ表示する。
・送信ボタンを押すと、送信した内容がtxtファイルに"//"区切りで追加され、変更後のtxtファイルの内容を入力フォームの下に順次表示していく。
現状の問題点:
・初回phpファイル実行時に、txtファイルの内容が表示されない(リロードすれば表示される)。
・送信ボタンを押した時、txtファイルには今送信した内容が書き込まれているが、そのデータをphpで表示すると、たった今送信した内容が表示されずに前回分が一回遅れで表示されてしまう。
目標:
・初回phpファイル実行時に、txtファイルから読み取った内容を表示したい(リロードしなくても)。
・送信ボタンを押したら、たった今送信された内容が追加でphpで表示されるようにしたい。
色々と調べてはみたのですが、初学者の私には解決することができませんでした。
どなたかわかる方がいらっしゃいましたら、ご教授ください。
参考までに、現状のプログラムを記載します。
php
1<!-- 投稿番号を求める --> 2<?php 3 $filename = "sample.txt"; 4 5 // データ格納ファイルが存在するならば、最終行の数字を読み込み、存在しなければ1から始める 6 if (file_exists("sample.txt")==true){ 7 // $num = $_GET["num"] + 1; 8 $fp = fopen($filename, "r"); 9 $data = file($filename); 10 $data_explode = explode("//", $data[count($data)-1]); 11 // ファイルの中に過去のデータが存在する場合、ファイル内の最新データの番号+1が今回の番号 12 if (intval($data_explode[0])>0) { 13 $num = intval($data_explode[0])+1; 14 } else { // ファイル内に過去のデータが存在しない場合、1から番号を始める 15 $num = 1; 16 } 17 fclose($fp); 18 } else { // ファイルが存在しない場合、1から番号を始める 19 $num = 1; 20 } 21?> 22 23 24<!DOCTYPE html> 25<html> 26 <head> 27 <meta charset="utf-8"> 28 <title>mission_2-3</title> 29 </head> 30 <body> 31 <form action="sample.php", method="get"> 32 <h3 class="input_form_text">入力フォーム</h3> 33 <!-- border : 枠線の太さ --> 34 <table border=0> 35 <tr> 36 <td>番号:</td> 37 <td><?php echo $num; ?></td> 38 <input type="hidden" name="num" value="<?php echo $num; ?>"> 39 </tr> 40 <tr> 41 <td>名前:</td> 42 <td><input class="textbox_name", type="text", name="input_name"></td> 43 </tr> 44 <tr> 45 <td>コメント:</td> 46 <td> 47 <textarea class="textbox_comment", name="input_comment", cols="30", rows="5"></textarea> 48 </td> 49 </tr> 50 </table> 51 <br> 52 <?php 53 if(htmlspecialchars($_GET["input_name"])=="" || htmlspecialchars($_GET["input_comment"])){ 54 echo "Error!"; 55 } 56 ?> 57 <input type="submit"> 58 </form> 59 <br> 60 </body> 61</html> 62 63<!-- 投稿履歴の表示 / txtファイルに入力情報登録 --> 64<?php 65 66 // 改行コード挿入関数 67 function br(){ 68 echo nl2br("\n"); 69 } 70 71 $filename = 'sample.txt'; 72 73 74 $fp = fopen($filename, 'a+'); 75 $data = file($filename); // ファイル内容 76 77 // 入力データ取得 78 $textbox_name = htmlspecialchars($_GET["input_name"]); 79 $textbox_comment = htmlspecialchars($_GET["input_comment"]); 80 81 // データの書き込み 82 $fp = fopen($filename, "a"); 83 $slice = '//'; 84 fwrite($fp, $num.$slice.$textbox_name.$slice.$textbox_comment.$slice.date("Y年m月d日 H時i分s秒", time())."\n"); 85 86 fclose($fp); 87 // // テキストデータを2次元配列に格納 88 for($i=0; $i<count($data); $i++){ 89 $data_explode[$i] = explode('//', $data[$i]); 90 } 91 92 93 94 // 2次元配列に格納されているファイルデータを表示 95 for($i=0; $i<count($data_explode); $i++) { 96 for($j=0; $j<count($data_explode[$i]); $j++){ 97 echo $data_explode[$i][$j]; 98 } 99 br(); 100 } 101?> 102
下が、sample.txtです。
txt
11//test1//test1//2016年08月13日 15時18分41秒 22//test2//test2//2016年08月13日 15時18分42秒 33//test3//test3//2016年08月13日 15時18分43秒
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/20 04:13