【发布时间】:2018-06-26 21:46:18
【问题描述】:
我遇到了两个问题,该函数应将 +1 添加到数据库字段并在完成后重定向到目标 URL。
问题是除非我清除缓存,否则我的 UPDATE 查询不起作用。在试图找出为什么会发生这种情况时,我遇到了另一个奇怪的问题,它在我更改后没有更新功能。
我所做的是尝试评论header,但它仍在重定向我,直到缓存被清除。另一方面,当 header 被评论并且在我清除缓存后,我的 UPDATE 函数每次都有效。
public function clickShortlink($slug) {
$connect = $this->connect();
$stmt = $connect->prepare("UPDATE `shortlink` SET clicks = clicks + 1 WHERE slug = :slug;");
$stmt->bindValue(":slug", $slug);
$stmt->execute();
$stmt = $connect->prepare("SELECT target FROM `shortlink` WHERE slug = :slug");
$stmt->bindValue(":slug", $slug);
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$target = $row['target'];
}
if (isset($target)) {
$connect = null;
header("Location: ".$target);
exit;
}
$connect = null;
}
我对@987654325@ 缺少什么?
编辑
我就是这样称呼clickShortLink():
<?php
if (isset($_GET['gototarget'])) {
$shortlink = new Shortlink();
$url = $shortlink->clickShortlink($_GET['slug']);
}
?>
<form>
<br>
<br>
<input type="text" name="slug" value="di5gV">
<button name="gototarget">Go to target</button>
</form>
【问题讨论】:
-
您的上述代码中没有任何内容会导致问题。关于
header()需要注意的一件事是,它要求在发送标头之前没有 DOM 输出。clickShortLink()是怎么调用的,之前有输出吗?请注意,您可能还希望将if (isset($target)逻辑包装在针对查询的检查中,例如if($stmt->execute())... -
如果您遇到与缓存相关的问题,这可能会有所帮助:stackoverflow.com/questions/1341089/…
-
@ObsidianAge 编辑了问题,并注意到了额外的
if。 @Mr Glass 不幸的是,这无济于事,PHP 可以进入浏览器缓存吗? -
如果代码在您清除缓存后有效,则该代码有效。您的问题是浏览器缓存您的页面。如果您在未用于访问此页面的浏览器中尝试您的代码并且它有效,那么您就知道您的代码有效(并且您需要解决缓存问题)。
-
如果您无法通过此操作,您始终可以将所需的 URL 作为 javascript 变量传递,让 javascript 检查
location.href==yourURL,如果未设置location.href = yourURL。