
本を見ながら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
翻訳してみると未定義のインデックスになるのですが
どのようにすればいいのでしょうか?
No.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なんて名前のインデックスは定義されてねーよ』です。
フォーム送信されてないのだから当然ですね。
No.1
- 回答日時:
上のロジックの方では、セットされていなかったら空白、とコーディングしているのに、なぜ同じようにしないのでしょう。
POSTデータがないのに連想添字で値を取得しようとしているから出ています。
回答ありがとうございます!
当方勉強を始めたばかりで右も左もわからないくて、
とりあえず書籍のとうりコーディングしていまして、
上の方のロジックで何をかをしたら空白で返すというのはなんとなく理解できていたのですが、
エラーが出ている部分にどうコーディングして空白で返すようにコーディングしたらいいかいいのか分からないのです・・・
もうひとつ質問で申し訳ないのですが入力フォームの中に
<br /><b>Notice</b>: Undefined index: id in <b>C:\xampp\htdocs\intval.php</b> on line <b>21</b><br />
と記入された状態でしてこれが連想添字というもので値を取得しようとしているという事なのでしょうか?
このフォームに記入されたものを消して適当な数字を入れたらエラーは消えました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpのheader("Location:#pos")...
-
セッション関数を使わずにファ...
-
SplFileObject を利用したとき...
-
PHP8でWarning:Undefined varia...
-
PHP8を使うと、大量のWarningが...
-
フォームで戻った際に入力済み...
-
PHPで画像の渡しが上手く行きま...
-
$filePath = './user_img/' . $...
-
php ラジオボタン
-
composerをインストールしたい...
-
phpの問い合わせフォームを作っ...
-
marginの値でマイナス値を設定...
-
submitで思うようにページが遷...
-
HTML PHP ラジオボタンのイベント
-
php でqiitaのサイトにあったフ...
-
PHPの勉強してます。 配列のと...
-
BASIC認証のフォームをデザイン...
-
アップロードファイルを表示す...
-
複数のパソコンの中の1つのパソ...
-
返信機能のツリー構造の深さを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アラートでyes noを作りたいです。
-
PHPで[]の使い方について
-
dbに登録したデータをphpのプル...
-
python pandas 行ごとに列名(...
-
DBで検索結果に該当するデータ...
-
大変困っております。PHP ...
-
sqlで受け取った緯度経度から地...
-
SELECT結果から動的にコンボボ...
-
sortable ギブアップです…助け...
-
チェックボックスでチェックし...
-
php ログインフォーム作成
-
MySQLに保存した画像を表示したい
-
DBで指定した値しか存在しない...
-
checkboxで複数選択して,OR...
-
文字化けが解決できません。お...
-
mysqlから取得した配列をカンマ...
-
1ヶ月以内に誕生日を迎える社員...
-
配列としてMysqlから値を取得す...
-
phpでmysqlを使ってデータベー...
-
チェックボックスによる複数の...
おすすめ情報