phpの基本を勉強しています。
サンプルを参考に、下記のように作ってみました。動作することはするのですが、画面表示部分のコードが、1行ずつ具体的に何をしているのか理解できていません。
全ソースコードは下記です。
php
1<?php 2 3$name = ( isset($_POST["name"]) === true ) ? $_POST["name"]: ""; 4$comment = ( isset($_POST["comment"]) === true ) ? trim($_POST["comment"]): ""; 5$err_msg1 = ""; 6$err_msg2 = ""; 7$message = ""; 8 9// 投稿がある場合のみ処理を行う 10if ( isset($_POST["send"]) === true ){ 11 if ( $name === "" ) $err_msg1 = "名前を入力してください"; 12 if ( $comment === "" ) $err_msg2 = "コメントを入力してください"; 13 // 両方ともエラーがなければ 14 if ( $err_msg1 === "" && $err_msg2 === "" ){ 15 // 追加の書き込み 16 $fp = fopen( "data_0320.txt", "a" ); 17 $datas = ""; 18 $datas = $datas.$name."\t"; 19 $datas = $datas.$comment."\r\n"; 20 // fwrite(ファイルポインタ、書き込み内容); 21 fwrite ( $fp, $datas ); 22 $message = "書き込み成功"; 23 } 24} 25 26$fp = fopen( "data_0320.txt", "r" ); 27 28$dataArr = array (); 29while ( $res = fgets($fp) ){ 30 $tmp = explode( "\t", $res ); 31 $arr = array( 32 "name" => $tmp[0], 33 "comment"=> $tmp[1] 34 ); 35 $dataArr[] = $arr; 36} 37?> 38<html lang="ja"> 39<head> 40<meta charset="UTF-8" /> 41<title>0322掲示板</title> 42</head> 43<body> 44<h1>掲示板20160320</h1> 45<?php print $message; ?> 46<form method="post" action=""> 47<p>名前:<input type="text" name="name" value="<?php print $name; ?>" /></p> 48<p><?php print $err_msg1; ?></p> 49 50<p>コメント:<textarea name="comment" rows="4" cols="40"><?php print $comment; ?></textarea></p> 51<p><?php print $err_msg2; ?></p> 52 53<p><input type="submit" name="send" value="投稿する" /></p> 54</form> 55<dl> 56 <?php 57 foreach ( $dataArr as $data ) { 58 print "<dt>".$data["name"]."</dt>\n"; 59 print "<dd>".$data["comment"]."</dd>\n"; 60 } 61 ?> 62</dl> 63</body> 64</html>
理解できないのは下記です。
php
1$dataArr = array (); 2while ( $res = fgets($fp) ){ 3 $tmp = explode( "\t", $res ); 4 $arr = array( 5 "name" => $tmp[0], 6 "comment"=> $tmp[1] 7 ); 8 $dataArr[] = $arr; 9}
1回の投稿をテキストファイルに格納するための配列「$dataArr」を作る
→テキストファイルから1行取得して「$res」に格納
→「$res」をタブで分けて「$tmp」に代入
→???
といった感じです。「$dataArr[] = $arr;」とか、さっぱりわかりません。
また、冗長あってもわかりやすい他の記述方法なども教えていただけますと幸いです。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/21 04:36