【问题标题】:Deleting users With PDO使用 PDO 删除用户
【发布时间】:2018-01-16 21:15:33
【问题描述】:

大家好,我对删除用户的形式有疑问,当我提交按钮时没有发生什么问题,当我获取他们来的信息时,一切都在数据库上正常工作,但是当我点击删除时没有发生任何事情

  <?php



        $host ="localhost";
        $dbname ="justnew";
        $u_name="root";
        $u_pass="youcef02";

        echo'
             <table border="1px solid #efefef" width="42%">
          <tr>
          <th>ID</th>
            <th>Name</th>
            <th>Password</th>
        <th>DELETE</th>
          </tr>


        ';
        try{
        $Conn = new PDO("mysql:host=$host;dbname=$dbname",$u_name,$u_pass);

        }

        catch(PDOEXCEPTION $e){
        echo'There is a prblm' .$e->getMessage();

        }

        $sql = "SELECT * FROM addu";
        $result = $Conn->query($sql);

        while($row = $result->fetch(PDO::FETCH_OBJ)) {
        echo"
          <tr>
          <td>" .$row->u_id."</td>
            <td>" .$row->u_name."</td>
            <td>" .$row->u_pass."</td>
             <td><button name='dlt'><a href='attribute.php?
           type=dlt&u_id=".$row->u_id."' name='dlt'>DELETE</a></button></td>
          </tr>
        ";
        }


        if($_GET['type'] == ['dlt']){

        $id = intval ($_GET['u_id']);


        $Dsql = "DELETE * FROM `addu` WHERE `u_id` ='".$id."'";
            $Dresult = $Conn->exec($Dsql);



        }
        ?>        

【问题讨论】:

  • if($_GET['type'] == ['dlt']) 应该会抛出错误。您需要为整个事情添加错误检查。
  • 删除删除中的*dlt 也是字符串而不是数组
  • @JayBlanchard stackoverflow.com/questions/23315022/… 如果你愿意的话。
  • 您的数据库中 u_id 列的数据类型是什么? int 还是 varchar?如果它是 int (我怀疑这是因为您将 $_GET 变量解析为 int)然后在查询中删除它周围的单引号,否则 mysql 认为它是一个字符串并且它不会与列中的 int 值匹配,因此它将找不到要删除的行。如果您使用了参数化查询(您确实应该这样做),则根本不会发生这种问题。

标签: php mysql pdo


【解决方案1】:

看到没有人想为此发布答案,我正在提交以下内容。

如上所述:if($_GET['type'] == ['dlt']) 无效。 dlt 周围的括号需要删除,否则会引发语法错误。

  • if($_GET['type'] == 'dlt')

但是,您应该检查 GET 数组是否已设置/不为空,因为没有它,它也会引发未定义的索引警告,并在您的系统上设置了 error reporting

if(isset($_GET['type']) && $_GET['type'] == 'dlt')

if(!empty($_GET['type']) && $_GET['type'] == 'dlt')

那么您查询的删除部分也是无效的。

它应该读作:

$Dsql = "DELETE FROM `addu` WHERE `u_id` ='".$id."'";

星号仅对 SELECT 语句有效:

使用过 (PDO) 错误处理,您肯定会得到一个语法错误:

现在这一点可能会产生不利影响:

<td><button name='dlt'><a href='attribute.php?
           type=dlt&u_id=".$row->u_id."' name='dlt'>DELETE</a></button></td>
          </tr>
";

(通常)最好将所有这些都放在一行中:

<td><button name='dlt'><a href='attribute.php?type=dlt&u_id=".$row->u_id."'>DELETE</a></button></td>
          </tr>
        ";

添加的空格可以在这里计算。

注意:您使用了两次name 属性。

如果上述方法失败,则&lt;a href&gt;&lt;/a&gt; 不应位于&lt;button&gt;&lt;/button&gt; 内,只需使用&lt;a href&gt;&lt;/a&gt;

【讨论】:

    猜你喜欢
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    相关资源
    最近更新 更多