- ベストアンサー
プリペアードステートメント処理と特定レコードの表示
- kensaku.htmlから数字(データベースのコード番号)を入力・検索して、PHPMyAdminにあるデータベースから、特定のレコードを取り出したいと考えています。ところが(ichiran.php)の$data[]=$code;コードについてNotice: Undefined variable: code とエラーが変え返されます。検索窓に入力した特定のレコードの内容だけを返すためには、下記のichiran.phpを,どのように直せばよいでしょうか?
- プログラムの流れは、1.kensaku.htmlの検索窓に番号を入力・送信、2.PHPMyAdminにあるデータベース(aketo)にアクセス、3.ichiran.phpで検索結果を表示です。
- プログラムコードの問題の一つは、ichiran.phpでエラーが発生していることです。$data[]=$code;でエラーが起きているため、$codeの値が定義されていないとエラーが発生します。$codeの値をセットする必要があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>$data[]=$code;について、 >Notice: Undefined variable: code >が返されます。 すでにANo.1で回答したとおりです。 $data[] = $_POST['code']; でないとダメです。
その他の回答 (1)
- agunuz
- ベストアンサー率65% (288/438)
ichiran.phpの $data[]=$code; より前で$codeという変数がありません。フォームにname="code"というinput要素があるとすれば $data[] = $_POST['code']; です。register_globalsがonの環境であれば$codeでも参照できますが、今現在その設定がデフォルトの環境はありません(4.2.0以降はデフォルトでoffです。5.4.0以降はregister_globals自体が存在しません)。 http://www.php.net/manual/ja/security.globals.php なお、根本的な問題としてフォーム側(ensaku.html)にname="code"のinput要素が見当たりません。htmlとphpが整合取れていないのですが・・・ (蛇足) >$dbh->query('SET NAMES UTF-8'); MySQLでは「UTF-8」という文字セットはありません(UTF8です)。またPDOであればDSNでcharsetを指定すべきです。バージョンによってDSNで指定できない(phpが5.3.6未満)だとしてもPDOのコンストラクタに第4引数(option)で渡します。 if ((!defined('PHP_VERSION_ID'))or(PHP_VERSION_ID < 50306)) { $options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'set names utf8'); $pdo = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass, $options); } else { $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $user, $pass); } $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
お礼
agunuzさま ご回答ありがとうございます。 たびたびの質問で恐れ入りますが、 補足も確認していただければ助かります。
補足
(kensaku.html)の、 <input name="goiken" type="text" style="width:300px"> を、 <input name="code" type="text" style="width:300px"> に修正しました。 ただ、それでも (ichiran.php)の $data[]=$code;について、 Notice: Undefined variable: code が返されます。 (ichiran.php)はどのように 書き換えればよいでしょうか?
お礼
agunuzさま たびたびのご回答ありがとうございます! $data[]=$code を $data[] = $_POST['code']; に 変更したら、 意図通りの動きができました! 助かりました!