- 締切済み
フォーム情報をDBに追加できない
はじめまして。 初心者で現在参考書を使ってMYSQL、PHP、HTMLを学習してるんですが フォームの情報をデータベースに格納できません。 (ken1.php) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <title>県別人口面積その1</title> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </head> <body> <?php mysql_connect('localhost','root','freedom'); mysql_select_db('lesson'); $sql= "select * from todofuken"; $result = mysql_query($sql); $rows = mysql_num_rows($result); if($rows == 0){ echo "<p>該当データがありません。</p>"; } else { while($row = mysql_fetch_array($result)){ echo "<p>"; echo $row["kenmei"]; echo " "; echo $row["kencho"]; echo " "; echo $row["jinko"]; echo " "; echo $row["menseki"]; echo "</p>"; } } ?> </body> </html> (ken2.html) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <title>フォーム文</title> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </head> <body> <p>データを入力してください</p> <form action="ken3.php" method="post" > <p>県 名<input type="text" name="ken" size="40"></p> <p>県庁所在地<input type="text" name="kec" size="40"></p> <p>人 口<input type="text" name="jin" size="40"></p> <p>面 積<input type="text" name="men" size="40"></p> <input type="submit" value="登録"> <input type="reset" value="リセット"> </form> </body> </html> (ken3.php) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <title>ここにページのタイトルが入る</title> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </head> <body> <?php error_reporting(E_ALL & ~E_NOTICE); extract($_POST); mysql_connect('localhost','root','freedom'); mysql_select_db('lesson'); $sql = "insert into todofuken values('$ken', '$kec', $jin, $men, 0)"; mysql_query($sql); ?> </body> </html> ブラウザでken2.htmlのフォームにデータを埋め込み、そのデータを DBに追加したいんです。 問題はken2.htmlの登録ボタンを押してken3.php に移動するまでは良いんですが DBにデータが追加されません。 構文は参考書どうりにやっているので間違いないと思うのですが 原因がわかる方どうぞよろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- shimix
- ベストアンサー率54% (865/1590)
>構文は参考書どうりにやっているので間違いないと思うのですが どういう参考書かわかりませんが・・・ $_POSTをextractで展開するような書き方は感心しませんね。またデータベースを扱う関数は「正常に実行されたか」を必ず戻り値でチェックすべきです(最低でもor die()で止める)。mysql_set_charsetがないのも困りますし、何のエスケープ処理もないのはダメです。 $ken = isset($_POST['ken']) ? $_POST['ken'] : ''; $kec = isset($_POST['kec']) ? $_POST['kec'] : ''; $jin = isset($_POST['jin']) ? intval($_POST['jin']) : 0; $men = isset($_POST['men']) ? intval($_POST['men']) : 0; mysql_connect('localhost','root','freedom') or die('cannot connect'); mysql_select_db('lesson') or die('cannot select db'); mysql_set_charset('sjis'); $sql = sprintf("insert into todofuken values('%s', '%s', %d, %d, 0)", mysql_real_escape_string($ken), mysql_real_escape_string($kec), $jin, $men); mysql_query($sql) or die(mysql_error()); (蛇足) ネイティブなMySQl関数はすでに非推奨です。MySQLiもしくはPDOで書き直すことをお勧めしておきます。