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

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

解決済みの質問

phpからdbへアクセスし、レコードを削除したい

mysql・php初心者です。
現在、mysqlを使ってデータベースの構築をしています。
レコードの登録、検索に関しては出来たのですが、
何故かレコードの修正と削除が出来ません。
教えてください。

プライマリーキーはshop_id($shop_id)で、任意で数字を付けれるようにしてあります。
登録したデータベース側の表示は

extract($_POST);

$db = mysql_connect("localhost","********","********") or error_func();
mysql_select_db("******") or error_func();
mysql_query("set names utf8");

$result = mysql_query("select * from mobile_shop_entry where shop_name = '$shop_name'");
echo "<h3 class='message'>" . $shop_name . "の店舗情報を表示</h3>\n";

while($row = mysql_fetch_array($result)){
echo "<table id='table_02'><tr><th colspan='2' align='left' >" . $row['shop_name'] . "</th></tr>\n";
echo "<tr><th>会社名</th><td>" . $row['shop_name'] . "</td></tr>\n";
echo "<tr><th>住所</th><td>" . $row['shop_area'] . $row['shop_address'] . "</td></tr>\n";
echo "<tr><th>電話番号</th><td>" . $row['shop_tel'] . "</td></tr>\n";
echo "<tr><th>E-mail</th><td>" . $row['shop_mail'] . "</td></tr>\n";
echo "<tr><th>営業時間</th><td>" . $row['shop_time_am'] . "~" . $row['shop_time_pm'] . "</td></tr>\n";
echo "<tr><th>定休日</th><td>" . $row['shop_holiday'] . "</td></tr>\n";
echo "<tr><th>ID</th><td>" . $row['shop_id'] . "</td></tr>\n";
echo "<tr><td colspan='2' align='right'>\n";
echo "<img src='../images/edit-page-blue.gif'> <a href='shop_syuusei.php?shop_id=";
echo $row['shop_id'];
echo "'>ショップ情報を修正</a>\n";
echo " <img src='../images/delete-page-red.gif'> <a href='shop_sakujyo.php?shop_id=";
echo $row['shop_id'];
echo "'>ショップ情報を削除</a>\n";
echo " <img src='../images/edit-yellow.gif'> <a href='car_entry.php?car_id=\n";
echo $row['shop_id'];
echo "'>在庫情報を登録</a></td></tr>\n";
}
echo "</table>\n";
mysql_close($db)
exit();
}
?>
と記述しました。
このレコードを削除するには、上記のリンク部分
<a href='shop_sakujyo.php?shop_id=";
echo $row['shop_id'];
から、shop_sakujyo.phpという名前のファイルに
<?php


extract($_POST);
extract($_GET);
mysql_connect("localhost","*****","*****");
mysql_select_db("*******");
mysql_query("set names utf8");

//情報を削除


if($kakunin=="確認"){
$sql = "delete from mobile_shop_entry where shop_id = $shop_id ";

mysql_query($sql);
echo "<h1 class='message_red'>レコードの削除が完了しました。</h1>\n";
exit;
}
?>
表示は削除が完了しました。と表示されるのですが、実際のデータは削除されていません。
どこが間違っているのかご存じのかたはいらっしゃいますでしょうか。。。
phpは5.0を使っています。

投稿日時 - 2007-07-04 13:21:34

QNo.3138688

すぐに回答ほしいです

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

ソース見ましたが、セキュリティ的にちょっと恐ろしいですね(笑。
誰でもいくらでも簡単に改変出来るシステムになってます。
バリデーションとか、SQLインジェクションとかいうキーワードで勉強する事をお進めします。


それはともかくとして、とりあえずデバッグするのにエラーを吐かせるようにした方が良いと思います。
> 表示は削除が完了しました。と表示されるのですが、実際のデータは削除されていません。
最後の削除の部分ではエラーがあっても無くても構わず削除が完了した事になっているので当然ですね。
例えば
$debug = true;//開発中はtrueに
$result = mysql_query($sql);
if ($debug){
echo $sql;
if( !$result) die('エラー: ' . mysql_error());
}
こうしておけばエラーの原因がすぐ分かります(英語ですけどね)。

発行したSQL自体はとても単純なので、権限が無いか(通常、登録が出来るなら修正や削除は出来るようになっていそうなものですが)、単なるスペルミスでしょう。
DELETの場合はデータが無くてもエラーは返さないのが普通ですから、発行したSQLも確認してみましょう。

参考まで。

投稿日時 - 2007-07-06 11:39:08

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

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

回答(3)

ANo.2

mysql_connect("localhost","hogename","hogepass");
としている"hogename"のところのユーザーがroot以外であれば
権限がついてないことが考えられます。

そもそもmysqlはどうやってセットアップしたのでしょうか?
セットアップしたとおり、権限がついているはずです。

具体的にはmysqlという名前のデータベース上にuserというテーブルが
あるとおもいますのでそれで任意のユーザーを作成・編集し
flush privilegesしてやるとよいでしょう。

投稿日時 - 2007-07-04 18:21:35

ANo.1

実行するユーザーに更新属性と削除属性がついていないのでは?

投稿日時 - 2007-07-04 16:07:58

補足

早速ご回答頂きありがとう御座います。
参考書を見ながら初めて書いてみたもので、
全くの無知で申し訳ないのですが、
更新属性及び削除属性とはどのようなものでしょうか?
具体的な方法をご存じでしたら、
参考になるサイトでも何でも結構ですので
教えて頂けるとありがたいです。
宜しくお願いいたします。

投稿日時 - 2007-07-04 16:53:27

あなたにオススメの質問