🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

1回答

1717閲覧

PHPで作成した編集機能に入力したフォームに表示したいです。

SY2323

総合スコア4

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2019/12/21 11:17

前提・実現したいこと

今週PHPを始めた初心者です。qiitaやteratailを参考にPHPで簡易掲示板を作成しているのですが、編集したものを入力済みで表示したいのですがエラーメッセージが発生しまい直すことができません。下記が実装したい内容となっています。
修正点や間違っている部分、ご指摘お願いいたします。

指定された番号のものだけ編集できるようにする a.入力フォームとは別に、編集番号指定用フォームを用意する。項目は編集対象番号。 b.POST送信にて編集番号を送信する。その際if文で編集フォームから値が送信された場合のみの処理に分岐させておく c.fileで配列化して読み込み、ループさせる d.explodeを使って投稿番号を取得する e.各投稿番号とPOSTで送信された編集番号を比較し、イコールの時の配列値を取得する f.(1)で用意した入力フォームに、取得した配列値を入力済み状態で表示させる g.その値をPOSTで送信して編集を行うが、編集かどうかわかるように<input type="hidden">タグを用いて、編集モードかどうかを判別する h.編集内容の値が送信されたら、同じくc~dの処理を行い、eと同じように番号の比較を行って、イコールの時に配列値を取得するのではなく送信された値と差し替える i.差し替えた配列をテキストに上書き保存する

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

<br /><b>Notice</b>: Undefined index: name3 in

該当のソースコード

php

1<html> 2<head> 3 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 4 <title></title> 5</head> 6<body> 7 <?php 8 9 /***** ファイル書き込み********/ 10 $dataFile = "keiji_2.txt"; 11 12 if(isset($_POST['make'])){ 13 $str = (sizeof(file($dataFile))+1) . '<>' . $_POST['name'] . '<>' . $_POST['comment'] . '<>' . date('m/d/H:i') . '<>' .$_POST['password'] . "\n"; 14 $fp = fopen('keiji_2.txt','a'); 15 fwrite($fp, $str); 16 fclose($fp); 17 } 18 19 /***** ファイル消去********/ 20 if (isset($_POST['del'])){ 21 $file_make = file("keiji_2.txt"); 22 for($k = 0;$k <count($file_make); ++$k){ 23 $file_make[$k] = preg_replace("/\n/", "", $file_make[$k]); 24 25 echo "fn: ".$file_make[$k]."<hr>"; 26 27 $delData = preg_split("/<>/", $file_make[$k]); 28 29 echo "del: ".$delData[4]."<hr>"; 30 31 if(($delData[0] == $_POST['name2']) && ($delData[4] == $_POST['pass'])) 32 { 33 echo 'in<hr>'; 34 array_splice($file_make, $k, 1); 35 file_put_contents($dataFile, implode("", $file_make)); 36 echo ($_POST['pass']);echo ($delData[4]); 37 } 38 } 39 } 40 41 /***** ファイル編集 入力フォーム表示********/ 42 if (isset($_POST['edit'])){ 43 $file_edit = file("keiji_2.txt");//テキストファイルを読みこむ 44 for($l = 0;$l <count($file_edit); ++$l){//ループ処理 45 $editData = explode("<>",$file_edit[$l]);//投稿番号を取得 46 if($editData[0] == ($_POST['name3'])) { 47 $simEdit = $editData; 48 } 49 } 50 } 51 52 /***** ファイル編集 ファイル書き込み********/ 53 if (isset($_POST['make']) && isset($_POST['hidden1'])) { 54 55 $file_edit = file("keiji_2.txt"); 56 for($m = 0;$m <count($file_edit); ++$m){ 57 $editData2 = explode("<>",$file_edit[$m]); 58 if($editData2[0] == ($_POST['hidden1'])){ 59 $n = $_POST['hidden1']; 60 $editData2[1] = $_POST['name']; 61 $editData2[2] = $_POST['comment']; 62 $file_edit[$m] = implode("<>", $editData2); 63 file_put_contents($dataFile,implode("", $file_edit)); 64 } 65 } 66 } 67 68 ?> 69 70 <!-- 書き込み用フォーム --> 71 <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 72 名前:<br/> 73 <input type="text" name="name" size="30" value="" /><br > 74 パスワード:<br/> 75 <input type="text" name="password" size="30" value=""/><br /> 76 コメント:<br/> 77 <input type="text" name="comment" size="30" value=""/><br /> 78 79 <br /> 80 <input type="submit" name="make"> 81 </form> 82 83 <!-- 削除用フォーム --> 84 <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 85 削除番号:<br/> 86 <input type="text" name="name2" size="30" value=""/><br /> 87 パスワード:<br><br/> 88 <input type="text" name="pass" size ="30" placeholder="fill in password"/><br/> 89 <input type="submit" name="del"> 90 </form> 91 92 <!-- 編集用フォーム --> 93 <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 94 <input type="hidden" name="hidden" value="<?php echo($_POST['name3']);?>"> 95 編集番号:<br/><br/> 96 <input type="text" name="name3" size="30" value="<?php echo($_POST['name3']);?> "/><br /> 97 <input type="submit" name="edit"> 98 99 </form> 100 101 <?php 102 103 /***** txtの最終出力********/ 104 $data_File = "keiji_2.txt";//テキストファイルを変数に格納 105 $ret_array = file($data_File);//ファイルを読みこむ 106 for($i = 0;$i <count($ret_array); ++$i){//ループ処理 107 $piece = explode("<>", $ret_array[$i]); 108 for($j = 0; $j < 4; ++$j){ 109 echo ($piece[$j]); 110 } 111 echo "<br />\n"; 112 } 113 ?> 114 115</body></html>

試したこと

デバッグvar_dumpを使用して値が取れているの確認したのですがうまく行かず詰まっていました。

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

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

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

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

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

guest

回答1

0

問題が発生しているのは多分

PHP

1<input type="hidden" name="hidden" value="<?php echo($_POST['name3']);?>"> 2<input type="text" name="name3" size="30" value="<?php echo($_POST['name3']);?> "/><br />

のところです。最初、そのサイトのアクセスする時は多分Getでアクセスしていると思います。(別に何かデータをまだ投稿しているわけではない)
なので、$_POST['name3']は最初サイトにアクセスする時はまだ定義されていません。(編集フォーム送信後に定義される。)

定義されてない$_POST['name3']を呼び出しそうとしているためエラーが発生します。

解決策としては例えば、
value="<?php if(isset($_POST['name3'])){echo($_POST['name3']);}?>"
のように書けます。

投稿2019/12/21 11:44

aoies

総合スコア331

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

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

SY2323

2019/12/21 13:40

定義されていないから怒るエラーなのですね。わかりやすく書いていただきありがとうございます。 一度試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問