Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我想在php mysql中删除其中的id=$POST[';id';]_Php_Mysql_Wordpress - Fatal编程技术网

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

我想在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:走到这里,接受一个对你帮助

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

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:走到这里,接受一个对你帮助最大的答案。还有这里!: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']”)。
not
id=“.$\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");
}