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

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

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

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

Q&A

1回答

3655閲覧

php Undefined index(なぜ?)

reotantan

総合スコア295

PHP

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

0グッド

1クリップ

投稿2018/03/01 14:20

Undefined indexエラーが起きていますが、formで送った値の名前と
受け取る値の名前は同一になっていますので、なぜこのエラーが吐き出されているのかわかりません。

アプリの概要:form.htmlで値を入力し、add.phpで処理して、DBに入力内容を登録するといったものです

先輩方のご助力をいただければと思います。

よろしくお願いします

□form.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>入力フォーム</title> </head> <body> 入力フォーム<br> <form action="add.php" method="post"> 料理名:<input type="text" name="recipe_name" required><br> カテゴリ: <select name="category"> <option value="">選択してください</option> <option value="1">和食</option> <option value="2">中華</option> <option value="3">洋食</option> </select> <br> 難易度: <input type="radio" name="difficulty" value="1">簡単 <input type="radio" name="difficulty" value="2">普通 <input type="radio" name="difficulty" value="3" checked>難しい <br> 予算:<input type="number" min="1" max="9999" name="budget">円 <br> 作り方: <textarea name="howto" cols="40" rows="4" maxlength="150"></textarea> <input type="submit" value="送信"> </form> </body> </html>
□add.php <?php $user="people"; $pass="password"; $recipe_name = $_POST['recipe_name']; $howto = $_POST['howto']; $category=(int) $_POST['category']; $difficulty = (int) $_POST['difficulty']; $budget=(int) $_POST['budget']; try{ $dbh=new PDO('mysql:host=localhost;dbname=db1',$user, $pass); $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $sql="INSERT INTO recipes (recipe_name,category,difficulty,budget,howto) VALUES(?,?,?,?,?)"; $stmt=$dbh->prepare($sql); $stmt->bindValue(1,$recipe_name,PDO::PARAM_STR); $stmt->bindValue(2,$category,PDO::PARAM_INT); $stmt->bindValue(3,$difficulty,PDO::PARAM_INT); $stmt->bindValue(5,$budget,PDO::PARAM_INT); $stmt->bindValue(6,$recipe_name,PDO::PARAM_STR); $stmt->execute(); $dbh=null; echo"レシピの登録が完了しました"; }catch(PDOException $e){ echo"エラー発生:" . htmlspecialchars($e->getMessage(),ENT_QUOTES,'UTF-8') . "<br>"; die(); } ?>

「以下、エラーメッセージ」
[01-Mar-2018 13:36:16 UTC] PHP Notice: Undefined index: recipe_name in /Applications/MAMP/htdocs/php/add.php on line 5
[01-Mar-2018 13:36:16 UTC] PHP Notice: Undefined index: difficulty in /Applications/MAMP/htdocs/php/add.php on line 8

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

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

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

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

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

m.ts10806

2018/03/02 02:48

html、PHPそのままコードをコピーして実行しましたが、同現象再現しません。文字コードなどは問題ないでしょうか?
m.ts10806

2018/03/02 02:51

あと、、あまりキャスト(int)の意味がありません。キャストするくらいであれば入力チェックを行うべきかと思います。キャストすると本来通ってはいけない情報も通ってしまう可能性があります。(例えばtype=numberが利用できないブラウザや開発ツール上で数字以外に書き換えて送信することができますがキャストしているので正常値として扱われます)
guest

回答1

0

php

1$recipe_name = $_POST['recipe_name']; 2$howto = $_POST['howto']; 3$category=(int) $_POST['category']; 4$difficulty = (int) $_POST['difficulty']; 5$budget=(int) $_POST['budget'];

php

1$recipe_name = filter_input(INPUT_POST, 'recipe_name'); 2$howto = filter_input(INPUT_POST, 'howto'); 3$category= filter_input(INPUT_POST, 'category', FILTER_VALIDATE_INT); 4$difficulty = filter_input(INPUT_POST, 'difficulty', FILTER_VALIDATE_INT); 5$budget = filter_input(INPUT_POST, 'budget', FILTER_VALIDATE_INT);

http://php.net/manual/ja/function.filter-input.php

投稿2018/03/01 14:58

編集2018/03/01 15:33
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

reotantan

2018/03/01 15:31

すみません、difficultyだけはなぜ$_POSTで受けようとしているのでしょうか。 そもそも今回の問題はrecipe_nameとdifficultyだけpostしたあとに、受け取れないという問題だと認識しているのですが、その問題に対する解になっておりますか。phpに関しては、始めたばかりで詳しくないのですが、フィルタンリングと今回の問題とは関係性が見えませんでした。解説をいただければと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問