只有当我点击F5时,我的脚本才能在浏览器中运行。以前的结果似乎是缓存或其他东西。
这就是它的样子:
http://mywebsite.com/unsubscribe.php
这会导致严重的问题。我的电子邮件中有一个取消订阅链接,我希望发送给用户但是当我点击它时,没有任何反应,因为当我在浏览器中输入时,点击被认为是相同的。即使我在链接中有一个参数
http://mywebsite.com/unsubscribe.php?email=tom@gmail.com
未捕获该值。
$email = $_GET['email'];
$newsletter = 'No';
try {
$stmt = $conn->prepare("UPDATE USERS SET NEWSLETTER = ? WHERE EMAIL = ?");
$stmt->execute(array($newsletter, $email));
$response["success"] = 1;
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
$response["success"] = 0;
}
echo 'email: '.$email.'<br>';
print(json_encode($response));
结果:
email: tom@gmail.com
{"success":1}
但这是因为tom@gmail.com被缓存(或其他东西)但是数据库中的值没有更新。 现在当我点击F5时,数值会在数据库中更新。怎么了?
答案 0 :(得分:0)
如果问题是缓存,则应添加一些标头以删除缓存。然后,你应该发送一个完整的有效JSON! (你用一些文字添加了无效的部分。)
标题
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-type: application/json');//*/
Simple JSON for PHP - 如果您使用此方法,它会自动发送标题 -
include('includes/json.php');
$Json = new json();
$email = $_GET['email'];
$newsletter = 'No';
try {
$stmt = $conn->prepare("UPDATE USERS SET NEWSLETTER = ? WHERE EMAIL = ?");
$stmt->execute(array($newsletter, $email));
$response["success"] = 1;
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
$response["success"] = 0;
}
$Json->add('status', '200');
$Json->add('message', '$success');
$Json->add('email', '$email');
$Json->add('response', '$response');
$Json->send();