【问题标题】:Deleting a record using id in php在php中使用id删除记录
【发布时间】:2015-03-18 13:11:15
【问题描述】:

我正在尝试使用 get id 方法删除记录。我在 echo 部分的 php 中嵌入了 html。

while ($row = mysql_fetch_array($result_select)) {
    echo("<tr>
            <td>". $row[games_name] ."</td>
            <td>" . $row['date'] . "</td>
            <td> <a href='delete.php?id={$row['games_id']}'>delete</a></td>
          </tr>");
}

在我的 delete.php 中,我输入了以下内容:

incude("includes/connection.php");
$id = $_GET["id"];

$sql = "DELETE FROM tbl_games WHERE games_id=$id";
$result = mysql_query($sql,$con).mysql_error();
if(!result){ echo "Error";}else{echo "Success";}

但它似乎不起作用。请大家帮忙!!

【问题讨论】:

  • 任何输出错误要与我们分享?在你的 WHERE 条件下是 id 还是 games_id?
  • 必须是WHERE id=$id。并且不要使用已弃用的mysql_* API。使用 mysqli_* 或 PDO 和准备好的语句
  • 不,它指向另一个页面。但是当我检查记录没有被删除。我使用 games_id 删除它
  • sql 注入前...
  • @Masiorama 指定您能否向我们提供任何输出错误。使用 var_dump 确认变量的值并检查日志。使用您提供的最少信息很难进行调试。

标签: php html mysql


【解决方案1】:

您的代码中有几个拼写错误/错误。如果需要,请将您的 while 循环更改为:

while ($row = mysql_fetch_array($result_select)) {
  echo sprintf("
    <tr>
      <td>%s</td>
      <td>%s</td>
      <td><a href=\"delete.php?id=%d\">delete</a></td>
    </tr>", $row["games_name"], $row["date"], $row["games_id"]);
}

(我认为添加的sprintf() 使html 更具可读性。)

$row[games_name] 中缺少引号,所以我更改了它。

为您的delete.php

incude("includes/connection.php");
$id = isset($_GET["id"]) ? (int)$_GET["id"] : null ;
if ( !isset($id) ) {
  die("Error: id not set");
}
$sql = "DELETE FROM tbl_games WHERE games_id=$id";
$result = mysql_query($sql, $con) or die(mysql_error());
if (!$result) {
  echo "Error";
} else {
  echo "Success";
}

确保只有在设置了?id 时才会执行此操作。

将您的incude 更改为include,将!result 更改为!$result

(未经测试的代码)

【讨论】:

  • id url 显示了一个值但不影响数据库。你能告诉我 id=%d 是什么意思吗
  • %dsprintf() 的格式参数:“参数被视为整数,并显示为(有符号)十进制数。php.net/manual/en/function.sprintf.php
  • 因为它没有影响您的数据库并且您的查询在 phpMyAdmin 中也不起作用:确保您的数据库用户具有从tbl_games 删除的适当权限。
  • 不错...我的代码中一定有一些问题无法正常工作
  • 肯定有 ;) 如果您重做代码,请按照 @Jens 的建议执行并切换到 mysqliPDO。祝你好运。
【解决方案2】:

从 PHP 文件 URL {$row['games_id']} 中删除花括号 {} 并删除删除查询中的花括号。

$sql = "DELETE FROM tbl_games WHERE id=$id"

【讨论】:

  • 不,"{$var}" 包裹在双引号字符串内的花括号内的变量将起作用。但在 OP 的情况下当然容易发生 SQL 注入
  • 当我删除 '{$row['games_id']}' 中的大括号时,我得到一个空白页
猜你喜欢
  • 2016-05-06
  • 1970-01-01
  • 2021-02-10
  • 2015-09-25
  • 2015-08-23
  • 2019-11-07
  • 1970-01-01
  • 1970-01-01
  • 2015-02-24
相关资源
最近更新 更多