【发布时间】:2013-07-16 19:56:03
【问题描述】:
我有一个网站,每个页面都有一个按钮。当按钮被点击时,它会调用一个函数,readAllNotifs:
function readAllNotifs() {
$('#ticker').fadeTo(0,0);
$.get('scripts/readAllNotifs.php');
}
这里是脚本/readAllNotifs.php:
<?php
session_start();
require '../PDOconnection.php';
if (!isset($_SESSION['uID'])) {
$_SESSION['interPageMessage'] = "You need to login to view this page";
header("location: ../login.php");
die();
}
$query = $DBH->prepare("UPDATE notifications SET readStatus = 'true' WHERE uID = ? ORDER BY readStatus DESC LIMIT 10");
$query->bindparam(1,$_SESSION['uID']);
$query->execute();
?>
现在在每个页面上,这都按预期工作。我单击按钮,#ticker 消失,然后我查看我的数据库,行已更新。但是,在 1 个特定页面上,它不起作用...我不知道为什么...
当我点击按钮时,#ticker 消失(所以我知道该函数正在被调用).. 然后我检查了它不工作的原因是否是我正在谈论的文件位于不同的目录(然后 scripts/readAllNotifs.php 将是错误的)。但是不,它与其他页面的文件位于同一目录中(这些页面可以完美运行)。
所以我查看了我的 (Chrome) 开发人员工具,查看了网络选项卡,当我单击按钮时,我看不到发送到该页面的请求。我觉得这很奇怪,所以我检查了其他可以完美运行的文件,但即使在那里,网络标签也没有显示对 readAllNotifs.php 的调用,但它仍然有效。
然后,我切换到控制台,右键单击并选择 Log XMLHttpRequests... 现在,当我单击按钮时,我可以看到:
XHR finished loading: "http://localhost/trunk/scripts/readAllNotifs.php".
但是,仍然检查了我的数据库。没有变化。
所以我又试了一次,我把php文件的最后一行改成了这个
$query->execute();
到这里:
$query->execute() or die(var_dump($query->errorinfo()));
然后去了网站上的所有页面,包括有问题的页面,我查看了网络标签,仍然没有调用这个页面的记录。然后我直接在浏览器中访问 scripts/readAllNotifs.php。它加载了一个空白页面(成功!)我检查了数据库,是的,值得到了更新。
现在没有意义的是,如果php文件完美运行,如果函数调用完美运行,SQL语法完美,PDO执行不会输出错误,如果页面在正确的目录中,如果同一目录下的其他文件可以完美地执行此操作...那为什么这个页面就不能呢?
附:其中涉及的 Javascript 保存在外部 .js 文件中,并使用脚本标签链接到网站上的每个页面。此外,此脚本标记位于页面上的所有其他脚本标记之前(用于包含 jQuery.js 的标记除外)
【问题讨论】:
-
如果我没看错,结果是在服务器端,一切正常,没有错误。我唯一能想到的是有问题的特定页面没有正确设置
uID。回显 uID 以检查它? -
你检查你的错误日志了吗?
-
如果您通过 ajax 调用,标题位置调用不会将用户转发到登录页面。
-
@DomDay,该变量在登录时设置。所以它在每一页上都是一样的,并且我已经回应了它,一切都设置正确
-
@JohnVanDeWeghe 我知道它不会转发用户。这种情况是如果该人试图通过在浏览器中键入来直接访问 .php 文件。
标签: php jquery mysql pdo sql-update