【发布时间】:2015-07-02 22:52:09
【问题描述】:
我似乎每次运行 PHP 脚本都会得到不同的结果。
在 Windows 和 Chrome 上,脚本运行正常。在 Android Chrome 上,几乎就像脚本在导致错误之前运行了两次一样。如您所知,以下脚本用于确保请求只能发出一次(不能刷新等)。
在 Android 上,脚本运行,它在历史记录表中找到该行,该行应该从历史记录表中删除,但它也取消设置 $uploadId 导致脚本的其余部分不起作用。我看不到 if 语句的两边是如何运行的,除非 Android 上的 Chrome 浏览器出于性能或其他原因以某种方式运行该页面两次。
$historyQuery = "SELECT id FROM history WHERE userID = '".$_SESSION['userID']."'";
$historyQuery .= " AND historyCustom = '".$uploadId."' LIMIT 0, 1";
$checkHistory = mysqli_query($conn, $historyQuery);
if(mysqli_num_rows($checkHistory) == 0) {
unset($uploadId);
} else {
$historydetail = mysqli_fetch_array($checkHistory);
mysqli_query($conn, "DELETE FROM history WHERE id = '".$historydetail['id']."'");
}
我现在已经在 Firefox for Android 下进行了测试,并且脚本运行正常,就像在 Windows Chrome 上一样。似乎这是 Android Chrome 独有的问题。
另外,我遇到了以下问题:https://stackoverflow.com/questions/29490740/does-chrome-for-android-automatically-compress-and-resize-images 似乎有类似的想法。
uploadId 在 unset 函数之前总是相同的。在未设置之后令人惊讶......它会被取消设置,但同时它会删除历史记录中的行。
【问题讨论】:
-
PHP 在服务器上执行,而不是在客户端上。因此,只要不涉及用户输入,几乎不可能根据设备执行不同的代码。你确定不是别的吗?
-
是什么让您认为“在 Android Chrome 上,几乎就像脚本运行了两次一样”?
-
我知道 PHP 是在服务器上执行的,因此如果它以某种方式运行两次,它只会给出我得到的结果。可能一旦进入后台。我已经关闭了 Chrome 的“数据保护程序”,它仍然给出了相同的结果。如果运行一次,它不可能运行 if 语句的两端。
-
由于您有更多未共享的代码,让我们确保“第二页加载”确实发生。请在
unset命令之前和DELETE query之后添加var_dump($uploadId);。你得到什么输出? -
我已经通过写入日志对此进行了测试。 uploadId 未设置,只有在之前删除历史记录行时才会发生这种情况。但这在页面加载之前不会被删除,并且不可能在同一加载中同时执行。
标签: php android google-chrome