【问题标题】:Connecting data within two pages连接两个页面内的数据
【发布时间】:2017-09-20 02:25:45
【问题描述】:

我有两页,就像一般的博客文章一样,一页是文章的小预览,一页是完整的文章。每篇小预览文章都有一个名为“阅读更多”的按钮,当用户单击它时,所有文章都会在单独的页面中打开。我正在上传带有 id、name、author、title、article 和 date 列的文章。在第 1 页上,所有文章的预览都从数据库中完美检索,但“阅读更多”按钮无法正常工作。单击任何文章预览的“阅读更多”时,仅显示第一篇文章,而不是根据预览显示不同的文章。 这是代码
第 1 页(预览页)

<?php 
$db = mysqli_connect("localhost", "root", "", "myblogs.com");
$sql = "SELECT * FROM blogs";
$result = mysqli_query ($db, $sql);
while ($row = mysqli_fetch_array($result)){ 
  echo "        <div class='date-posts'>

<a href='index.php'>".$row['title']."</a></h1>
</div>
<div>".$row['author']."</div>

<div><img src='blogs/".$row['image']."'><div class='blogsampletext'>".$row['article']."</div>
<a href='page2.php.'>Read More</a>
</div>
";        
}
?>

第 2 页(显示文章全文)

<?php

$db = mysqli_connect("localhost", "root", "", "myblogs.com");
$sql = "SELECT * FROM blogs LIMIT 1";
$result = mysqli_query ($db, $sql);
while ($row = mysqli_fetch_array($result)){
 echo "<tr><td colspan='2' align='center'><h2>".$row['title']."</h2><br>
 <img src='blogs/".$row['image']."'><br>
 <h4>".$row['author']."</h4>
 </td></tr>";
 echo "<tr><td colspan='2'><hr>".$row['article']."</td></tr>";


  }

?> 

【问题讨论】:

  • 这是因为你有SELECT * FROM blogs LIMIT 1,这总是会选择它看到的第一条博客记录。您必须在page2.php 中实现某种参数,以根据其标识符选择正确的博客记录。 [本教程] 有​​一些关于我上面提到的 ?id=ID 的更多信息,否则你可能想试试谷歌。

标签: javascript php html mysql phpmyadmin


【解决方案1】:

您指向下一页的链接不完整:它不包含对您想阅读的哪篇文章的引用。

您没有提到任何主键,因此,对于本示例,我们假设它称为 id

您的链接应采用以下形式:

<a href='page2.php?id={$row['id']}'>

这将包含id 作为查询字符串。

接下来,您的第二个页面应该获取 id 并使用它:

$id=intval($_GET['id']);
$sql = "SELECT * FROM blogs WHERE id=$id";

通常您在使用用户数据时需要担心 SQL 注入,但 intval 函数会解决这个问题。

您不再需要LIMIT,因为根据定义,主键是唯一的。

由于您依赖用户遵循正确的步骤,因此您有点暴露自己:

  • 如果用户以某种方式进入第二页而没有通过第一页,则您需要根本不允许输入。您可以通过默认读取第一个 id 来做到这一点。
  • 由于您使用 GET 作为方法,邪恶的用户可以通过添加 id=nastystuff 或更糟的东西来破坏事情。在这种情况下,由于它应该是一个整数,intval 会将任何未知的东西转换为 0

【讨论】:

  • 我尝试了该 id 代码及其显示错误。解析错误:语法错误,意外 '' (T_ENCAPSED_AND_WHITESPACE),期望标识符 (T_STRING) 或变量 (T_VARIABLE) 或数字 (T_NUM_STRING) i
  • @SherazAli 抱歉,我没有注意到代码已经在字符串中。我已经修改了答案以在表达式周围包含大括号:{$row['id']}
猜你喜欢
  • 1970-01-01
  • 2013-07-14
  • 2018-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
相关资源
最近更新 更多