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

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

詳細はこちら
PHP

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

Q&A

解決済

2回答

63760閲覧

Undefined indexエラーを消したい。

berukokoko

総合スコア12

PHP

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

0グッド

3クリップ

投稿2017/02/11 07:21

###前提・実現したいこと
phpでお問い合わせホームを作っています。
Notice: Undefined indexのエラーを出ないようにしないです。

###発生している問題・エラーメッセージ
1
radioボタンで性別を選んで、
選んだ際は「男性」または「女性」と表示。
どちらも選択しなかった場合は「性別が入力されていません」と表示。

2
お好きなトッピング:でも
checkboxを選んだ際は「たまご」または「メンマ」と表示。
選ばれていなかった際は「好きなトッピングを入力してください」と表示。

2つとも表示されていますが、何も入力されなかった場合

php

1Notice: Undefined index: gender in /Applications/XAMPP/xamppfiles/htdocs/otoiawase/ramenn.php on line 33 2 3Notice: Undefined index: gender in /Applications/XAMPP/xamppfiles/htdocs/otoiawase/ramenn.php on line 34

php

1Notice: Undefined index: top in /Applications/XAMPP/xamppfiles/htdocs/otoiawase/ramenn.php on line 86

と出てしまいます。

###該当のソースコード

php

1<html> 2<head> 3<title>ラーメンインデックス</title> 4</head> 5<style> 6fieldset{ 7 width: 500px; 8} 9</style> 10<body> 11<fieldset> 12<legend>ラーメン屋アンケート</legend> 13入力項目です。 14<form method="post" action="ramenn.php"> 15<p>お名前:</p> 16<input type="text" name="name"> 17<p>性別:</<p> 18<input type="radio" name="gender" value="">男性 19<input type="radio" name="gender" value="">女性 20<p>年齢:</p> 21<select name="age"> 22<option value="1">1</option> 23<option value="2">2</option> 24<option value="3">3</option> 25</select> 26 27<p>郵便番号:</p> 28<input type="text" name="yuu">-<input type="text" name="yuu"> 29 30<p>Eメールアドレス:</p> 31<input type="text" name="mail"> 32 33 34 35<p>好きなラーメン:</p> 36<select name="ramenn"> 37<option value="a">塩ラーメン</option> 38<option value="b">醤油ラーメン</option> 39<option value="c">豚骨ラーメン</option> 40</select> 41 42 43<p>お好きなトッピング:</p> 44<!-- <label><input type="checkbox" name="top[]" value="たまご">たまご</label> 45<label><input type="checkbox" name="top[]" value="メンマ">メンマ</label> --> 46 47<?php 48$top=array('eg'=>'たまご','mennma'=>'メンマ'); 49$cnt =0; 50foreach ($top as $key => $value) { 51print '<label><input type="checkbox" name="top[]" value="'.$value.'" id="top_'.$cnt.'">'.$value.'</label>'; 52 $cnt++; 53}; 54?> 55<p>ご感想:</p> 56<textarea rows="4" cols="40" name="kan"></textarea> 57<input type="submit" value="送信" name=""> 58<input type="submit" value="戻る" name=""> 59</form> 60</fieldset> 61</body> 62</html>

php

1<html> 2<head> 3<title>ラーメンお問い合わせホーム</title> 4</head> 5<style> 6fieldset{ 7 width: 500px; 8} 9</style> 10<body> 11 <fieldset> 12 <legend>ラーメン屋アンケート</legend> 13<form> 14入力項目です。 15<?php 16$name=$_POST['name']; 17print $name.'さんこんにちは'; 18?> 19 20 21<p>お名前:</p> 22<?php 23$name=$_POST['name']; 24if($name===""){ 25 print 'お名前が入力されていません。'; 26}else{ 27 print $name.'さん'; 28} 29?> 30 31<p>性別:</<p> 32<?php 33$gender = $_POST['gender']; 34if(!empty($_POST['gender'])&&($_POST['gender'])=="男"||$_POST['gender']=="女"){ 35print "性別は"; 36print $_POST['gender']; 37}else { 38 print '性別が入力されていません'; 39} 40?> 41 42<p>年齢:</p> 43<?php 44$age =$_POST['age']; 45print $age.'歳'; 46?> 47<p>郵便番号:</p> 48<?php 49$yuu = $_POST['yuu']; 50print $yuu; 51if($yuu === ""){ 52 print '郵便番号が入力されていません'; 53}else{ 54 print $yuu; 55} 56?> 57 58<p>Eメールアドレス:</p> 59<?php 60$mail = $_POST['mail']; 61if($mail === ""){ 62 print 'メールが入力されていません'; 63}else{ 64 print $mail; 65} 66?> 67 68<p>好きなラーメン:</p> 69<?php 70$ramenn = $_POST['ramenn']; 71switch($ramenn){ 72 case 'a': 73 print '塩ラーメンですね'; 74 break; 75 case 'b': 76 print '醤油ラーメンですね'; 77 break; 78 case 'c': 79 print '豚骨ラーメンですね'; 80 break;} 81?> 82 83 84<p>お好きなトッピング:</p> 85<?php 86$top = $_POST['top']; 87if(empty($top)){ 88 print '好きなトッピングを入力してください'; 89}else{ 90 foreach ($top as $value) { 91 print "$value<br>"; 92 } 93} 94?> 95 96<p>ご感想:</p> 97<?php 98$kan=$_POST['kan']; 99if($kan === ""){ 100 print ''; 101}else{ 102print $kan; 103} 104?> 105</form> 106<input type="submit" value="確定"> 107<input type="submit" value="修正"> 108</fieldset> 109</body> 110</html> 111

Notice:を消す方法が調べましたがよくわかりませんでした・・・。
よろしければご教授願いたいです・・・。
宜しくお願いします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

Notice: Undefined index: hoge in /Applications/XAMPP/xamppfiles/htdocs/otoiawase/ramenn.php on line xx

このエラーは$_POST$_GETで値を受け取るときによく発生するエラーです。このエラーは定義されていない配列の要素、もしくは変数を使ったときに発生するエラーです。
たとえば、ramenn.phpの33行目にある$name = $_POST['gender'];という処理ですが、ramenn.phpに直接アクセスした場合、$_POST['gender']が未定義の状態になりますから、Notice: Undefined index: hogeというエラーが発生します。
つまりこのエラーは、使おうとしている配列の要素、もしくは変数が定義されているかどうかを確認することで解決することができます。
以上のことから、ramenn.phpは以下のようになると思います。

PHP

1<?php 2ini_set("display_errors", 1); 3error_reporting(E_ALL); 4?> 5<html> 6<head> 7 <title>ラーメンお問い合わせホーム</title> 8</head> 9<style> 10 fieldset { 11 width: 500px; 12 } 13</style> 14<body> 15<fieldset> 16 <legend>ラーメン屋アンケート</legend> 17 <form> 18 入力項目です。 19 <?php 20 if (!empty($_POST["name"])) { 21 $name = $_POST['name']; 22 print $name . 'さんこんにちは'; 23 } 24 ?> 25 <p>お名前:</p> 26 <?php 27 if (!empty($_POST['name'])) { 28 $name = $_POST['name']; 29 if ($name === "") { 30 print 'お名前が入力されていません。'; 31 } else { 32 print $name . 'さん'; 33 } 34 } 35 ?> 36 37 <p>性別:</p> 38 <?php 39 if (!empty($_POST['gender'])) { 40 $gender = $_POST['gender']; 41 if (!empty($_POST['gender']) && ($_POST['gender']) == "男" || $_POST['gender'] == "女") { 42 print "性別は"; 43 print $_POST['gender']; 44 } else { 45 print '性別が入力されていません'; 46 } 47 } 48 ?> 49 50 <p>年齢:</p> 51 <?php 52 if (!empty($_POST["age"])) { 53 $age = $_POST['age']; 54 print $age . '歳'; 55 } 56 ?> 57 <p>郵便番号:</p> 58 <?php 59 if (!empty($_POST["yuu"])) { 60 $yuu = $_POST['yuu']; 61 print $yuu; 62 if ($yuu === "") { 63 print '郵便番号が入力されていません'; 64 } else { 65 print $yuu; 66 } 67 } 68 ?> 69 70 <p>Eメールアドレス:</p> 71 <?php 72 if (!empty($_POST['mail'])) { 73 $mail = $_POST['mail']; 74 if ($mail === "") { 75 print 'メールが入力されていません'; 76 } else { 77 print $mail; 78 } 79 } 80 ?> 81 82 <p>好きなラーメン:</p> 83 <?php 84 if (!empty($_POST["ramenn"])) { 85 $ramenn = $_POST['ramenn']; 86 switch ($ramenn) { 87 case 'a': 88 print '塩ラーメンですね'; 89 break; 90 case 'b': 91 print '醤油ラーメンですね'; 92 break; 93 case 'c': 94 print '豚骨ラーメンですね'; 95 break; 96 } 97 } 98 ?> 99 100 101 <p>お好きなトッピング:</p> 102 <?php 103 if (!empty($_POST['top'])) { 104 $top = $_POST['top']; 105 if (empty($top)) { 106 print '好きなトッピングを入力してください'; 107 } else { 108 foreach ($top as $value) { 109 print "$value<br>"; 110 } 111 } 112 } 113 ?> 114 115 <p>ご感想:</p> 116 <?php 117 if (!empty($_POST['kan'])) { 118 $kan = $_POST['kan']; 119 if ($kan === "") { 120 print ''; 121 } else { 122 print $kan; 123 } 124 } 125 ?> 126 </form> 127 <input type="submit" value="確定"> 128 <input type="submit" value="修正"> 129</fieldset> 130</body> 131</html>

投稿2017/02/11 07:47

編集2017/02/11 09:01
s8_chu

総合スコア14731

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

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

berukokoko

2017/02/11 10:22

エラーが消えました! 解説のおかげでやっと意味がわかりました! 回答ありがとうございます!
guest

0

エラーの意味、理解していますか?
まず、そこからはじめて下さい。
ワリと頻繁に引っかかるエラーです。

エラーがなぜ出るか理解すると、
$str=$_POST['str'];
のようなコードが誤りであることに気が付くとおもいます。

$str = isset($_POST['str']) ? $_POST['str'] : '';
のように存在の有無を確認しても良いですが、filter_input()を使用することをオススメします。
filter_input

私も最近理解しましたが、スーパーグローバル変数に直接アクセスしないほうがイイですし、何よりfilter_input()の方が使い勝手が良いです。
スーパーグローバル変数に直接アクセスしない方がいい理由

今記述されているコードはセキュリティ的な観点が抜け落ちているので、学習に使用するなら、セキュリティ的な観点がきちんとしているサンプルを使用したほうがイイです。特に、ユーザ入力を元にする出力は、Webサイト構築で最初に学習すべき項目なので、押さえて下さい。

投稿2017/02/11 08:30

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

berukokoko

2017/02/11 10:26

ちゃんとわかってないみたいです! 教えていただいたそこらへんを中心に勉強しなおします・・・! 回答ありがとうございます!
退会済みユーザー

退会済みユーザー

2017/02/11 10:47

最終的には http://qiita.com/mpyw/items/2f9955db1c02eeef43ea こちらが理解できると、ちゃんとしたものが作れるようになります。 結構広い範囲の知識が必要となるので、色々調べながら出ないと難しいですが、理解していないと、実装として不適格なモノが出来上がります。 世にあるサンプルコードは結構ダメなものが多いです。おかげで私は非常に大回りしました。 GET, POST を取り扱うサンプルコードを探す場合、以下を使用しているものを探すことをオススメします。 function h($str) { return htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); } と filter_input() 上記2点が使われていれば、正しい考慮がされたコードである確率がたかまります。1つ目は関数になっていますが、大体関数名もh()で同じですw
berukokoko

2017/02/11 13:56

そうなんですね!最近勉強し出したばかりなのでそんなことはさっぱりでした! 教わったものと本を見たのを書きましたが 本当にちゃんとしたものができないのですねー! それを使ってるのを探して本屋さんを巡ってみますー! URLもありがとうございます(`・ω・´)!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問