正在删除url中的变量


Removing the variables in url

在我被告知查看其他类似的帖子之前,请注意,我已经尝试过应用它们,但没有成功。

在一系列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中使用相同的颜色代码运行?

我希望我的问题是清楚的(我理解这是一个令人困惑的问题),我希望它是可以回答的。非常感谢。

您需要做以下三件事中的一件:

  1. 使用POST。这是个好主意,但最好还是与
  2. 处理完表单后,重定向到不带URL参数的同一页
  3. 使用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']);

在代码的一个变量位置