【问题标题】:link going through tracking script pulls correct article id, incorrect article text链接通过跟踪脚本提取正确的文章 ID,不正确的文章文本
【发布时间】:2015-07-19 22:34:12
【问题描述】:

我有一个显示来自不同数据库表的内容的页面。每个部分都包含一个链接,以指向一个页面(例如 view_article.php),该页面显示该内容及其下方的评论部分。有问题的链接是;

'<a href="'.$site.'/views/track.php?id='.$row['article_id'].'">
<font face="arial black" color="#0000CC" size="5">
Click Here For Full Story
</font>
</a>
<hr>';  

我知道我完全缺少一些东西,因为这个链接对我来说正常工作,因为它应该是。这链接到 track.php 页面,该页面更新了 clicks 列(并以 PDO 形式作为我在 PHP: How to increment a value in the table row to count views and to limit counts to one IP address 贡献的额外答案)。我的 Googlethons 和文档有点徒劳无功(尽管我认为用户贡献的主题最接近我目前的困境 - 来自 dyukemedia)。我只是无法将正确的文章文本同步到文章 ID - 每个 URL 访问中的文章 ID 都是正确的;

example.com/views/view_article.php?id=4

(作为地址栏中显示的示例文章 URL) - 但我的问题是文章文本的第一行(即 id=1)是唯一从数据库中提取的。在我的一生中,我无法追溯我在此处找到的关于(可能?)的建议,以确保相对于文章 ID 调用正确的文章文本。即使在我输入这个问题时,我也有大约六个补充阅读标签同时进行(哈哈!)。必须完成!感谢您提前提供任何帮助或指示。

更多信息

对于没有提前提供查询信息,我深表歉意;

$stmt = $pdo->prepare("
      SELECT article_id, name, title, category, clicks 
      FROM articles 
      WHERE is_published = TRUE
      ORDER BY publish_date DESC
      ");
$stmt->bindValue(':is_published', 1);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);  

这是表articles的表结构

`article_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(10) unsigned NOT NULL,
`name` varchar(100) NOT NULL,
`is_published` tinyint(1) NOT NULL DEFAULT '0',
`submit_date` datetime NOT NULL,
`publish_date` datetime DEFAULT NULL,
`title` varchar(255) NOT NULL,
`article_text` mediumtext,
`category` varchar(10) NOT NULL,
`clicks` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`article_id`),
KEY `user_id` (`user_id`,`submit_date`),
FULLTEXT KEY `title` (`title`,`article_text`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;  

澄清一下:第一个链接示例是对名为 track.php 的文件的传递,该文件通过文章 ID 记录特定内容标题上的单独点击次数。从track.php,浏览者应该通过以下方式被带到内容文章;

header('Location: view_article.php?id='.$_GET['id']);
exit();

即使在我用$article_id 替换$_GET['id'] 的实验中,在每个链接悬停时,都会显示正确的文章ID,并且在选择时,正确的文章ID 会显示在地址栏中。只有文章内容文本在当前网站主页上的所有三种情况下都是相同的(由上面列出的查询调用)。

更新 1

不得不将主文章导航链接改回;

<a href="'.$site.'/views/track.php?view_article.php&id='.$row['article_id'].'">  

因为第二篇文章 id 之后的所有后续链接都停止更新 clicks 列。所以,现在我仍然陷入能够更新链接点击以跟踪某个文章内容片段的流行度,但无法让链接连接到正确文章文本的情况。我总是能够在 URL 地址栏中获得正确的文章 ID;

www.example.com/views/view_article.php?id=4

即使对track.php 代码进行了多次调整,我仍然陷入僵局。 任何人 可以看到我哪里出错了吗?我将包括要求的任何其他必要信息。

【问题讨论】:

  • 您的 href 显示为 track.php,但您的示例网址显示为 view_article.php?我对整个问题有点困惑。有关如何使用 id 提取文章文本的相关代码/查询会有所帮助
  • 所以你正在尝试做一个查询,这个查询没有返回你期望的结果?也许你可以给我们你的数据库结构和你的查询?
  • @dan08 - 第一个示例中的 href 链接是不同内容部分的通用链接。第二个 URL 旨在作为访问第一个链接后地址栏中显示的示例。

标签: php mysql pdo


【解决方案1】:

感谢@dan08 和@JiFus 让我知道这是INDEED SELECT 查询为我填满了这一切——太糟糕了,花了将近一天的时间——半来确定我应该一直在查看 view_article.php 页面上的查询;

$sql = "SELECT name, title, category, publish_date, clicks, article_text
        FROM articles  
        WHERE is_published = TRUE 
        ORDER BY publish_date DESC LIMIT 1";
$result = $pdo->query($sql);  

!=

$stmt = $pdo->prepare("
SELECT 
     article_id, name, title, category, clicks, article_text, publish_date 
FROM 
     articles 
WHERE 
     article_id = :article_id 
AND 
     is_published = TRUE 
ORDER BY 
     publish_date DESC 
LIMIT 1
");
$stmt->execute(array(':article_id' => $_GET['id']));
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);  

我可以将链接改回;

<a href="'.$site.'/views/track.php?id='.$row['article_id'].'">  

因为在track.php header() 将查看者发送到特定的文章 ID 文本 URL;

header('Location: view_article.php?id='.intval($_GET['id']));

现在,这修复了我必须使用它的所有内容部分的链接导航功能。有助于在正确的位置找到问题。 当然如果语句无法执行,我将无法获得正确的文章 ID 文本。 GRRR...人为错误再次发生...(哈哈!)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 2013-08-04
    • 1970-01-01
    • 2012-08-20
    • 2019-09-18
    相关资源
    最近更新 更多