我想知道如何在没有任何形式和使用链接的情况下将一个(或几个)变量从一个页面传递到另一个页面。
我知道会话是最好的选择,但如何在以下场景中实现它:
删除 - > process.php 添加 - > process.php(与上面相同的页面)
我想传递一个隐藏变量,它告诉我点击了什么链接,从而调用了什么函数。无论如何不使用$ _GET并使用会话?!
谢谢,
答案 0 :(得分:2)
所有HTTP请求彼此独立。您有权访问的数据包括:
$_GET
)$_POST
)由于您反对使用$_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>
在process.php
脚本中,您将检查$_POST['action']
以查看它是否等于“添加”或“删除”。我添加的样式标记是我从SO用户adardesign
(*)中找到的关于如何设置按钮样式的链接。
编辑:要回答你关于是否可以使用会话来实现这一目标的问题,我会说这是可能的,但可能不值得。
我可能永远不会决定走这条路,但你可以做的是有一个AJAX请求,当用户点击其中一个链接时会触发。 AJAX请求将调用PHP脚本,该脚本将会话设置为“添加”或“删除”。在success
回调中,您可以将用户重定向到process.php页面,然后您可以在该页面中检查$_SESSION
变量的值。再次,这可能不值得这样做,但它 可能。
答案 1 :(得分:0)
在某些时候,您必须将一些数据传回服务器以指示您要操作的项目,但之后您可以将其保留在会话中。
例如,如果您从文章列表开始并且用户选择一个文章,则必须有一种方式来传达用户选择的文章。这通常通过链接上的参数完成,例如article.php?id=5
。当此id值提交给服务器时,您可以将其添加到$ _SESSION并以这种方式跟踪它。然后,您可以使用会话中存储的ID来决定编辑,删除等。当您的用户想要处理新文章时,他们会点击带有新id参数的链接,然后将该新ID分配给会话。
如果您担心安全性以及用户编辑或查看certian内容的权利,这还不够 - 您需要检查用户是否有权使用该内容执行操作每一步。接口请求查看文章,并且您的后端在提供内容之前验证是否允许用户这样做。界面请求删除文章,并且您的后端在完成之前验证是否正常。
答案 2 :(得分:0)
我认为ajax是一个选项(我使用自己的库来获取ajax请求,但我认为它们很容易理解,随意询问代码),但是你需要一个PHP文件来处理ajax请求:
<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>
PHP文件是这样的:
<?php session_start();
$_SESSION["action"] = $_POST["action"];
?>
然后,当导航功能重定向到process.php时,您已经将链接存储在会话变量中。
Ayway,如果你解释一下这种行为的目的,我们可能会找到一个更好的解决方案。
答案 3 :(得分:-1)
如果你使用隐藏变量,那么$ _GET不是解决方案。我建议如果您仍然想使用$ _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>
使用md5,您可以确定您的变量在某些方面至少为您的用户加密。
如何采取行动?
$action = $_GET['Action'];
if(md5('Delete')==$action){
/* Delete action */
}elseif(md5('Add')==$action){
/* Add action */
}