我有一个网站,每个页面都有一个按钮。单击该按钮时,它会调用一个函数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
消失(所以我知道函数被调用了)..然后我检查了它不起作用的原因是我正在谈论的文件是否在一个不同的目录(然后脚本/ readAllNotifs.php将是错误的)。但是,不,它与其他页面的文件在同一目录中(这完全适用于那些页面)。
所以我查看了我的(Chrome)开发者工具,查看了网络选项卡,当我点击按钮时,我看不到发送到该页面的请求。我认为这很奇怪,所以我检查了其他文件完美的工作,但即使在那里,网络tabe也不会显示对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执行不输出错误,如果同一目录中的其他文件可以完美地执行此操作...那为什么不能这个页面?
P.S。涉及的Javascript保存在外部.js文件中,并使用脚本标记链接到站点上的每个页面。此外,此脚本标记位于页面上的所有其他脚本标记之前(除了用于包含jQuery.js的标记之外)
答案 0 :(得分:0)
想出来,
另一个PHP脚本中的错误会重写DB上的readStatus.I修复了该脚本,这个页面开始完美运行! :d