0

私はしばらくこれで立ち往生しており、簡単な修正だと確信していますが、答えが見つかりません。

テーブルの行を削除しようとしていますが、クエリに入れている変数が認識されません。以下の $remove クエリでは、行に対応する数値を入力するとクエリは正常に機能しますが、変数を使用すると機能しません。

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

 $remove = $_POST['remove'];
 //echo $remove; print the number entered

 $query ="DELETE dogid FROM regdogs WHERE dogid = $remove ";
 if($query_run = mysql_query($query)){
 $query_num_rows = mysql_num_rows($query_run);

 if($query_num_rows==1)
      echo 'Entry removed ';
 else
      echo 'Not removed ';  
 }

ありがとう

4

4 に答える 4

7
$query ="DELETE FROM regdogs WHERE dogid = $remove ";

これを試して。これは単なる構文エラーです。

もう一度、mysqli_メソッドに移動してください。mysql_メソッドは非推奨です。

于 2013-03-24T16:38:43.383 に答える
1

これが受け入れられる答えであることを願っています-あなたの質問はクエリにパラメーターを追加する方法であるため、関連していると感じています。

を追加するだけ$remove$_POST['remove']、ユーザーが任意の SQL コマンドを実行できるようになります。誰かがパラメータとして投稿1 OR 1=1したと想像してください。DELETE dogid FROM regdogs WHERE dogid = 1 OR 1=1あなたのSQLクエリは、テーブル全体を削除すると言います。mysql_real_escape_string代わりに、ユーザー入力を操作するときに常に使用してください。コード全体は次のようになります。

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

 $remove = mysql_real_escape_string($_POST['remove']);
 //echo $remove; print the number entered

 $query ="DELETE FROM regdogs WHERE dogid = $remove ";
 if($query_run = mysql_query($query)){
 $query_num_rows = mysql_num_rows($query_run);

 if($query_num_rows==1)
      echo 'Entry removed ';
 else
      echo 'Not removed ';  
 }

(もちろん、誰もが mysql_* は非推奨であると言っていますが、まったくそのとおりです。PHP を使い始めたばかりだと思います。ほとんどのチュートリアルではまだ mysql_* を使用しているので、今のところはまったく問題ありません。 mysqli または PDO への切り替えを検討してください。)

于 2013-03-24T16:45:08.920 に答える
0

クエリを次のように変更する必要があります

DELETE FROM regdogs WHERE dogid = $remove

クエリを印刷してみる

echo $query;

結果を投稿します。

于 2013-03-24T16:41:45.747 に答える
0

これが必要だと思います:

 $query ="DELETE FROM regdogs WHERE dogid = $remove ";
于 2013-03-24T16:41:58.773 に答える