• 締切済み

PHPでMySQLのレコードを削除したい

現在「基礎からのMYSQL」という本でXAMPPを導入しMySQL,PHPの基礎を勉強中です。 (mysql_query() を初めて学習中です。) 例にならってスクリプトを書いてみたのですが、MySQL内にあるレコードを削除するためのスクリプトがうまく作動しません。 (SELECT, INSERT, SEARCH は正常に作動します。DELETEだけがなぜかうまくいきません。) ApacheとMySQLは起動しています。 考えられる原因をおしえていただけませんでしょうか。よろしくおねがいいたします。 ソースコードは下記のとおりです。 ★HTML(トップページ) //メッセージ表示のスクリプトを呼び出すフォーム <form method="post" action="kantan_select.php"> メッセージを表示します<br> <input type="submit" value="メッセージ表示"> </form> //挿入のスクリプトを呼び出すフォーム <form method="post" action="kantan_insert.php"> 名前を入力してください<input type="text" name="a1"><br> メッセージを入力してください<input type="text" name="a2" size=150><br> <input type="submit" value="送信"> </form> //☆☆☆削除のスクリプトを呼び出すフォーム☆☆☆ <form mothod="post" action="kantan_delete.php"> 削除番号<input type="text" name="b1"><br> <input type="submit" value="削除番号送信"> </form> //検索のスクリプトを呼び出すフォーム <form method="post" action="kantan_search.php"> 検索キーワード<input type="text" name="c1"><br> <input type="submit" value="検索開始"> </form> ★レコード削除のPHPスクリプト <?php $s=mysql_connect("localhost","root","パスワード") or die("接続失敗"); print "接続しました<br>"; mysql_select_db("db1"); $b1_d=$_POST["b1"]; mysql_query("delete from tbk where bang=$b1_d") ; $re=mysql_query("select * from tbk order by bang"); while($kekka=mysql_fetch_array($re)){ print $kekka[0]; print ":"; print $kekka[1]; print ":"; print $kekka[2]; print "<br>"; } mysql_close($s); print "<br><a href='kantan.html'>メニューに戻る</a>" ?> <環境> Windows 7 XAMPP導入するための付属CD-ROMの内容  ・Apache(HTTPD2.2.6 + Openssl0.9.8e)   ・MySQL(5.0.45)  ・PHP(5.2.4)  ・PHP(4.4.7)  ・phpMyAdmin(2.11.1)  ・Zend Optimizer

みんなの回答

回答No.3

本件に限らず、初心者なら何かにつまづいたら最低限次のようにしてみましょう。 1. エラーメッセージなどがあればよく読む。訳す。 2. 変数の値を印字して確認。 > うまく作動しません。 もしなにかエラーメッセージなどが出ているなら、それをよく読んでみるといいですよ。解決のヒントになることが多いです。 > $b1_d=$_POST["b1"]; > mysql_query("delete from tbk where bang=$b1_d") ; echoやprintなどを使って想定通りの値かどうか確認しましょう。 例えば $b1_d=mysql_real_escape_string($_POST["b1"]); // 悪意あるユーザ入力への対策 echo "変数b1_dは".$b1_d; // 変数の値を印字して確認 $querystring="delete from tbk where bang=$b1_d"; // クエリの文字列を変数に格納。テストがしやすくなる echo "クエリ文字列は".$querystring; // クエリ文字列を印字して確認 mysql_query($querystring) ; // クエリ送信。文法的に変ならなにかメッセージが出ることが多い。それを良く見ること

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

斜め読みしかしていませんが >$b1_d=$_POST["b1"]; >mysql_query("delete from tbk where bang=$b1_d") ; $b1_d=mysql_real_escape_string($_POST["b1"]); mysql_query("delete from tbk where bang='$b1_d'") ; みたいな感じでどうでしょう?

whitireia
質問者

補足

どうもありがとうございます。 アドバイスのとおりにmysql_real_escape_stringを入れてみました。 No.1と同様に You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 とエラー表示されてしまいます。 一行目に何か間違いがあるんでしょうか?

回答No.1

$b1_d=$_POST["b1"]; mysql_query("delete from tbk where bang=$b1_d"); ↓ $b1_d=$_POST["b1"]; mysql_query("delete from tbk where bang=$b1_d") or die (mysql_error()); に書き換えて、エラーが表示されたら、それが原因です。

whitireia
質問者

補足

ありがとうございます。 アドバイスのとおりにやってみました。 すると下記のエラーメッセージが表示されました。 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 一行目に間違いがあるのでしょうか?