今回とあるコードでプログラムを作りました。いわば掲示板のようなもので
'edit_post'という変数が空かどうかということでif文を用いて場合分けを行っております。
今回、$edit = '';
という$editに空の初期値を与えましたが、今回この初期値がない場合条件分岐が
if(empty($_POST ['edit_post' ]))
ではなくelseのほうに行ってしまいます。調べたところ変数には定義しないとゴミのようなものが入ることがあると書いてあり、原因はこれかもと予想しました。そのため下のほうにあるhtmlの
<input type="hidden" name="edit_post" value="<?php echo $edit; ?>">
で$editになにかゴミのようようなものがあるため"edit_postが値を持ってしまったのかもしれないと考えました。そこでお聞きしたいのは僕の予測は正しいのかということです。もしも違っていた場合はどうしてこうのように空の初期値を与えないとしたのelseに条件分岐してしまうのかも教えていただきたいです。
初心者故、丁寧に解説していただけると幸いです。
php
1<?php 2 $filename = "kadai_2_1.txt"; 3 $editName = ''; 4 $editComment = ''; 5 $edit = ''; 6 7 if(isset($_POST[ 'name' ])&&isset($_POST[ 'opinion' ])){ 8 $name = $_POST[ 'name' ]; 9 $opinion = $_POST[ 'opinion' ]; 10 $date = date('Y-m-d H:i:s'); 11 12 13 14 15 16 if(empty($_POST ['edit_post' ])){ 17 18 $fp = fopen($filename,"a"); 19 $fileLaw = file($filename, FILE_IGNORE_NEW_LINES); 20 if(count($fileLaw)==0){ 21 22 $numSecond = 1; 23 }else{ 24 $line = end($fileLaw); 25 $lastNum = explode("<>", $line); 26 $numSecond = $lastNum[0]+1; 27 28 } 29 30 fwrite($fp,$numSecond."<>".$name."<>".$opinion."<>".$date."\n"); 31 fclose($fp); 32 }else{ 33 $fileLaw = file($filename, FILE_IGNORE_NEW_LINES); 34 $fp = fopen($filename,"w"); 35 $editNum = $_POST[ 'edit_post' ]; 36 for($i = 0; $i < count($fileLaw); $i++){ 37 $line = explode("<>",$fileLaw[$i]); 38 if($editNum == $line[0]){ 39 fwrite($fp,$editNum."<>".$name."<>".$opinion."<>".$date."\n"); 40 }else{ 41 fwrite($fp,$fileLaw[$i]."\n"); 42 } 43 44 }fclose($fp); 45 } 46 } 47 48 if(isset($_POST[ 'delete' ])){ 49 $delete = $_POST[ 'delete' ]; 50 $fileLaw = file($filename, FILE_IGNORE_NEW_LINES); 51 $fp = fopen($filename,"w"); 52 53 for($n = 0; $n < count($fileLaw); $n++){ 54 $line = explode("<>",$fileLaw[$n]); 55 $leadNumber = $line[0]; 56 if($leadNumber != $delete){ 57 58 fwrite($fp,$line[0]."<>".$line[1]."<>".$line[2]."<>".$line[3]."\n"); 59 60 } 61 } 62 fclose($fp); 63 } 64 if(isset($_POST[ 'edit' ])){ 65 $edit = $_POST[ 'edit' ]; 66 $fileLaw = file($filename, FILE_IGNORE_NEW_LINES); 67 for($n = 0; $n < count($fileLaw); $n++){ 68 $line = explode("<>",$fileLaw[$n]); 69 $leadNumber = $line[0]; 70 if($leadNumber == $edit){ 71 $editName = $line[1]; 72 $editComment = $line[2]; 73 } 74 } 75 } 76 77 78 79 80 81 82?> 83<!DOCTYPE html> 84<html> 85<head> 86<meta charset="utf-8"> 87<title></title> 88</head> 89<body> 90<form action="" method="POST"> 91<input type="hidden" name="edit_post" value="<?php echo $edit; ?>"> 92<p>お名前: 93<input type="text" name="name" value="<?php echo $editName; ?>"> 94</p> 95<p>コメント:</p> 96<p><textarea name="opinion" cols="50" rows="5"><?php echo $editComment; ?></textarea></p> 97<p><input type="submit" name="submitBtn" value="送信"></p> 98</form> 99<form action="" method="POST"> 100<p>削除したい番号を指定:</p> 101<p><input type="text" name="delete"> 102<input type ="submit" name="deleteBtn" value="削除"></p> 103</form> 104</body> 105</html> 106<form action="" method="POST"> 107<p>編集したい番号を指定:</p> 108<p><input type="text" name="edit"> 109<input type ="submit" name="editBtn" value="編集"></p> 110</form> 111<p>以下コメント</p> 112<?php 113 if(file_exists($filename)){ 114 115 116 $fp = fopen($filename, 'r'); 117 while (!feof($fp)) { 118 $txt = fgets($fp); 119 echo $txt.'<br>'; 120 } 121 } 122?> 123</body> 124</html>
回答1件
あなたの回答
tips
プレビュー