【问题标题】:Delete from 'table' where id='selected record '?从 'table' 中删除,其中 id='selected record'?
【发布时间】:2016-03-27 12:20:56
【问题描述】:

我正在从带有回显行中的删除按钮的表中选择记录。当我单击相应的删除按钮时,我希望能够删除记录。 这是我从另一个查询中删除所选记录的删除查询,但它不起作用!

$querytwo = 'DELETE FROM paginas WHERE id= $_POST["id"]';   

我做错了什么。它是什么?这是完整的代码。

    <?php

        include_once("config.php"); //this is the database connection
        $query = "SELECT * FROM paginas "; //selects from the table called paginas
        $result = mysqli_query($mysqli, $query);

            while($row = mysqli_fetch_assoc($result)) 
            {
            $pagetitle = $row['pagetitle'];
            $toevoeging = $row['toevoeging'];
            $message = $row['message'];

                echo '<article class="topcontent">
       <div class="mct">
        <h2>' . $pagetitle .'</h2>
       </div><br>
       <p class="post-info">'. $toevoeging . '</p>
       <p class="post-text"><br>'.$message.'</p>
      </article>
       <div class="deleteknop">
        <form method="post">';

   echo '<input type="hidden" name="id" value="'.$row['id'].'">
         <input name="delete" type="submit" value="Delete Now!">
        </form>
       </div>' ;
            }

        $querytwo = 'DELETE FROM paginas WHERE id= $_POST["id"]';

        if (isset($_POST['delete'])) //Deletes the query if 'delete' button is clicked

            {
                $resulttwo = $mysqli->query($querytwo);  
            }

            ?>

搞定了。我将线路更改为$querytwo = "DELETE FROM paginas WHERE id= $_POST[id]"; 它的功能。虽然有警告通知说“Notice: Undefined index”,但感谢error_reporting(0);,我摆脱了它

【问题讨论】:

  • id 后面有一个提取单引号。如果id 是数字,则不需要单引号。如果它是一个字符串,那么它之前也应该有一个。
  • 好的,所以我把这一行改成了这个,因为 id 是一个 int。 $querytwo = 'DELETE FROM paginas WHERE id='$row'[id] LIMIT 1';你会说应该这样做吗?因为它仍然没有删除任何东西。
  • 你为什么用一次mysqli_query($mysqli, $query)然后$mysqli-&gt;query($querytwo);
  • 因为它们是两个不同的查询,对吧? $query 用于选择记录,$querytwo 用于删除记录
  • 不。我的意思是mysqli_query vs $mysqli-&gt;query

标签: php mysql sql select


【解决方案1】:

您需要使用双引号来进行变量插值。使用单引号,您看到的确切字符串是作为数据库查询发送的内容,这不是有效的查询。像这样的东西实际上会替换字符串中 POST 变量的值:

$querytwo = "DELETE FROM paginas WHERE id = $_POST[id]"

但是,将变量直接插入查询字符串是一个坏主意,因为它可能导致 SQL 注入漏洞。我建议查找参数化查询。

【讨论】:

  • 谢谢,完全做到了。我将行更改为 $querytwo = "DELETE FROM paginas WHERE id= $_POST[id]";它是功能性的。虽然有一个警告通知说“注意:未定义的索引”,但由于error_reporting(0),我摆脱了它;
  • 警告将在您第一次加载页面时发生,在提交表单之前,因为尚未定义 $_POST['id']。您可以通过在执行查询的块内移动变量赋值来避免它而不抑制所有警告。
【解决方案2】:

你可以:

$querytwo = 'DELETE FROM `paginas` WHERE id= ' . $row['id'] . ' LIMIT 1'; 

【讨论】:

    【解决方案3】:

    你可以使用:

    $querytwo = 'DELETE FROM paginas WHERE id= $_POST["id"]';
    

    不需要限制,你是用id作为参考,所以它会删除一条记录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-12
      • 1970-01-01
      • 1970-01-01
      • 2011-05-20
      • 1970-01-01
      • 2014-11-08
      • 1970-01-01
      相关资源
      最近更新 更多