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

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

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

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

Q&A

解決済

2回答

22358閲覧

Notice: Undefined variable: error inと表示されるのはどうしてでしょうか?

makoto-n

総合スコア436

PHP

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

1グッド

2クリップ

投稿2017/03/14 05:31

編集2017/03/14 05:46

よくわかるPHPの教科書 2012年10発行のツイッター風一言掲示板ですが、
Notice: Undefined variable: が7つ表示されまして、明らかなタイプミスだと思うのですが、
: ; の記述位置がおかしいですか?

php

1<?php 2session_start(); 3 4if (!empty($_POST)) { 5//エラーの確認 6 if ($_POST['name'] == '') { 7 $error['name'] = 'blank'; 8 } 9 if ($_POST['email'] == '') { 10 $error['email'] = 'blank'; 11 } 12 if (strlen($_POST['password']) < 4 ) { 13 $error['password'] = 'length'; 14 } 15 if ($_POST['password'] == '') { 16 $error['password'] = 'blank'; 17 } 18 if ( empty($error) ) { 19 $_SESSION['join'] = $_POST; 20 header('Location: check.php'); 21 exit(); 22 } 23} 24?> 25<p>次のフォームに必要事項を記入してください。</p> 26<form action="" method="post" enctype="multipart/form-data"> 27 <dl> 28 <dt>ニックネーム</dt> 29 <dd><input type="text" name="name" size="35" maxlength="255" value="<?php echo htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8'); ?>"></dd> 30 <?php if ($error['name'] == 'blank'): ?> 31 <p class="error">入力してください。</p> 32 <?php endif; ?> 33 <dt>メールアドレス</dt> 34 <dd><input type="text" name="email" size="35" maxlength="255" value="<?php echo htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8'); ?>"></dd> 35 <?php if ($error['email'] == 'blank'): ?> 36 <p class="error">入力してください。</p> 37 <?php endif; ?> 38 <dt>パスワード</dt> 39 <dd><input type="password" name="password" size="10" maxlength="20" value="<?php echo htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8'); ?>"></dd> 40 <?php if ($error['password'] == 'blank'): ?> 41 <p class="error">入力してください。</p> 42 <?php endif; ?> 43 <?php if ($error['password'] == 'length'): ?> 44 <p class="error">4文字以上で入力してください。</p> 45 <?php endif; ?> 46 <dt>写真など</dt> 47 <dd><input type="file" name="image" size="35"></dd> 48 </dl> 49 <input type="submit" name="" value="入力内容の確認"> 50</form>

↓警告の出ているソース

<p>次のフォームに必要事項を記入してください。</p> <form action="" method="post" enctype="multipart/form-data"> <dl> <dt>ニックネーム</dt> <dd><input type="text" name="name" size="35" maxlength="255" value="<br /> <b>Notice</b>: Undefined index: name in <b>C:\xampp\htdocs\join\index.php</b> on line <b>29</b><br /> "></dd> <br /> <b>Notice</b>: Undefined variable: error in <b>C:\xampp\htdocs\join\index.php</b> on line <b>30</b><br /> <dt>メールアドレス</dt> <dd><input type="text" name="email" size="35" maxlength="255" value="<br /> <b>Notice</b>: Undefined index: name in <b>C:\xampp\htdocs\join\index.php</b> on line <b>34</b><br /> "></dd> <br /> <b>Notice</b>: Undefined variable: error in <b>C:\xampp\htdocs\join\index.php</b> on line <b>35</b><br /> <dt>パスワード</dt> <dd><input type="password" name="password" size="10" maxlength="20" value="<br /> <b>Notice</b>: Undefined index: name in <b>C:\xampp\htdocs\join\index.php</b> on line <b>39</b><br /> "></dd> <br /> <b>Notice</b>: Undefined variable: error in <b>C:\xampp\htdocs\join\index.php</b> on line <b>40</b><br /> <br /> <b>Notice</b>: Undefined variable: error in <b>C:\xampp\htdocs\join\index.php</b> on line <b>43</b><br /> <dt>写真など</dt> <dd><input type="file" name="image" size="35"></dd> </dl> <input type="submit" name="" value="入力内容の確認"> </form>
DrqYuto👍を押しています

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

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

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

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

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

shi_ue

2017/03/14 05:44

ソースが部分的なので、警告の出ている場所を教えてください。
makoto-n

2017/03/14 05:47

ブラウザに出力されているのを書きました。
guest

回答2

0

おそらく、元のコードがE_NOTICEを無視する流儀で書かれたものだと思います。

$error$_POSTのような配列について、代入していないキーを参照すると、E_NOTICEとしてUndefined indexを表示します。つまり、書き間違いで発生したエラーではありません

昔は「E_NOTICEを無視して書く」ということがよく行われていたのですが、今時は出さないように書くのが当たり前となってきています。

そして、$_POSTに対しては、filter_inputという専用の関数が有りますので、それを使って取得する方法もあります(PHPマニュアル)。

投稿2017/03/14 05:54

maisumakun

総合スコア145183

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

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

makoto-n

2017/03/14 06:05

安心しました。 ありがとうございました。
guest

0

ベストアンサー

追記ありがとうございます。

$error配列にその名前が無いからです。

php

1<?php if ($error['name'] == 'blank'): ?> 2↓↓↓ 3<?php if (isset($error['name']) && $error['name'] == 'blank'): ?> 4```とすれば、警告が出なくなります。 5(先に`isset`が評価されるので、もし`$error['name']`が無かったら、すぐに`if`を抜けます) 6 7でも書くのが面倒なので、 8```php 9<?php if (@$error['name'] == 'blank'): ?> 10```として、警告を抑えてしまってもいいですね。 11ただ、行儀は良くないと思いますけど。

投稿2017/03/14 05:51

編集2017/03/14 05:53
shi_ue

総合スコア4437

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

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

makoto-n

2017/03/14 06:05

わかりました。 ありがとうございました、助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問