0

エントリを削除するための私のコードはこれですが、何もしていません

HTML

<form id="form3" name="form3" method="post" onsubmit="return validateForm();" action="">
    Id <input type="text" class="txt" name="id" /><br />
    <input type="submit" id="delete" value="delete"/>
</form>

PHP

global $wpdb;

if ( isset ( $_POST['id'] ) && ! empty ( $_POST['id']  ))
{
    $wpdb->query("DELETE " . PRO_TABLE_PREFIX . "tutorial  WHERE id='{$_POST['id']}'");
}
4

7 に答える 7

1

それは私が通常それをする方法です:

$wpdb->query("DELETE " . PRO_TABLE_PREFIX . "tutorial  WHERE id='".$_POST['id']."')
于 2013-01-01T07:10:52.960 に答える
1

このような混乱を避けるために、私は常にsprintf()文字列を連結する必要がある場所を使用します

変化する:

global $wpdb;
if ( isset ( $_POST['id'] ) && ! empty ( $_POST['id']  )) {
    $wpdb->query("DELETE " . PRO_TABLE_PREFIX . "tutorial  WHERE id='{$_POST['id']}'");
}

に:

global $wpdb;

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

   $wpdb->query(sprintf("DELETE %stutorial  WHERE id='%s'", PRO_TABLE_PREFIX, $_POST['id']));
}

注意すべき点がいくつかあります。

1)SQLインジェクションに対して脆弱です
2)isset()のキーが$_POST['id']実際にそうではないかどうかを判断するために使用した後は、そのキーがNULL空であるかどうかを確認する必要はありません。empty()

アップデート

あなたは本当に$_POST['id']それが有効かどうかをテストする必要があります。次のような関数を実装することをお勧めします。is_id_valid()

function is_id_valid(&$id){ //<-- IMPORTANT, Argument should be a reference 

  if ( ! isset($id) ){
     return false;
  }

  if ( empty($id) ){
    return false;
  }

  // add this if you expect $id to be a numeric value
  // otherwise just ignore - do not add
  if ( ! is_numeric($id) ){
    return false;  
  }

  //it's also a good to validate the length 
  if ( strlen($id) > ... && strlen($id) < ... ){
     return false;
  } 

  //seems like all tests passed
  return true;
}

次に、次のように使用します

if ( is_id_valid($_POST['id']) !== false ){
   ....
}

警告:それはまだSQLインジェクションに対して脆弱です

于 2013-01-01T07:32:52.537 に答える
0

周りの一重引用符を削除しますpost['id']

$wpdb->query("DELETE " . PRO_TABLE_PREFIX . "tutorial  WHERE id={$_POST['id']}")

また

echo $query = "DELETE " . PRO_TABLE_PREFIX . " tutorial  WHERE id =".mysql_real_escape_string($_POST['id']);
$wbpd->query($query);
于 2013-01-01T07:08:30.053 に答える
0
$wpdb->query("DELETE FROM " . PRO_TABLE_PREFIX . "tutorial  WHERE id='{$_POST['id']}'");

PS:そこに行って、あなたを最も助けた1つの答えを受け入れてください。そしてここにも!:P

于 2013-01-01T07:11:15.153 に答える
0

次のコードを試してください:-

global $wpdb;

if ( isset ( $_POST['id'] ) && ! empty ( $_POST['id']  ))
{
$wpdb->query("DELETE FROM " . PRO_TABLE_PREFIX . "tutorial  WHERE id=".$_POST['id']);
}
于 2013-01-01T07:24:45.283 に答える
0
give some action path to the form 

html

<form id="form3" name="form3" method="post" onsubmit="return validateForm();" action="give some actions">
Id <input type="text" class="txt" name="id" /><br />
<input type="submit" id="delete" value="delete"/>

php

global $wpdb;

if ( isset ( $_POST['id'] ) && ! empty ( $_POST['id']  ))
{
  $id=stripslashes_deep($_POST['id']);
  $wpdb->query("DELETE FROM " . PRO_TABLE_PREFIX . "tutorial  WHERE id=$id");
}
于 2013-01-01T08:05:55.607 に答える
-1

WHERE句でidをチェックしているので、引用符で囲む必要はなく、deleteステートメントにFROMがないため、標準的な方法は次のようになります。データベースに挿入する前に、次のようにPOSTデータのフィルタリングを実行します。

$id = (int) $_POST['id'];
if( $id > 0 ) {
    $wpdb->query("DELETE FROM " . PRO_TABLE_PREFIX . "tutorial  WHERE id=".$_POST['id']);
}
于 2013-01-01T07:13:05.240 に答える