我想在php mysql中删除其中的id=$POST[';id';]
我的删除条目代码是这样的,但它没有做任何事情 HTML我想在php mysql中删除其中的id=$POST[';id';],php,mysql,wordpress,Php,Mysql,Wordpress,我的删除条目代码是这样的,但它没有做任何事情 HTML 删除post['id']周围的单引号: $wpdb->query("DELETE " . PRO_TABLE_PREFIX . "tutorial WHERE id={$_POST['id']}") 或 我通常就是这样做的: $wpdb->query("DELETE " . PRO_TABLE_PREFIX . "tutorial WHERE id='".$_POST['id']."') PS:走到这里,接受一个对你帮助
删除
post['id']
周围的单引号:
$wpdb->query("DELETE " . PRO_TABLE_PREFIX . "tutorial WHERE id={$_POST['id']}")
或
我通常就是这样做的:
$wpdb->query("DELETE " . PRO_TABLE_PREFIX . "tutorial WHERE id='".$_POST['id']."')
PS:走到这里,接受一个对你帮助最大的答案。还有这里!:P
因为您要在WHERE子句中检查id,所以不需要将其用引号括起来,并且在delete语句中缺少,所以标准方法是: 并在插入数据库之前对POST数据进行一些过滤,如:
$id = (int) $_POST['id'];
if( $id > 0 ) {
$wpdb->query("DELETE FROM " . PRO_TABLE_PREFIX . "tutorial WHERE id=".$_POST['id']);
}
请尝试以下代码:-
global $wpdb;
if ( isset ( $_POST['id'] ) && ! empty ( $_POST['id'] ))
{
$wpdb->query("DELETE FROM " . PRO_TABLE_PREFIX . "tutorial WHERE id=".$_POST['id']);
}
为了避免这样的混淆,我总是在需要连接字符串的地方使用
sprintf()
更改:
global $wpdb;
if ( isset ( $_POST['id'] ) && ! empty ( $_POST['id'] )) {
$wpdb->query("DELETE " . PRO_TABLE_PREFIX . "tutorial WHERE id='{$_POST['id']}'");
}
致:
有几件事需要注意:
1) 您容易受到SQL注入的攻击2) 使用
isset()
确定$\u POST['id']
的键是否实际不是NULL
,无需通过empty()检查其是否为空
更新
您应该真正测试$\u POST['id']
是否有效。我建议您实现一个函数,比如,is\u id\u valid()
警告:SQL注入仍然存在漏洞
give some action path to the form
html
如果你在字符串中谈论{},为什么要在$\u POST['id']@PhilemonphilipKunjumon前面使用{},这是因为当使用带有键的数组时,你必须将整个东西包装在{
}
标记中,否则它会将$\u POST
作为变量和['id']
作为一个普通字符串。最后一个问题是相同的,但只是它是upate。现在删除。。。。可能是下一次插入?请至少添加一个检查以确保$\u POST['id']是一个int。您的代码容易受到SQL注入的攻击。由于您是PHP/SQL新手,请注意使用mysql\ucode>转义字符串,然后使用PDO执行查询。(facepalm)@user1890857:尝试回显查询。查询是否正确生成?注意:未定义变量:wbpd致命错误:对非对象调用成员函数query()in@user1890857不要删除global$wpdb代码>。这肯定有效吗<代码>id=。“$\u POST['id']”。“
或应该是id=”。$\u POST['id']。“'
@user1890857-您必须接受答案,我们才能为您提供正确的代码。”。。而这一个,虽然它的工作是错误的。只要想想帮助别人。更多的名声不会给你奖励。@Gabriel Santos-如果有人懒惰或是其他什么,你可以按一个按钮换取20分钟的帮助(这是第三次)。。我认为那个人应该得到除帮助以外的一切。谢谢你的好话;)他可能懒惰,或者你可能没有解决办法。我明白你的意思(:@Gabriel Santos-是的。这是肯定的:第二次提交后删除Dit为什么?对不起,我不明白。你能解释一下你的意思吗?当我在文本字段中输入id,然后在提交按钮上输入它第一次什么都不做时,这意味着当你第一次提交时,“id”未提交。请检查您是如何处理表单提交的。请1)编写安全代码或2)使用提供的code@GabrielSantos我的意思是说,这归结为E\u通知
对不起?我不明白你的意思。正确的应该是if(!empty($\u POST['id']){
,因为表单将永远发送id
索引,但是,如果没有键入任何内容,则返回空值。@GabrielSantos你是对的,但是它将抛出E\u通知,而isset()
E_通知
如果总是定义表单索引,即使您发布了完整或空的表单,为什么会这样做?-1请1)编写可接受的安全代码和/或2)明确说明问题使用提供的代码。像这样的答案只是继续推广糟糕的、不安全的代码。我想在答案中添加一些注释之前就清楚了…!引用(或缺少引用)不是问题。问题是:(以下是答案和解决方案。@Sudhir你显然抄袭了我自己的答案,因为我的打字错误相同。你应该为自己感到羞耻:(它是id=“.$\u POST['id']”)。
notid=“.$\u POST['id']
@shnisaka仔细看,我的id=”中没有单引号……你在哪里看到它。。。?
$id = (int) $_POST['id'];
if( $id > 0 ) {
$wpdb->query("DELETE FROM " . PRO_TABLE_PREFIX . "tutorial WHERE id=".$_POST['id']);
}
global $wpdb;
if ( isset ( $_POST['id'] ) && ! empty ( $_POST['id'] ))
{
$wpdb->query("DELETE FROM " . PRO_TABLE_PREFIX . "tutorial WHERE id=".$_POST['id']);
}
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']));
}
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 ){
....
}
give some action path to the form
<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"/>
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");
}