php 如何处理超链接,就像 POST 而不是 GET 一样


php how to handle hyperlink like a POST instead of GET?

我将有一个返回一组结果的查询,这些结果将以超链接形式出现,如下所示:

echo "<td><a href='abc.php?cif=" . $row['cif'] .  "'>{$row['cif']}</td>";

现在用户可以单击此超链接并路由到 abc.php?cif=$cif.。

我的问题是,是否可以像 POST 方法一样只向用户显示 abc.php,并且$cif在 abc.php 上仍然可用?

正如@Flosculus上面所说,模拟发布请求的"最佳"解决方案是做一些类似这里提出的事情: JavaScript post request 就像表单提交一样

但是,尽管它肯定是一个可靠的解决方案,但我想知道您只是不要使用会话,例如:

在设置 cif 变量的页面中:

session_start();
$_SESSION['cif'] = $row['cif'];

在 abc.php:

session_start();
if (isset($_SESSION['cif'])) {
   // Do what you need
}

编辑::

另一种(可能的)解决方案是设置隐藏输入并在单击锚点时静默提交表单,如下所示:

从您的示例中,而不是:

echo "<td><a href='abc.php?cif=" . $row['cif'] .  "'>{$row['cif']}</td>";

你这样做:

当您打印所有条目时,请先添加以下内容(来自 PHP):

<?php
echo <<<HEADER
    <form action="abc.php" method="post" id="submitAble">
    <input type="hidden" name="cif" id="cif" value="{$row['cif']}">
    <table>
HEADER;
     // Get data from your query.. Here is an example:
     while ($row = mysli_fetch_assoc($query)) {
         echo <<<ENTRY
      <tr>
          <td><a href="#" class="cifSetter" data-cif="{$row['cif']}">{$row['cif']}</a></td>
       </tr>
ENTRY;
     }
echo "</table> <!-- 'table collapse --></form> <!-- 'form collapse -->";
?>

然后,如果你使用的是jQuery(我推荐的东西),只需在javascript中添加一个事件侦听器,如下所示:

$('.cifSetter').on('click', function(e) {
   e.preventDefault();
   $('#cif').val($(this).data('cif'));
   $('#submitAble').submit();
});

如果你没有jQuery,请改用这个:

var cifSetter = document.getElementsByClassName('cifSetter');
for (var i = 0; i < cifSetter.length; i++) {
   cifSetter[i].addEventListener('click', function(e) {
      e.preventDefault();
      var cif = document.getElementById('cif');
      cif.value = this.dataset.cif;
      document.getElementById('submitAble').submit();
   });
}

在这两种方式中,每当单击锚点时,它都会阻止其标准行为(重定向),而是将隐藏字段的值设置为当前"cif"的值,并提交具有所需值的表单。

要从 abc.php 中检索所需的值,只需执行以下操作:

$cif = $_POST['cif'];

但是,请记住,隐藏字段由客户端编辑(尽管大多数人无法编辑它),因此您在检索数据时也应该清理数据。

会话可以做到这一点,但我建议只使用 _POST 美元。我不明白你为什么不想使用POST。