如果有一个网站在每个页面上都有一个按钮,在每一页上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();
?>
现在,这种按预期工作:当用户点击该按钮,它调用一个函数,readAllNotifs
:
function readAllNotifs() {
$('#ticker').fadeTo(0,0);
$.get('scripts/readAllNotifs.php');
}
和这里的脚本/ readAllNotifs.php。我点击按钮,#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()));
然后去网站上的所有网页,有问题包括网页,我检查了网络标签,仍然没有记录调用此页面。然后我在浏览器中直接找到脚本/ readAllNotifs.php。它加载了一个空白页(成功!)我检查了数据库,是的,值得到了更新。
现在什么没有意义的是,如果PHP文件完美工作,如果函数调用完美,SQL语法是完美的,PDO执行不会输出错误,如果页面在右侧目录中,如果同一目录中的其他文件可以完美地执行此操作......那么为什么不能这个页面呢?
P.S.涉及的Javascript保存在外部.js文件中,并使用脚本标记链接到网站上的每个页面。此外,此脚本标签进入页面上的所有其他脚本标记之前(除用于包括的jquery.js一)
如果我正确读取它,结果是在服务器端,一切工作正常,没有错误。我能想到的唯一事情就是具有问题的特定页面不会正确设置uID。回显uID来检查它? –
你检查了你的错误日志吗? –
如果您通过ajax调用它,标头位置调用不会将用户转发到登录页面。 –