在php中不使用表单和使用链接传递隐藏变量
我想知道如何在php中不使用任何形式,通过使用链接,将一个(或两个)变量从一个页面传递到另一个页面 我知道会话是最好的选择,但如何在以下场景中实现它: 删除->process.php 添加->process.php(与上面相同的页面) 我想传递一个隐藏变量,告诉我点击了什么链接,从而调用了什么函数。是否存在不使用$\u获取和使用会话的情况在php中不使用表单和使用链接传递隐藏变量,php,parameter-passing,session-variables,Php,Parameter Passing,Session Variables,我想知道如何在php中不使用任何形式,通过使用链接,将一个(或两个)变量从一个页面传递到另一个页面 我知道会话是最好的选择,但如何在以下场景中实现它: 删除->process.php 添加->process.php(与上面相同的页面) 我想传递一个隐藏变量,告诉我点击了什么链接,从而调用了什么函数。是否存在不使用$\u获取和使用会话的情况 谢谢,在某些时候,您必须将一些数据传回服务器,以指示您要操作的项目,但之后您可以将其保留在会话中 例如,如果您从一个文章列表开始,而用户选择了一个,那么您必须
谢谢,在某些时候,您必须将一些数据传回服务器,以指示您要操作的项目,但之后您可以将其保留在会话中 例如,如果您从一个文章列表开始,而用户选择了一个,那么您必须有一种方法来传达用户选择的文章。这通常是通过链接上的参数完成的,比如
article.php?id=5
。当此id值提交到服务器时,您可以将其添加到$\u会话中,并以这种方式跟踪它。然后,您可以决定使用存储在会话中的id进行编辑、删除等操作。当您的用户想要处理一篇新文章时,他们会单击带有新id参数的链接,然后您将该新id分配给会话
如果您担心安全性以及用户编辑或查看认证内容的权限,这是不够的-您需要检查用户是否有权在每个步骤中使用该内容执行操作。该接口请求查看文章,并且您的后端在提供内容之前验证是否允许用户这样做。界面请求删除文章,并且在完成之前,您的后端会验证这是否正常。如果您希望使用隐藏变量,那么$\u GET不是解决方案。如果您仍然想使用$\u GET,我的建议是使用md5哈希传递变量
<a href="process.php?Action=<?php echo md5('Delete');?>">Delete Action</a>
<a href="process.php?Action=<?php echo md5('Add');?>">Add Action</a>
所有HTTP请求都是相互独立的。您可以访问的数据包括:
$\u GET
)$\u POST
)$\u GET
请求,并且两个链接都指向同一页面,因此您需要其他方法来确定单击了哪个链接。我建议使用表单,并通过隐藏的输入类型传递数据
例如:
<form action='process.php' method='post'>
<input type='hidden' name='action' value='add' />
<button onClick='submit();'>
Add
</button>
</form>
<form action='process.php' method='post'>
<input type='hidden' name='action' value='delete' />
<button onClick='submit();'>
Delete
</button>
</form>
<style type='text/css'>
button {
background:none!important;
border:none;
padding:0!important;
border-bottom:1px solid #444;
cursor: pointer;
}
</style>
添加
删除
钮扣{
背景:无!重要;
边界:无;
填充:0!重要;
边框底部:1px实心#444;
光标:指针;
}
在process.php
脚本中,然后对照$\u POST['action']
检查它是否等于“添加”或“删除”。我添加的样式标签是我从SO useradardesign
(*)中找到的关于如何将按钮设置为链接样式的内容
编辑:要回答您关于是否可以使用会话来完成此任务的问题,我想说这是可能的,但可能不值得
我可能永远不会决定走这条路,但你可以做的是有一个AJAX请求,当用户点击其中一个链接时会被触发。AJAX请求将调用一个PHP脚本,该脚本将会话设置为“添加”或“删除”。在success
回调中,然后将用户重定向到process.php页面,在那里可以检查$\u会话
变量的值。同样,这样做可能不值得,但这是可能的
- CSS来源:
<script type='text/javascript'>
function navigate(event){
event.preventDefault();
var action=this.innerHTML;
var link=this.href;
jx.post("controller.php", {action:action}, {onComplete:function(response){
location.href=link;
}});
}
</script>
<a href="process.php" onclick='navigate(event)' action="add">Add</a>
<a href="process.php" onclick='navigate(event)' action="delete">Delete</a>
函数导航(事件){
event.preventDefault();
var action=this.innerHTML;
var link=this.href;
post(“controller.php”,{action:action},{onComplete:function(response){
location.href=link;
}});
}
PHP文件如下所示:
<?php session_start();
$_SESSION["action"] = $_POST["action"];
?>
然后,当navigate函数重定向到process.php时,该链接已经存储在会话变量中
Ayway,如果你解释这种行为的目的,我们可能会找到更好的解决方案。如果这是一个链接,你考虑过使用查询字符串变量吗?使用隐藏输入并通过
POST
传递它?最好使用表单(和“$\u POST”)并更改按钮中的链接。我喜欢这个想法。但是,我确实希望避免使用$\u GET!有什么解决办法吗?谢谢,我喜欢散列法。有没有可能不使用$\u GET方法?您可以使用$\u POST,但在这种情况下,您需要执行更多步骤。您需要让您的变量远离用户吗?也许我能为你找到更好的解决办法是的。我想去掉所有需要从用户那里传递的变量。我希望地址栏中没有显示任何内容。我建议您使用ajax和$\u POST,这样您就可以将变量发送到新页面,检查它,并随时向我寻求帮助:请接受我的建议。谢谢它在IE、Chrome和firefox上运行吗?希望如此!它在所有浏览器中都应该是好的。我现在在Mac电脑上,所以我不能测试IE,但我会对它充满信心。
<?php session_start();
$_SESSION["action"] = $_POST["action"];
?>