我的删除条目代码是这样但它没有做任何事情
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']}'");
}
答案 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']);
}