2017-04-17 10 views
0

私は現在、ルームと呼ばれるテーブルを持つデータベースを持っています。 roomIDとroomTypeという2つの属性を持っています。私はこれにすべてMySqlを使ってデータを挿入しました。私はPHPとMYSQLを使って、ページ上のデータベースに現在何が入っているのかを表示しています。次に、部屋IDとルームタイプのテキストフィールドがあるdelete.phpページが表示されます。私は 'rooms'テーブルから好きなものを削除したいと思いますが、私は1つのテーブルしか持っていなくても、MULTI DELETEエラーでUnknownテーブル 'roomid'を取得し続けます。以下は'MULTI DELETEで#'不明なテーブル 'エラーを取得する

私の現在のPHP

<?php 
include ('connect.php'); 

if(isset($_POST['roomID'])){ 

$roomID = $_POST['roomID']; 
$roomType = $_POST['roomType']; 

$sql = "DELETE FROM rooms WHERE roomID='"$roomID"' AND roomType='"$roomType"' "; 
if ($conn->query($sql) === TRUE) { 
    echo "Record deleted successfully"; 
} else { 
    echo "Error: " . $sql . "<br>" . $conn->error; 
} 

} 

?> 

は、任意のヘルプ

+0

あなたのコードはに対して脆弱である[** SQLインジェクション攻撃**](https://en.wikipedia.org/wiki/SQL_injection)。 [** mysqli **](https://secure.php.net/manual/en/mysqli.prepare.php)または[** PDO **](https://secure.php.net/)を使用してください。 manual/en/pdo.prepared-statements.php)は、[** this post **](https://stackoverflow.com/questions/60174/how-can-i-prevent-sql - インジェクション - イン - php)。 –

+0

準備したステートメントを使用しただけでは、変数を正しく連結することを心配する必要はありませんでした。WHERE roomID = '"$ roomID"' AND roomType = '"$ roomType"' –

+0

@AlexHowanskyはい、しらべる。 – muthambo

答えて

1

警告をお願い申し上げます!

Little Bobbyyour script is at risk for SQL Injection Attacks.を言います。でもescaping the stringは安全ではありません!

のみ、あなたが適切に変数を連結心配しなければならなかったではないでしょうプリペアドステートメントを使用していた場合 -

は、ここで問題です。クエリの行の以下の部分は、適切な連結が欠落しています。

WHERE roomID='"$roomID"' AND roomType='"$roomType"' 

+0

where roomID = '"。$ roomID。"' AND roomType = '"。$ roomType。"'これはどのように見えますか?変数を連結するには? – muthambo

+0

それは簡単に@muthamboをテストして参照してください。 –

+0

私はそれをテストしましたが、引き続き同じ問題があります。私は問題が実際のクエリ/テーブル自体にあるかもしれないと思う。プライマリキーのroomIDは自動インクリメントに設定されているため、ID自体が指定されています。なぜそれが問題を引き起こすのかという考えられる原因になりますか? – muthambo

関連する問題