みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

フォーム情報を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にデータが追加されません。


構文は参考書どうりにやっているので間違いないと思うのですが
原因がわかる方どうぞよろしくお願いします。

投稿日時 - 2012-09-24 18:34:38

QNo.7715050

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

>構文は参考書どうりにやっているので間違いないと思うのですが

どういう参考書かわかりませんが・・・

$_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で書き直すことをお勧めしておきます。

投稿日時 - 2012-09-24 23:47:36

あなたにオススメの質問