0

我正在尝试DELETE在每个$row. 此外,在另一个页面上,有一个“下载”链接——它们应该以相同的方式工作。问题是这样的:我让 DELETE 和 DOWNLOAD 在每条记录旁边打印出来,但是使用我拥有的代码,没有任何反应,或者我的脚本因错误而退出。出于某种原因,我已经启动并运行了我的网站中最复杂的功能,但这仍然让我难以理解。这是一些代码:

    while ($row = mysqli_fetch_array($r,MYSQLI_ASSOC))
    {
  echo '<tr><td align="left">' .
    $row['title'] . '</td><td align="left">'
    . $row['genre'] . '</td><td align="left">'
    . $row['length'] . '</td><td align="left">'
    . $row['created'] . '</td><td align="left">'
    . $row['views'] . '</td><td align="left">'
    . "<a href='wprofile.php?id={$row['upload_id']}'>Delete</a></td> . '</td></tr>';
    }

在同一个php页面上,我有这个让我失望的逻辑。该示例用于删除,但对于我的 DOWNLOAD 链接问题,同样失败。

    if(isset($_GET['upload_id']))
    {
    $id = intval($_GET['upload_id']);

    require_once (dbconnectionpath);

    $delquery = "DELETE FROM 'upload' WHERE 'upload_id' = {$id}";
    $done = @mysqli_query ($dbc, $delquery); //run the query

    if($done) {
    if (mysqli_num_rows($done)==1) {
    echo 'Record deleted';
    }
    else{
    echo 'Delete failed';
    }

    @mysqli_free_result($result);
    }
    else{
    echo "Error! Query failed: <pre>{$dbc->error}</pre>";
    }
    mysqli_close(dbconnection);

我得到的错误是“错误,查询失败”

4

3 回答 3

0

在您的链接中,您似乎正在设置id

<a href='wprofile.php?id={$row['upload_id']} ...

但你的代码引用$_GET['upload_id']。换句话说,您在代码中引用了错误的名称。id在代码或upload_id链接中使用。

另一件事可能只是因为我看不到所有的 HTML - 您</td>的代码中似乎有很多元素。但是,请检查链接行末尾的那个,如上所述,这可能会关闭<td>未显示的较早内容。


如果正如您在评论中提到的那样,您的“查看源代码”将链接显示为:

<a href='newwriter_profile.php?id='>Delete</a></td>

那么您创建该 HTML 链接有问题。

那里有很多可能出错的地方,首先想到的是您的原始查询中没有update_id,或者您正在查看的行的 ID 确实是空白的。

在生成 HTML 链接行之前检查 的值$row['update_id'],那至少应该确认或否定该假设。除此之外,您还必须弄清楚为什么您的链接不正确。


刚刚注意到的一件事,您可能想研究一下,是您对引号的使用:

$delquery = "DELETE FROM 'upload' WHERE 'upload_id' = {$id}";

现在我知道 MySQL 有时使用反引号来保护表名和列名免受不正确的解析(例如 with select `column with spaces` from tbl1 ...),但是您的代码似乎有单引号而不是反引号。

这只是要检查的另一件事。可能是where您查询中的子句将文字字符串“upload_id”与您的变量进行比较,而不是比较upload_id 列。

这可以解释为什么您delete没有点击任何行,因为您的 ID(可能)是一个自动递增的整数字段,这意味着它永远不会等于非数字字符串文字。

于 2012-05-11T01:07:41.877 回答
0

if(isset($_GET['upload_id']))改成if(isset($_GET['id']))

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

HTML 参数是 id,而不是 upload_id

于 2012-05-11T01:08:37.373 回答
0

尝试删除大括号,因为当您打印出创建的查询时,它会使用大括号显示 id 的值,这可能导致不删除 id。

这应该有效:“从上传中删除上传位置upload_id = $id”;

要防止页面指向另一个页面,请使用 preventdefault js 函数。

于 2012-05-11T04:42:25.157 回答