我正在使用长表单来更新我的数据库中的广告。我还使用此表单通过按删除按钮来删除图像。删除进度工作正常,它从数据库中删除图像的路径,但图像仍在显示,直到我手动重新加载页面。我试图在 isset 方法的末尾回显一个 javascript 重载代码,但它一直在无限重载。
我的代码:
// Delete image
if (isset($_POST['delete'])) {
$delete_imageid = $_POST['imageid'];
$stmt = $link->prepare("DELETE FROM images WHERE id = ?");
$stmt->bind_param('i', $delete_imageid);
$stmt->execute();
$stmt->close();
}
答案 0 :(得分:1)
您做了很多违背 PHP 最佳实践的事情:
您不应该在具有 HTML 输出的页面上进行删除。您应该在单独的页面上删除,该页面只能通过身份验证机制(CSRF 密钥或类似机制)访问。
这个exit first page --> load new page --> reload first page
例程也将解决您的刷新问题,因此您的浏览器需要在被静默重定向之前加载一个仅限PHP的删除页面(如biesoir所示)回到您的 HTML 显示页面。因此显示页面将刷新(由于重新加载)。
如果由于某种原因显示页面被缓存,您可以通过 time()
函数向调用添加时间戳来强制忽略缓存:
header("Location: yoursite.com/your-desired-return-path-here?t=".time());
exit;
Javascript 完全不需要,因为 Javascript 在浏览器上工作,而 PHP 在服务器上工作。这就是您进入无限循环的原因,因为当 PHP 仅在服务器端运行时,您正试图在浏览器端不断检查更改。
这两个东西不相互作用。 HTML 和 Javascript(等)只有在 PHP 完成并将结果发送到远程浏览器后才能工作。
<块引用>PHP/Server --> Javascript/HTML/Browser
答案 1 :(得分:0)
您是否在删除代码后尝试过 http 请求?它再次加载所有页面。类似于 js 设置,但直接从您的 php 代码发送。
/***
* Assuming this code is on the same page as yoursite.com/your_img_url
* The header/exit should be within the if loop
***/
if (isset($_POST['delete'])) {
$delete_imageid = $_POST['imageid'];
$stmt = $link->prepare("DELETE FROM images WHERE id = ?");
$stmt->bind_param('i', $delete_imageid);
$stmt->execute();
$stmt->close();
//header("Location: yoursite.com/your_img_url=$_POST['imageid']"); EDITED
header("Location: yoursite.com/your_url_where_you_removed_img");
exit;
}
ofc yoursite.com/your_img_url 是您尝试重新加载的网址 我总是在更改数据库后使用这种重新加载,并且运行良好。 编辑:ofc 取决于您如何构建您的网站,但请检查 php 中的 header("Location:") 使用情况,您将获得快速而简单的解决方案