アプリ版:「スタンプのみでお礼する」機能のリリースについて

本を見ながらXAMPPのローカル環境にて勉強しているのですが、
本が古いのかNoticeエラーが出てしまいます。

<html>
<head>
<title>SQLコマンドに数値のみを反映する</title>
</head>
<body>
<?php
// intval()関数による変換
$temp_sql = "SELECT * FROM t1 WHERE id = %s";
$id = isset($_POST["id"]) ? intval($_POST["id"]) : "";
$result_sql_intval = sprintf($temp_sql, $id);

// sprintf()関数による変換
$temp_sql = "SELECT * FROM t1 WHERE id = %d";
$id = isset($_POST["id"]) ? $_POST["id"] : "";
$result_sql_sprintf = sprintf($temp_sql, $id);
?>
<form method="POST" action="<?php echo $_SERVER["PHP_SELF"]?>">
<table>
<tr>
<td>ID:<input type="text" name="id"
value="<?php echo $_POST["id"] ?>">
<input type="submit" value="作成" name="sub1">
</td>
</tr>
<tr>
</tr>
<tr>
</td>
</tr>
</table>
</form>
</body>
<?php
echo "<p>入力値:" . $_POST["id"] . "</p>";
echo "<p>作成されたSQL(sprintf):" . $result_sql_sprintf . "</p>";
echo "<p>作成されたSQL(intval):" . $result_sql_intval . "</p>";
?>
</html>


上記の正解サンプルで表示させてもNoticeエラーが
echo "<p>入力値:" . $_POST["id"] . "</p>";
の部分で引っかかってしまいます。

エラーは
Notice: Undefined index: id in C:\xampp\htdocs\intval1.php on line 34
翻訳してみると未定義のインデックスになるのですが
どのようにすればいいのでしょうか?

A 回答 (2件)

> もうひとつ質問で申し訳ないのですが入力フォームの中に


> <br /><b>Notice</b>: Undefined index: id in <b>C:\xampp\htdocs\intval.php</b> o
> n line <b>21</b><br />
> と記入された状態でしてこれが連想添字というもので値を取得しようとしているという事なので
> しょうか?
こ> のフォームに記入されたものを消して適当な数字を入れたらエラーは消えました。

見落としていましたが、現象と対応は同じです。
$_POSTは配列変数です。
配列は大まかにわけて以下の2つです。
・数字を指定して値を操作する。$Value[1]とか。
・文字列を指定して値を操作する。$Value["hoge"]とか。
ここでいう1や"hoge"はインデックスと呼ばれ、更に文字列で指定する場合、それを連想添字といいます。

ここで怒られているのは、『idなんて名前のインデックスは定義されてねーよ』です。
フォーム送信されてないのだから当然ですね。
    • good
    • 0
この回答へのお礼

お忙しい中詳しく教えていただいてありがとうございました!
よく分かりました!

お礼日時:2017/08/18 15:28

上のロジックの方では、セットされていなかったら空白、とコーディングしているのに、なぜ同じようにしないのでしょう。


POSTデータがないのに連想添字で値を取得しようとしているから出ています。
    • good
    • 0
この回答へのお礼

回答ありがとうございます!

当方勉強を始めたばかりで右も左もわからないくて、
とりあえず書籍のとうりコーディングしていまして、
上の方のロジックで何をかをしたら空白で返すというのはなんとなく理解できていたのですが、
エラーが出ている部分にどうコーディングして空白で返すようにコーディングしたらいいかいいのか分からないのです・・・

もうひとつ質問で申し訳ないのですが入力フォームの中に
<br /><b>Notice</b>: Undefined index: id in <b>C:\xampp\htdocs\intval.php</b> on line <b>21</b><br />
と記入された状態でしてこれが連想添字というもので値を取得しようとしているという事なのでしょうか?
このフォームに記入されたものを消して適当な数字を入れたらエラーは消えました。

お礼日時:2017/08/18 12:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!