【问题标题】:why does my website insert two records when code is only run once!为什么我的网站在代码只运行一次时会插入两条记录!
【发布时间】:2011-04-06 18:32:27
【问题描述】:

简单地说,我正在尝试使用 mysql 为访问 php 站点的访问者创建一个自定义记录器。在这样做的过程中,我发现我为每个页面加载插入了两个条目。

我已经排除了代码不小心跑了两次。

   我将查询放在每一页上,假设它可以完美运行。在意识到它导致出现两个条目后,我感到困惑并从其他页面中删除了查询,仅将其留在索引页面上。

   利用 PHP 的 $_SERVER['HTTP_REFERER'] 和 $_SERVER['PHP_SELF'],我将值插入到日志中。看看我之前在哪里以及我现在在哪里。

   假设我在创建页面上,我点击了一个指向名为 index.php 的“主页”页面的链接。数据库中的条目会说referer 是“create.php”,当前页面是“index.php”。但是,将插入第二个条目,表示引用者是“index.php”,当前页面是“index.php”

   我检查了当我单击指向没有记录器的页面的链接时会发生什么,因此我单击转到“创建”页面。我检查了数据库,还有另一个条目,但讽刺的是,这次只插入了一个条目。这很奇怪,因为创建页面没有记录访问者的代码,它只插入一个条目。但是,它说引用是'create.php',当前页面是index.php。这与应有的水平相反。

    进行更多研究后,我决定研究现场观看标题。因此,我使用 firefox 和 IE 进行了检查,在那里我意识到标题获取了我请求的页面,并且也始终获取了根页面。例如,对 create.php 的请求返回..

GET /create.php HTTP/1.1
获取 /style/ HTTP/1.1
GET / HTTP/1.1

    我了解第一个 GET,对于我请求的页面,我了解外部样式表的第二个 GET。最后一个让我感到困惑,尽管它似乎证实了我为什么会得到重复的条目。

    因为 create.php 页面上没有访问者日志,所以日志没有第一个条目,但是一旦加载根页面,就会为 create.php 创建条目作为引用,当前页面是index.php 页面,因为它正在加载根页面。

    因为 index.php 页面上有一个访问者日志,所以当我从“create.php”转到“index.php”时,第一个 GET 会创建一个“create.php”条目作为引用者和当前页面是“index.php”,但第二个条目说“index.php”是引用者和当前页面。

所以我很确定这是我获得第二个条目的原因。

谁能告诉我为什么每次请求都加载根页面?

我在本地使用 xampp for mac os x,我知道它可能是默认的 favicon。但是,我刚刚删除了该图标,它仍然会出现,即使没有显示图标。

我可以提供代码示例和其他东西,在这一点上似乎无关紧要,因为插入查询有效,当我显然只执行一次时它只会出现两次。

【问题讨论】:

  • 嗯,是的,这是一个很严重的问题。但它没有告诉我们你做了什么。您想分享任何可能有帮助的代码 sn-ps?
  • 向我们展示您的create.php 文件。
  • 你的网络服务器已经记录了所有的东西

标签: php mysql http-headers


【解决方案1】:

“GET /”请求正在自动拉取 index.php。

页面某处可能存在无效的图像 SRC url、脚本 SRC 或链接 HREF。这些可能会导致在后台对服务器发出看起来很常规的请求,而不会意识到这一点。查看所有 HTML 中的 URL 并确保它们都是有效的服务器端文件。还可能存在将未知文件重定向回主页的服务器端重定向。

或者你有一些 JavaScript(可能是广告?)正在执行 ajax 请求。

我们需要完整的来源才能真正追踪到这一点。

【讨论】:

  • 嗯,就是这样......我最终删除了页面内容,将每一行一一放回去。它最终归结为我创建的一个脚本,用于从目录中获取所有样式表,我猜它没有正确加载一个。太感谢了。我的大脑整天都在研究它,所以这减轻了很多压力!再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-08
  • 1970-01-01
  • 2019-12-04
  • 2013-11-26
  • 1970-01-01
相关资源
最近更新 更多