- ベストアンサー
フォームのデータを受け取りについて
- フォームのデータを受け取る際に発生したエラーについて解決方法を教えてください。
- 質問者はフォームのデータを受け取る際にエラーが発生し、extract()関数の使用に関して質問しています。
- 現在の処理では、フォームから送信されたデータを配列に格納した後、extract()関数を使用しようとしていますが、エラーが発生してしまいます。どのようにすれば正常に動作させることができるでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
POST で submit が送られてこなければ foreach で POST の値に処理を加えて 配列 $array に値を入れなおしているという処理だと思いますが、 POST がなければ $array の中身は NULL なので、extract に渡される値が NULL となり、 配列を渡してくださいね、って怒られています。 foreach の前に if( $_POST ) を入れるなり、$array = array(); で $array を初期化するなりすればいいんじゃないでしょうか。
その他の回答 (3)
- oka5130
- ベストアンサー率66% (35/53)
処理の流れはそんな感じで良いんじゃないでしょうか。 エラーの意味に関しては、プログラムをやるならエラーはご自分で 理解できるようになっておいた方が良いと思います。 エラーメッセージには行番号が出ますし、英語もそれほど難しくはありませんので。 行番号がおかしなところを指していれば、括弧が合っていないことが多いです。 もしエラーメッセージの意味がわからなかったら翻訳サイトで日本語に翻訳するか、 検索エンジンにそのまま放り込めば大抵は答えが見つかります。
お礼
お返事ありがとうございます! 本やサイトを見て勉強しているのですが十人十色という言葉通り 構成もそれぞれでどの方法が効率がいいものかというところからで 困惑しておりました。 今回質問させて頂きました件は、おかげ様でなんとか解決できましたので 引き続き頑張ってみたいと思います。 またつまずいた際にお世話になることがあるかと思いますがその際は またアドバイスなど頂けますと幸いです。 本当にありがとうございました。
- oka5130
- ベストアンサー率66% (35/53)
No.2の方の回答への補足ですが、 PHP の配列は $_POST["submit"] のように [] で括るのが普通ですが、 {}で括っても良いようです。 (私も知りませんでしたが書いてみると動いてびっくりしました。。) PHP のマニュアルを見てもこのような書き方は見つからなかったのですが…。 いずれにせよ、配列は [] で括った方が良いかと思います。
- osamuy
- ベストアンサー率42% (1231/2878)
$_POST{"submit"} ――が悪さしているのでは。
補足
お返事ありがとうございます。 エラーの意味すらわからなかったもので非常に助かりました。 var_dump($array);として試してみたところ正常に値を取得できました。 array(5) { ["name"]=> string(6) "名前" ["email"]=> string(7) "mail@ad" ["title"]=> string(12) "タイトル" ["msg"]=> string(15) "メッセージ" ["mode"]=> string(7) "confirm" } メールフォームから送信するプログラムで流れとして 入力→確認→送信完了という形なので確認する箇所に記述しましたが 知識不足で自信がないものでおかしい箇所などがありましたら 教えて頂けますと幸いです。 ---forms.php--- require_once "tpl.php"; // データ取得 $mode = $_POST["mode"]; switch ($mode) { // メール送信 case "send": send(); break; // データ処理と確認 case "confirm": if (!$_POST["submit"]) { //POSTデータを全て受け取りエスケープして変数に入れる foreach($_POST as $k => $v) { if(get_magic_quotes_gpc()) { $v=stripslashes($v); } $v=htmlspecialchars($v); $array[$k]=$v; } extract($array); } confirm(); break; // 入力フォーム表示 default: input(); break; } ---tpl.php--- // フォーム表示 function input() { echo <<<EOM <form method="post" action="forms.php"> <table border="1"> <tr> <td>お名前</td> <td><input type="text" name="name" size="20"></td> </tr> <tr> <td>メールアドレス</td> <td><input type="text" name="email" size="20"></td> </tr> <tr> <td>タイトル</td> <td><input type="text" name="title" size="20"></td> </tr> <tr> <td>メッセージ</td> <td><textarea name="msg" rows="5" cols="40"></textarea></td> </tr> <tr> <td colspan="2"><input type="submit" value="内容を確認"></td> </tr> </table> <input type="hidden" name="mode" id="mode" value="confirm" /> </form> EOM; exit(); } // 確認画面表示 function confirm() { $aa = nl2br($_POST['msg']); echo <<<EOM <p>{$_POST["name"]} 様</p> 下記の内容で送信致します。送信内容を確認後送信ボタンを押してください。 <form method="post" action="forms.php"> <table border="1"> <tr> <td>お名前</td> <td>{$_POST["name"]}</td> </tr> <tr> <td>メールアドレス</td> <td>{$_POST['email']}</td> </tr> <tr> <td>タイトル</td> <td>{$_POST['title']}</td> </tr> <tr> <td>メッセージ</td> <td>$aa</td> </tr> <tr> <td colspan="2"><input type="submit" value="送 信" /> <input type="button" value="戻 る" onclick="history.back()" /></td> </tr> </table> <input type="hidden" name="mode" id="mode" value="send" /> </form> EOM; exit(); } // 送信完了画面表示 function send() { echo <<<EOM <p>{$_POST["name"]} 様</p> <p>お問い合わせありがとうございました。</p> EOM; exit(); } 勉強中の段階ですのでまだまだ完成品には程遠く入力チェックなどの エラー処理など課題は山積みです・・・^^;