php 如何像 POST 一样处理超链接而不是 GET?
php how to handle hyperlink like a POST instead of GET?
我将有一个查询 return 一组结果,这些结果将以超链接形式显示如下:
echo "<td><a href='abc.php?cif=" . $row['cif'] . "'>{$row['cif']}</td>";
现在用户可以单击此超链接并转到 abc.php?cif=$cif..
我的问题是,是否可以只向用户显示 abc.php,就像 POST 方法,并且 $cif 在 abc.php?
处仍然可用
Sessions could do it but I'd recommend to just use $_POST。我不明白你为什么不想使用 POST.
正如@Flosculus 上面所说,模拟 post 请求的 "best" 解决方案正在执行此处建议的操作:JavaScript post request like a form submit
然而,尽管它确实是一个可靠的解决方案,但我想知道您是否只是不使用会话,例如:
从您设置 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'];
但是,请记住隐藏字段 是 可由客户编辑的(尽管大多数人无法编辑它),因此您也应该清理您的检索时的数据。
我将有一个查询 return 一组结果,这些结果将以超链接形式显示如下:
echo "<td><a href='abc.php?cif=" . $row['cif'] . "'>{$row['cif']}</td>";
现在用户可以单击此超链接并转到 abc.php?cif=$cif..
我的问题是,是否可以只向用户显示 abc.php,就像 POST 方法,并且 $cif 在 abc.php?
处仍然可用Sessions could do it but I'd recommend to just use $_POST。我不明白你为什么不想使用 POST.
正如@Flosculus 上面所说,模拟 post 请求的 "best" 解决方案正在执行此处建议的操作:JavaScript post request like a form submit
然而,尽管它确实是一个可靠的解决方案,但我想知道您是否只是不使用会话,例如:
从您设置 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'];
但是,请记住隐藏字段 是 可由客户编辑的(尽管大多数人无法编辑它),因此您也应该清理您的检索时的数据。