【问题标题】:php while loop echoing element outside of looped contentphp while循环回显循环内容之外的元素
【发布时间】:2017-07-05 20:22:20
【问题描述】:

我网站上的论坛页面使用 PHP 创建一个表,然后使用 while 循环从数据库中填充它。这工作正常并且总是有,但我试图将锚点“链接”标签从帖子标题周围移动到表格中帖子的整个第一部分。为此,它经过以下步骤:

  1. 打开表格标签 [OUTSIDE OF LOOP]
  2. 回显标头 [OUTSIDE OF LOOP]
  3. 启动 WHILE 循环,为找到的每个帖子创建另一个帖子部分。
  4. 创建表格行
  5. 创建表数据
  6. 回声内容
  7. 关闭表数据
  8. 对过帐日期部分再重复第 5-7 步
  9. 关闭表格行
  10. 关闭表格 [OUSTIDE OF LOOP]

它应该使第一部分的所有链接都可以点击,并且它们应该在表格中,如下所示:

<table>  <--- *THIS IS BEFORE THE LOOP, IT GETS RUN ONCE ONLY* -->
    <WHILE *do this like 5 times or something*>
      <tr>
        <a *category link*>
          <td>
            *content for the 'td' which is taken from the DB*
          </td>
          <td>
            *content for the 'td' which is taken from the DB*
          </td>
        </a>
      </tr>
      <ENDWHILE>
</table>

但是,实际上它们最终会出现在表格之外,如下图所示:

谁能解释一下这个以及如何解决它?

echo '<table class="forumTable">
  <tr>
  <th>Category</th>
  <th>Last topic</th>
  </tr>';

while($row = mysqli_fetch_assoc($catResult)){
  echo '<tr>';
  echo '<a href="category.php?id=' . htmlspecialchars($row['catID']) . '"><td class="catDesc">';
  echo '<h3>' . $row['catName'] . '</h3>' . $row['catDesc'];
  echo '</td>';
  echo '<td class="catTime">';
  $getTops = "SELECT topicID, topicSubject, topicDate, topicCat FROM topics WHERE topicCat = " . $row['catID'] . " ORDER BY topicDate DESC LIMIT 1";
  $topResult = mysqli_query($connect, $getTops);
  if(!$topResult){
    echo '<p style="margin-top: 75px;">The last topic could not be displayed, please try again later.</p>';
  }
  else{
    if(mysqli_num_rows($topResult) == 0){
      echo '<p>No topics</p>';
    }
    else{
      while($topRow = mysqli_fetch_assoc($topResult)){
        echo '<a href="topic.php?id=' . $topRow['topicID'] . '">' . $topRow['topicSubject'] . '</a> at ' . $topRow['topicDate'];
      }
    }
  }
  echo '</td></a>';
  echo '</tr>';
}
echo '</table>';

【问题讨论】:

  • 你需要显示实际代码,而不是&lt;WHILE *do this like 5 times or something*&gt;
  • 显示一些代码以便我们能够回答您的问题。
  • 啊,是的,对不起,我忘了这样做。编辑了帖子。
  • 你能检查页面源代码(右键单击 >> 显示页面源代码)而不是 chrome 开发工具显示的内容吗?我怀疑浏览器不喜欢链接的位置并将其移动到更合适的位置。该链接应该包含在单元格内。对于跨越多个单元格的内容,请参见此处:stackoverflow.com/questions/1460958/html-table-row-like-a-link
  • 您刚刚体验了编写无效 HTML 时发生的情况,并且浏览器纠错机制启动并尝试在创建 DOM 时理解它。因此,始终将验证您的 HTML 代码作为故障排除的第一步。 validator.nu, validator.w3.org

标签: php html loops html-table anchor


【解决方案1】:

您是否尝试不从浏览器获取页面?它看起来如何? 我认为浏览器不允许您在没有&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;/tr&gt; 的情况下直接将&lt;a&gt; 放入&lt;table&gt;

【讨论】:

  • 你是对的 - stackoverflow.com/questions/6439649/… - 但你可能被低估了,尽管你是正确的,因为你的答案没有太多的细节和解释。
  • 抱歉,我刚刚遇到了这个问题。祝你有美好的一天:)
【解决方案2】:

由于源页面确认锚点位于您放置它们的位置,但浏览器会移动它们,您可以: - 在 td 表格单元格中包含您的链接 - 使用另一种方法将链接添加到您想要的位置html - table row like a link

【讨论】:

  • 我在您链接的页面上使用了 javascript 方法,但在 javascript 中转义字符串时遇到了另一个问题。 \" 仍然允许字符串转义。
  • 我需要更多细节,但试试这个:stackoverflow.com/questions/17551867/…
  • echo '&lt;tr onclick="document.location = \\"category.php?id=' . htmlspecialchars($row['catID']) . '\\"&gt;'; 输出为 Imgur.com
  • \\" 将输出 \"。所以试试 \" 这将输出 ".
  • 或者更好的是,用转义单引号替换第二组双引号:3v4l.org/PKR9t
猜你喜欢
  • 2020-11-25
  • 2015-03-06
  • 2016-04-24
  • 2016-12-23
  • 1970-01-01
  • 2017-05-28
  • 2011-05-25
  • 2016-03-14
  • 1970-01-01
相关资源
最近更新 更多