アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在「基礎からの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

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

斜め読みしかしていませんが



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

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

この回答への補足

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

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

この回答への補足

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


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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!