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

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

締切り済みの質問

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

投稿日時 - 2012-04-17 20:30:55

QNo.7426585

困ってます

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

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

回答(3)

ANo.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) ;// クエリ送信。文法的に変ならなにかメッセージが出ることが多い。それを良く見ること

投稿日時 - 2012-04-18 10:42:42

ANo.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'") ;

みたいな感じでどうでしょう?

投稿日時 - 2012-04-17 20:57:00

補足

どうもありがとうございます。
アドバイスのとおりに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

とエラー表示されてしまいます。
一行目に何か間違いがあるんでしょうか?

投稿日時 - 2012-04-18 13:46:13

$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());
に書き換えて、エラーが表示されたら、それが原因です。

投稿日時 - 2012-04-17 20:55:44

補足

ありがとうございます。
アドバイスのとおりにやってみました。
すると下記のエラーメッセージが表示されました。


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


一行目に間違いがあるのでしょうか?

投稿日時 - 2012-04-18 13:42:16

あなたにオススメの質問