我将有一个返回一组结果的查询,这些结果将以超链接形式出现,如下所示:
echo "<td><a href='abc.php?cif=" . $row['cif'] . "'>{$row['cif']}</td>";现在,用户可以点击这个超链接并被路由到abc.php?cif=$cif..
我的问题是,是否可能只向用户显示 abc.php ,就像POST方法一样,而$cif在abc.php上仍然可用?
发布于 2015-03-10 14:43:36
正如@Flosculus上面所说,模拟post请求的“最佳”解决方案是这样做:JavaScript发布请求就像表单提交一样
然而,尽管它确实是一个可靠的解决方案,但我想知道您只是不使用会话,比如:
在设置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'];但是,请记住,隐藏字段是客户端可以编辑的(但是大多数人都无法编辑它),因此在检索数据时也应该对数据进行清理。
发布于 2015-03-10 14:34:20
会话可以这样做,但我建议只使用帖子。我不明白你为什么不想使用POST。
https://stackoverflow.com/questions/28966308
复制相似问题