只有当我点击F5时,脚本才能在浏览器中运行

时间:2015-04-26 10:36:00

标签: php

只有当我点击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时,数值会在数据库中更新。怎么了?

1 个答案:

答案 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();