質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

921閲覧

phpにおけるif文における分岐に関するエラー

yohu_gakusei

総合スコア13

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2021/06/05 13:09

前提・実現したいこと

今回 if(isset($_POST[ 'name' ])&&isset($_POST[ 'opinion' ]))からif分岐させることで、新規入力と編集を分けております。理論上は、名前とコメントフォームに値が入力されると$_POST[ 'name' ]と$_POST[ 'opinion' ]に値が入力される仕組みとなっており、その結果
if(empty($_POST ['edit_post' ])){

$fp = fopen($filename,"a"); $date = date('Y-m-d H:i:s'); $numSecond = count(file($filename))+1; fwrite($fp,$numSecond."<>".$name."<>".$opinion."<>".$date."\n"); fclose($fp);の処理が行われ、ファイルに上書きが行われ、以下コメントの下にechoを使って出力されるはずなのですが、うまくいきません。また編集フォームに値が入力され、編集ボタンが押されることで、入力フォームに数値が代入され、同時に$_POST ['edit_post' ]にも値が入力されif文のelseへと分岐され、その結果編集が行われるというものなのですが、うまくいきません、原因の予想ですが、'edit_post' への値の出力は名前、コメントと同じformで行っているため、空となる場合を設定しなくてはいけないのではと考えております。phpをphpを触って約2週間ほどです。よろしくお願いします。

発生している問題・エラーメッセージ

エラーメッセージはないです。

該当のソースコード

php

1 2```<?php 3 $filename = "kadai_2_3.txt"; 4 $editName = ''; 5 $editComment = ''; 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 20 $date = date('Y-m-d H:i:s'); 21 $numSecond = count(file($filename))+1; 22 23 fwrite($fp,$numSecond."<>".$name."<>".$opinion."<>".$date."\n"); 24 fclose($fp); 25 }else{ 26 $fileLaw = file($filename, FILE_IGNORE_NEW_LINES); 27 $fp = fopen($filename,"w"); 28 $editNum = $_POST[ 'edit_post' ]; 29 for($i = 0; $i < count($fileLaw); $i++){ 30 $line = explode("<>",$fileLaw[$i]); 31 if($editNum == $line[0]){ 32 fwrite($fp,$edit."<>".$name."<>".$opinion."<>".$date."\n"); 33 }else{ 34 fwrite($fp,$fileLaw[$i]); 35 } 36 fclose($fp); 37 38 39 } 40 } 41 } 42 43 44 if(isset($_POST[ 'delete' ])){ 45 $delete = $_POST[ 'delete' ]; 46 $fileLaw = file($filename, FILE_IGNORE_NEW_LINES); 47 $fp = fopen($filename,"w"); 48 49 for($n = 0; $n < count($fileLaw); $n++){ 50 $line = explode("<>",$fileLaw[$n]); 51 $leadNumber = $line[0]; 52 53 if($leadNumber != $delete){ 54 55 fwrite($fp,$line[0]."<>".$line[1]."<>".$line[2]."<>".$line[3]."\n"); 56 57 } 58 59 } 60 fclose($fp); 61 } 62 63 if(isset($_POST[ 'edit' ])){ 64 $edit = $_POST[ 'edit' ]; 65 $fileLaw = file($filename, FILE_IGNORE_NEW_LINES); 66 for($n = 0; $n < count($fileLaw); $n++){ 67 $line = explode("<>",$fileLaw[$n]); 68 $leadNumber = $line[0]; 69 70 if($leadNumber == $edit){ 71 $editName = $line[1]; 72 $editComment = $line[2]; 73 } 74 } 75 76 77 78 79 } 80 81 82 83 84 85 86 87 88 89 90 91?> 92<!DOCTYPE html> 93<html> 94<head> 95<meta charset="utf-8"> 96<title></title> 97</head> 98<body> 99 100<form action="" method="POST"> 101<input type="hidden" name="edit_post" value="<?php echo $edit; ?>"> 102 103<p>お名前:<input type="text" name="name" value="<?php echo $editName; ?>"> 104 105</p> 106 107<p>コメント:</p> 108<p><textarea type="text" name="opinion" cols="50" rows="5" value="<?php echo $editComment; ?>"></textarea></p> 109 110<p><input type="submit" name="submitBtn" value="送信"></p> 111</form> 112 113<form action="" method="POST"> 114<p>削除したい番号を指定:</p> 115<p><input type="text" name="delete"> 116<input type ="submit" name="deleteBtn" value="削除"></p> 117</form> 118</body> 119</html> 120 121<form action="" method="POST"> 122<p>編集したい番号を指定:</p> 123<p><input type="text" name="edit"> 124<input type ="submit" name="editBtn" value="編集"></p> 125 126</form> 127</body> 128</html> 129 130<p>以下コメント</p> 131 132<?php 133 if(file_exists($filename)){ 134 135 136 137 $fp = fopen($filename, 'r'); 138 139 while (!feof($fp)) { 140 141 $txt = fgets($fp); 142 143 echo $txt.'<br>'; 144 145 } 146 } 147 148 149 150 151 152 153 154?>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

javahack

2021/06/05 17:49

質問文を修正してソースコードを<code>ブロックの中に入れてください。 タイトルでエラーと言っておいてエラーメッセージが無いとはどういうこと? 単に「うまくいかない」とするのではなく、想定結果と実際の出力がどう違うか等もう少し詳しく説明してください。
yohu_gakusei

2021/06/07 17:22

申し訳ございません、出力結果的にエラーは出ないのですが、今回自分の予想と意図しない結果となってしまったのでエラーという言葉を使わせていただきました。また、想定では名前とコメントを入力すると、以下コメントの下にその記載した内容が出力されるはずなのですが、まったく出てきません
kei344

2021/06/10 04:43

まだ質問が「受付中」になっていますが、いったんご自身の回答をもって「解決済」にされてはいかがでしょうか。
guest

回答2

0

自己解決

<?php $filename = "kadai_2_2.txt"; $editName = ''; $editComment = ''; $edit = ''; if(isset($_POST[ 'name' ])&&isset($_POST[ 'opinion' ])){ $name = $_POST[ 'name' ]; $opinion = $_POST[ 'opinion' ]; $date = date('Y-m-d H:i:s'); if(empty($_POST ['edit_post' ])){ $fp = fopen($filename,"a"); $numSecond = count(file($filename))+1; fwrite($fp,$numSecond."<>".$name."<>".$opinion."<>".$date."\n"); fclose($fp); }else{ $fileLaw = file($filename, FILE_IGNORE_NEW_LINES); $fp = fopen($filename,"w"); $editNum = $_POST[ 'edit_post' ]; for($i = 0; $i < count($fileLaw); $i++){ $line = explode("<>",$fileLaw[$i]); if($editNum == $line[0]){ fwrite($fp,$editNum."<>".$name."<>".$opinion."<>".$date."\n"); }else{ fwrite($fp,$fileLaw[$i]."\n"); } }fclose($fp); } } if(isset($_POST[ 'delete' ])){ $delete = $_POST[ 'delete' ]; $fileLaw = file($filename, FILE_IGNORE_NEW_LINES); $fp = fopen($filename,"w"); for($n = 0; $n < count($fileLaw); $n++){ $line = explode("<>",$fileLaw[$n]); $leadNumber = $line[0]; if($leadNumber != $delete){ fwrite($fp,$line[0]."<>".$line[1]."<>".$line[2]."<>".$line[3]."\n"); } } fclose($fp); } if(isset($_POST[ 'edit' ])){ $edit = $_POST[ 'edit' ]; $fileLaw = file($filename, FILE_IGNORE_NEW_LINES); for($n = 0; $n < count($fileLaw); $n++){ $line = explode("<>",$fileLaw[$n]); $leadNumber = $line[0]; if($leadNumber == $edit){ $editName = $line[1]; $editComment = $line[2]; } } } ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <form action="" method="POST"> <input type="hidden" name="edit_post" value="<?php echo $edit; ?>"> <p>お名前: <input type="text" name="name" value="<?php echo $editName; ?>"> </p> <p>コメント:</p> <p><textarea name="opinion" cols="50" rows="5"><?php echo $editComment; ?></textarea></p> <p><input type="submit" name="submitBtn" value="送信"></p> </form> <form action="" method="POST"> <p>削除したい番号を指定:</p> <p><input type="text" name="delete"> <input type ="submit" name="deleteBtn" value="削除"></p> </form> </body> </html> <form action="" method="POST"> <p>編集したい番号を指定:</p> <p><input type="text" name="edit"> <input type ="submit" name="editBtn" value="編集"></p> </form> <p>以下コメント</p> <?php if(file_exists($filename)){
$fp = fopen($filename, 'r'); while (!feof($fp)) { $txt = fgets($fp); echo $txt.'<br>'; } }

?>

</body> </html>

投稿2021/06/09 21:32

yohu_gakusei

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

とりあえず途中にある </body></html> は削除して末尾に書きましょう。

あと、$edit を設定しているところがないようですが?
--- 追記 ---
for ループの中で fclose() を書いてあるのはまずいと思います。
なんかエラー出てないですか?

投稿2021/06/05 20:55

編集2021/06/09 10:57
takasima20

総合スコア7464

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yohu_gakusei

2021/06/07 17:25

</body></html> は削除して末尾に書きましょう。 ありがとうございます。指摘通り、修正を加えました。また$editですが、値がhtml側から入力された場合if文による条件分岐で$edit = $_POST[ 'edit' ];と設定しております。
takasima20

2021/06/07 20:37

その $_POST[ 'edit' ] は hidden なのでプログラムで設定してないとしたら中身はないですよね?
yohu_gakusei

2021/06/08 04:17

返信ありがとうございます。今回 <input type="hidden" name="edit_post" value="<?php echo $edit; ?>"> よりedit_postはhiddenで設定しておりますが、<p><input type="text" name="edit"> で設定しているため、 $_POST[ 'edit' ]はtextだと思います。
yohu_gakusei

2021/06/09 20:36

返信ありがとうござます。おっしぁるとおりでしたので変更いたしました、また今回$editに初期値を与えることで解決することができました、原因といたしましたはif分岐がelseのほうに流れてしまっていたため出力されていなかったと考えられます、しかしなぜうまくいったかがわかりません
yohu_gakusei

2021/06/09 21:32

以下にうまくいったコードを記します
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問