我想在php mysql中删除id = $ POST ['id']的地方

时间:2013-01-01 07:05:19

标签: php mysql wpdb

我的删除条目代码是这样但它没有做任何事情

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

7 个答案:

答案 0 :(得分:1)

这就是我通常的做法:

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

答案 1 :(得分: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() < / p>

<强>更新

如果有效,你应该真正测试$_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注入仍然存在漏洞

答案 2 :(得分:0)

删除post['id']周围的单引号:

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

OR

echo $query = "DELETE " . PRO_TABLE_PREFIX . " tutorial  WHERE id =".mysql_real_escape_string($_POST['id']);
$wbpd->query($query);

答案 3 :(得分:0)

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

PS:过去并接受一个最帮助你的答案。在这里! :P

答案 4 :(得分:0)

请尝试以下代码: -

global $wpdb;

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

答案 5 :(得分: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");
}

答案 6 :(得分:-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']);
}