【问题标题】:Turn MySQL results into link then redirecting to next page with POST将 MySQL 结果转换为链接,然后使用 POST 重定向到下一页
【发布时间】:2013-10-27 02:52:54
【问题描述】:

我正在尝试将我的数据库结果(用户)转换为可点击的链接,然后将显示有关所选用户的更多信息。现在我正在使用 $_GET,但用户 ID 将显示在地址栏中。有没有办法让我发布它?

目前,我有:

//fetch and display the results in table
while ($row = mysqli_fetch_array($result, MYSQL_ASSOC)){
  $name = $row["name"];
  $id = $row["id"];

//prepare user for GET statement  
echo ' <div><a href=mylink.php?id="'.htmlspecialchars($row['id']).'">'.$row['name'].'</a></div> ';} 

这显示:www.mylink.php?=id"12345"

我不想显示 ID。那么纠正这个问题的最佳方法是什么?谢谢

【问题讨论】:

  • 您是否尝试过使用POST?您也可以尝试使用 Ajax。
  • 恕我直言,显示id应该没问题。
  • 您可以创建一个唯一的随机字符串并将其存储在一个表中,类似于 URL 缩短器的工作方式。但正如 ihsan 所说,显示 id 很常见,通常不是大多数人关心的话题。
  • 使用GET 方法的可能/潜在问题是,如果输入/变量没有针对注入进行适当的清理,那么它可能会出现问题。
  • 显示 id 有什么顾虑?安全?美学?

标签: php mysql session post get


【解决方案1】:

您必须创建一个表单和一个脚本来发布您的数据。像这样的:

<?php
while ($row = mysqli_fetch_array($result, MYSQL_ASSOC)){
  $name = $row["name"];
  $id = $row["id"];

//prepare user for GET statement  
echo "<div><a href=\"#\" onclick='javascript:postIt(".htmlspecialchars($row['id']).");'>".$row['name']."</a></div> ";
}

?>
<script>
 function postIt(value){
   document.forms[0].id.value = value;
   document.forms[0].submit();
 }
</script>
<form name="blah" action="mylink.php" method="post">
<input type="hidden" name="id">
</form>

【讨论】:

  • 它在onclick&lt;a标签document.forms[0].submit();调用
  • 啊,我明白了。那么这是否意味着我可以使用 $_POST[id] 在下一页上检索 POST 值?
【解决方案2】:

您可以用小表单替换所有超链接:

<form action='mylink.php' method=post>
  <input type=hidden value='$id'>
  <input class='post_link' type=submit value='$name'>
</form>

CSS 将帮助您重新设置链接等按钮的样式:

.post_link {
    background-color: transparent;
    border: none;
    border-bottom: solid 1px blue;
    color: blue;
    display: inline;
    height: ...;
    etc
}

打开新标签将无法再次使用,并且悬停时您将看到没有任何状态栏。

【讨论】:

  • 要在新窗口中打开,只需添加到表单中:target="_blank"
  • @SergeSeredenko 语法不正确。它可能适用于某些浏览器,但有些浏览器实际上会在没有 post 周围的引号的情况下拒绝它
  • @Fred-ii- 谁告诉你的? Html 不会强制引用属性,除非有一些特殊字符,如空格、引号等。
  • @SergeSeredenko 相信我,我以前见过这种情况,这就是我总是使用引号的原因。
  • @Fred-ii- 我不喜欢引用具有预定义可能值的属性,以便 IDE 不会将它们突出显示为字符串:它有助于查看哪些属性实际保存了我的数据,哪些是只是标记。而且我敢打赌,您找不到 a) 不超过 5 年的浏览器,c) 无法在 html 中使用 method=post,d) 被地球上超过 10 万人使用。 =)
猜你喜欢
  • 1970-01-01
  • 2012-08-29
  • 2011-08-15
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 2011-08-10
  • 1970-01-01
相关资源
最近更新 更多