在我被告知查看其他类似的帖子之前,请注意,我已经尝试过应用它们,但没有成功。
在一系列if语句为true之后,我需要清除url中的变量。我有以下代码:
<?php
$_SESSION['passlevel']='0';
if ($_SESSION['passlevel'] == '0')
{
if(isset($_GET['box_1_color']))
{
$color=$_GET['box_1_color'];
if($color == "#800080")
{
echo "you have passed step one.";
$_SESSION['passlevel'] = '1';
// add something that removes url string
}
else
{
echo "you didn't select purple.";
}
}
else echo "login with your colorlock passcode.";
}
if ($_SESSION['passlevel'] == '1')
{
if(isset($_GET['box_1_color']))
{
$color=$_GET['box_1_color'];
if($color == "#DD7500")
{
echo "you have passed step two.";
$_SESSION['passlevel']='2';
// add something that removes url string
}
else
{
echo "you didn't select orange.";
}
}
else echo "enter remaining colors.";
}
?>
这是针对与颜色相关的密码,在单击div后,10个div中的每一个的背景都会更改为10种颜色中的一种(请注意,一些回声现在只是作为一种调试方法存在)。信息通过多种形式发送到url:
<form>
<div id="box1" class="box" onclick='this.parentNode.submit()'></div>
<input type='hidden' name='box_1_color' value='<?php echo $box1color ?>'/>
<input type='hidden' name='name' value='box1color'/>
</form>
<form>
<div id="box2" class="box" onclick='this.parentNode.submit()'></div>
<input type='hidden' name='box_1_color' value='<?php echo $box2color ?>'/>
<input type='hidden' name='name' value='box2color'/>
</form>
<form>
<div id="box3" class="box" onclick='this.parentNode.submit()'></div>
<input type='hidden' name='box_1_color' value='<?php echo $box3color ?>'/>
<input type='hidden' name='name' value='box3color'/>
</form>
<form>
<div id="box4" class="box" onclick='this.parentNode.submit()'></div>
<input type='hidden' name='box_1_color' value='<?php echo $box4color ?>'/>
<input type='hidden' name='name' value='box4color'/>
</form>
<form>
<div id="box5" class="box" onclick='this.parentNode.submit()'></div>
<input type='hidden' name='box_1_color' value='<?php echo $box5color ?>'/>
<input type='hidden' name='name' value='box5color'/>
</form>
<form>
<div id="box6" class="box" onclick='this.parentNode.submit()'></div>
<input type='hidden' name='box_1_color' value='<?php echo $box6color ?>'/>
<input type='hidden' name='name' value='box6color'/>
</form>
<form>
<div id="box7" class="box" onclick='this.parentNode.submit()'></div>
<input type='hidden' name='box_1_color' value='<?php echo $box7color ?>'/>
<input type='hidden' name='name' value='box7color'/>
</form>
<form>
<div id="box8" class="box" onclick='this.parentNode.submit()'></div>
<input type='hidden' name='box_1_color' value='<?php echo $box8color ?>'/>
<input type='hidden' name='name' value='box8color'/>
</form>
<form>
<div id="box9" class="box" onclick='this.parentNode.submit()'></div>
<input type='hidden' name='box_1_color' value='<?php echo $box9color ?>'/>
<input type='hidden' name='name' value='box9color'/>
</form>
<form>
<div id="box10" class="box" onclick='this.parentNode.submit()'></div>
<input type='hidden' name='box_1_color' value='<?php echo $box10color ?>'/>
<input type='hidden' name='name' value='box10color'/>
</form>
选择其中一种颜色(紫色)后的url示例:http://localhost/colorlock/index.php?box_1_color=%23800080&name=box9color
所以我想删除?box_1_color=%23800080&name=box9颜色部分。我如何删除代码中写着"//添加一些删除url字符串的东西"的地方,这样当启动下一个代码块时,在用户选择下一个颜色之前,它不会立即在url中使用相同的颜色代码运行?
我希望我的问题是清楚的(我理解这是一个令人困惑的问题),我希望它是可以回答的。非常感谢。
您需要做以下三件事中的一件:
- 使用POST。这是个好主意,但最好还是与
- 处理完表单后,重定向到不带URL参数的同一页
- 使用ajax处理用户输入
其中最容易与现有代码集成的可能是1和2的组合。要做到这一点,请在您的评论处添加以下行:
header("HTTP/1.1 303 See Other");
header("Location: http://{$_SERVER['HTTP_HOST']}{$_SERVER['PHP_SELF']}");
exit;
并更改HTML中的所有<form>
元素,使其显示为:
<form method="post">
并且明显地将PHP代码中出现的所有$_GET
更改为$_POST
你能用POST代替GET吗?你在PHP中使用$_POST而不是$_GET,你永远不必担心URL中的内容——它总是干净的。
尝试
unset($_GET['box_1_color']);
在代码的一个变量位置