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

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

解決済みの質問

php+MySQLでレコード追加が反映されません。

phpとMySQLで、フォームに入力した情報を指定したテーブルに
新規レコードとして登録するページを作っています。

phpのバージョンは5.3、MySQLのバージョンは5.1.59だと思います。
レンタルしているサーバーはlolipopのものです。

こちらのふたつのウェブページを参考にコーディングしたのですが、
登録をしても無視されてしまい、MySQLにレコードが追加できません。

http://php5.seesaa.net/
http://memopad.bitter.jp/w3c/php/php_mysql_insert.html

データベースへの接続と、フォームのあるページからINSERT文を書いたページへのデータの受け渡しは成功しているようです。
上記の2つのサイトで紹介されていたどの方法を試しても、同じ結果になります。
INSERT文の書き方がおかしいのでしょうか?

以下のようにコーディングしました。



---------------------------


<?php



$url = "mysql***.phy.lolipop.jp";
$user = "USER_NAME";
$pass = "******************";
$db = "DATABASE_NAME";

// MySQLへ接続する
$link = mysql_connect($url,$user,$pass) or die("MySQLへの接続に失敗しました。");

// データベースを選択する
$sdb = mysql_select_db($db,$link) or die("データベースの選択に失敗しました。");

// クエリを送信する
$sql = "SELECT * FROM table_name";
$result = mysql_query($sql, $link) or die("クエリの送信に失敗しました。<br />SQL:".$sql);

//結果セットの行数を取得する
$rows = mysql_num_rows($result);

//結果保持用メモリを開放する
mysql_free_result($result);

// MySQLへの接続を閉じる
mysql_close($link) or die("MySQL切断に失敗しました。");





//データを取得する
$AAA = $_POST['aaa'];
$BBB = $_POST['bbb'];
$CCC = $_POST['ccc'];
$DDD = $_POST['ddd'];
$EEE = $_POST['eee'];
$FFF = $_POST['fff'];
$GGG = $_POST['ggg'];
$HHH = $_POST['hhh'];
$III = $_POST['iii'];
$JJJ = $_POST['jjj'];
$KKK = $_POST['kkk'];
$LLL = $_POST['lll'];
$MMM = $_POST['mmm'];
$NNN = $_POST['nnn'];
$OOO = $_POST['ooo'];
$PPP = $_POST['ppp'];
$QQQ = $_POST['qqq'];



// クエリを送信する
$sql = "INSERT INTO tablename (AAA, BBB, CCC, DDD, EEE, FFF, GGG, HHH, III, JJJ, KKK, LLL, MMM, NNN, OOO, PPP, QQQ) VALUES (`'$_POST[aaa]','$_POST[bbb]','$_POST[ccc]','$_POST[ddd]','$_POST[eee]','$_POST[fff]','$_POST[ggg]','$_POST[hhh]','$_POST[iii]','$_POST[jjj]','$_POST[kkk]','$_POST[lll]','$_POST[mmm]','$_POST[nnn]','$_POST[ooo]','$_POST[ppp]','$_POST[qqq]')";
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登録が完了しました</title>
</head>
<body>
<h3>登録が完了しました</h3><br>
<br />
接続ID:<?= $link ?><br />
選択の成否:<?= $sdb ?><br />
結果ID:<?= $result ?><br />
行数:<?= $rows ?><br />
<br />
項目A:<?= $AAA ?><br />
項目B:<?= $BBB ?><br />
項目C:<?= $CCC ?><br />
項目D:<?= $DDD ?><br />
項目E:<?= $EEE ?><br />
項目F:<?= $FFF ?><br />
項目G:<?= $GGG ?><br />
項目H:<?= $HHH ?><br />
項目I:<?= $III ?><br />
項目J:<?= $JJJ ?><br />
項目K:<?= $KKK ?><br />
項目L:<?= $LLL ?><br />
項目M:<?= $MMM ?><br />
項目N:<?= $NNN ?><br />
項目O:<?= $OOO ?><br />
項目P:<?= $PPP ?><br />
項目Q:<?= $QQQ ?><br />
</body>
</html>


---------------------------------------------

この他に、フォームの画面や入力内容確認の画面があるのですが、
その間同士でのデータの受け渡しは成功しているようです。
ただ、このページでのレコードの登録だけができません。

初心者の質問で大変申し訳ないのですが、
どなたかわかる方、お答えいただけると嬉しいです。
よろしくお願い致します。

投稿日時 - 2012-05-05 23:00:37

QNo.7459892

すぐに回答ほしいです

質問者が選んだベストアンサー

// クエリを送信する
$sql = "INSERT INTO tablename (AAA, BBB, CCC, DDD, EEE, FFF, GGG, HHH, III, JJJ, KKK, LLL, MMM, NNN, OOO, PPP, QQQ) VALUES (`'$_POST[aaa]','$_POST[bbb]','$_POST[ccc]','$_POST[ddd]','$_POST[eee]','$_POST[fff]','$_POST[ggg]','$_POST[hhh]','$_POST[iii]','$_POST[jjj]','$_POST[kkk]','$_POST[lll]','$_POST[mmm]','$_POST[nnn]','$_POST[ooo]','$_POST[ppp]','$_POST[qqq]')";


これだけでは送信できてません。

mysql_query($sql, $link);

これでクエリ送信です。
ちなみにこのmysql_queryですが、クエリが失敗した場合はFALSEを返えします。

それとこのクエリの前に接続閉じてたら送信できませんから、すべてのクエリの後で切断してください。

ちなみに基本的には、phpファイルの実行後にDBは勝手に切断されて、メモリも開放される仕様なので、
明示的に切断する必要がない場合は切断やメモリの開放まで書く必要は薄いです。

直前のmysqlエラーについては、

echo mysql_error($link);

で確認できます。

また、この$linkの部分、接続リンクについても、
mysql系関数については引数がない場合は、直前の接続リンクがデフォルトで入る仕様になってますので、
今回の場合は省略して構いません。

投稿日時 - 2012-05-06 05:12:05

お礼

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

クエリを送信する前に接続を閉じていたことと、
mysql_query($sql, $link);
を書かなかったことが原因だったようです。

アドバイスを頂いた通りに直していったところ、レコード追加ができるようになりました。

ありがとうございます。

投稿日時 - 2012-05-06 22:56:28

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

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

回答(2)

ANo.1

>VALUES (`'$_POST[aaa]'

のバッククォートは転記ミス?
こまかいところを見直してみるとtypoがあるのでは?

ちなみにPOSTデータをそのままSQLにつなげるのはNG
本番ではかならずエスケープ処理をいれてください

投稿日時 - 2012-05-06 00:48:53

お礼

回答ありがとうございます。
転記ミスですお恥ずかしい・・・
typoは色々検証したのですが、無いようでした。

エスケープ処理、完全に忘れていました。
ありがとうございます。

投稿日時 - 2012-05-06 22:54:44

あなたにオススメの質問