mysqli DELETE ahref 不起作用


mysqli DELETE ahref not functioning

>我在所有$rows旁边列出了一个删除链接,当我将鼠标悬停在它们上时,它们反映了要删除的正确id,但是,当我单击DELETE时,我被重定向到phpfile.php?id=4,例如,没有删除任何内容,没有发布任何错误。

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='newwriter_profile.php?id={$row['upload_id']}'>Delete</a></td>" .      '</tr>';
}
echo '</table>'; // Close the table

代码的其余部分,存在于同一页面上:

if(isset($_GET['id'])) {
// Get the ID
$id = intval($_GET['upload_id']);

require_once ('../mysqli_connect.php'); //Connect to the db


    $delquery = "
        DELETE 
        FROM upload
        WHERE upload_id = {$id}";
    $done = @mysqli_query ($dbc, $delquery); // Run the query
    if($done) {
        // Make sure the result is valid
        if (mysqli_num_rows($done)==1) {
        echo 'Record Deleted';
        }
        else {
            echo 'error - delete failed';
        }
        // Free the mysqli resources
        @mysqli_free_result($result);
    }
    else {
        echo "Error! Query failed:" .$mysqli_error($dbc);
    }
    mysqli_free_result($done);
    mysqli_close($dbc);
}

如果我能解决这个错误,我将解决一个类似的错误,除了使用下载功能。

当您打算使用$_GET['id']时,您正在从不存在的$_GET['upload_id']中提取$id。 由于未设置$_GET['upload_id'],因此其值为 NULL ,这被解释为 0。 您的查询最终为:DELETE FROM upload WHERE upload_id = 0

$id = intval($_GET['upload_id']);
// Should be
$id = intval($_GET['id']);

与其使用intval(),我建议对$id使用更广泛的边界检查。例如,如果在 ?id=abc 中传递像 "abc" 这样的字符串,intval("abc")会将其转换为 0,而您将 0 传递到查询中。 如果id需要为正整数,请使用如下内容:

if (ctype_digit($_GET['id'])) {
  // ok, do your query
}
else {
  // invalid input, report error to user and don't touch your database.
}

最后,我们看不到脚本的其余部分,但在使用超链接执行删除操作(或与此相关的任何操作(时,在完成操作之前检查尝试删除的行的所有权通常至关重要。 确保登录用户有权删除该行,如果没有,请不要执行任何数据库操作。否则,任何用户都可以将任何值传递到 URL 中以修改其他人的数据。 推荐阅读: 末日蜘蛛