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

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

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

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

Q&A

解決済

2回答

1771閲覧

PHP 編集機能つき掲示板

mk77

総合スコア8

PHP

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

0グッド

0クリップ

投稿2018/11/03 14:31

編集2018/11/04 02:02
<html lang="ja" dir="ltr"> <head> <meta charset="utf-8"> <title></title> </head> <body> <?php //ファイルの作成 $filename = "test.txt"; //ファイルの編集処理 //edit変数の作成 $edit = $_POST["edit"]; $overwrite = $_POST["overwrite"]; //$editに数値が入力された時 if(!empty($edit)){ //ファイルの作成 $fp = fopen($filename,"a"); //配列に格納 $lines = file($filename); //配列の行数分ループ foreach ($lines as $normaltext) { $text = explode("<>","$normaltext"); $number = $text[0]; //編集番号と投稿番号を比較し、一致した時上書き if ($number == $edit) { $name = $text[1]; $comment = $text[2]; $overwrite = $edit; } } } //変数の作成 $name = $_POST["name"]; $comment = $_POST["comment"]; $date = date("Y年m月d日h時i分s秒"); //フォームに入力された際の動作 if (!empty($comment)) { if (empty($overwrite)) { //ファイルを開く $fp = fopen($filename,"a"); //ファイルを配列に格納 $lines = file($filename); //配列の要素絵をcount $number = count($lines)+1; //全てをまとめた書き込み用変数(通常) $normaltext = "$number"."<>"."$name"."<>"."$comment"."<>"."$data"; //書き込み用変数を書き込む fwrite($fp,$normaltext,"\n"); fclose($fp); }else{ $newtext = "$overwrite"."<>"."$name"."<>"."$comment"."<>"."$date"; $fp = fopen($filename,"a"); //配列に格納 $line = file($filename); //ファイルの中身を空に ftruncate($fp,0); // foreach ($line as $normaltext) { $text = explode("<>".$normaltext); $number = $text[0]; if ($number == $overwrite) { $normaltext = $newtext; fwrite($fp,$newtext); } fclose($fp); } } } //削除処理 //削除フォームの受け取り $delete = $_POST["delete"]; if (!empty($delete)) { $d_lines = file($filename); for ($j = 0; $j < count($d_lines) ; $j++) { $d_Data = explode("<>", $d_lines[$j]); if ($d_Data[0] == $delete) { array_splice($d_lines, $j,1); file_put_contents($filename, $d_lines); } } } ?> <form class="" action="test.php" method="post"> <input type="text" name="name" placeholder="名前" value="<?php if(!empty($overwrite)) echo $text[1];?>"><br> <input type="text" name="comment" placeholder="コメント" value="<?php if(!empty($overwrite)) echo $text[2];?>"><br> <input type="text" name="overwrite" value="<?php if(!empty($overwrite)) echo $edit;?>"><br> <input type="submit" value="送信"> <input type="text" name="delete" placeholder="削除対象番号"><br> <input type="submit" value="送信"><br> <input type="text" name="edit" placeholder="編集対象番号"><br> <input type="submit" value="編集"> </form> </body> </html>

編集機能つきweb掲示板を作成したいのですが$editに数値を入力しても数値がフォームに返らずに困っています何かご指摘よろしくお願いします。

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

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

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

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

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

m.ts10806

2018/11/03 17:00

コードはマークダウンのcode機能を利用してください。
mk77

2018/11/04 02:02

ご指摘ありがとうございます。修正いたしました。
guest

回答2

0

ベストアンサー

既に回答が出ている通り変数が空(またはnull)であることが原因かと思われます。
エラー表示をOnにして確かめてみてください。
下記のようなNoticeが出るはずです。

PHP Notice: Undefined index: edit in ~~ PHP Notice: Undefined index: overwrite in ~~

これは、画面を普通に表示した際には$_POSTには何も送信されていないという前提もあります。
$_SEVER["REQUEST_METHOD"]でPOSTであるときのみ受け取るように書くか、
filter_inputで値を受け取るようにすると良いでしょう。

また$editについては!emptyのときの処理はあってもemptyの時の処理はありません。
空(またはnull)であるため、画面に何を表示させようとしても出ませんよね。

更に$editを表示するためには$overwriteが!emptyである必要があります。

あとはデバッグです。
var_dump()で変数を画面出力し、想定通りの値がきているか、どこまでその値が保持できているか
確認していってください。

投稿2018/11/04 04:31

m.ts10806

総合スコア80850

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

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

0

<input type="text" name="overwrite" value="<?php if(!empty($overwrite)) echo $edit;?>"><br>

↑この時点で$overwrite$editも未定義の状態だからではないでしょうか。

投稿2018/11/03 18:22

mrkmyki

総合スコア325

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

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

mk77

2018/11/04 02:03

PHPの順番を変えましたが、やはり動きません、、、
mrkmyki

2018/11/05 08:53

foreach ($lines as $normaltext) {~}のブロックがなんだか怪しい気がしますね。 ちゃんとファイルの中身が想定通りに読み込めているかなど、変数を表示してみて確認してみてはどうでしょう。 ちょっと処理が複雑すぎるので、phpとhtmlのファイルを分けたり、関数を使うなどの方法も勉強すると良いと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問