【问题标题】:Removing the variables in url删除url中的变量
【发布时间】:2012-07-11 16:53:24
【问题描述】:

在我被告知查看其他类似的帖子之前,请注意我已尝试应用它们但无济于事。

我需要在一系列 if 语句为真后清除 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&amp;name=box9color

所以我想删除 ?box_1_color=%23800080&name=box9color 部分。我怎么能在代码说“//添加一些删除url字符串的东西”的地方删除它,以便在启动下一个代码块时它不会立即在url中使用相同的颜色代码运行,然后用户才能选择他们的下一个颜色?

我希望我的问题很清楚(我理解这令人困惑)并且我希望它是可以回答的。谢谢。

【问题讨论】:

标签: php html get


【解决方案1】:

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

  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 中的所有 &lt;form&gt; 元素,以便它们读取:

<form method="post">

...显然将您的 PHP 代码中出现的所有 $_GET 更改为 $_POST

【讨论】:

  • 我希望我可以有多个投票按钮!刷新问题真的很值得注意!
  • 这很有帮助,而且似乎有效,但问题是当页面自行刷新时,$_SESSION['passlevel'] = '1'; 行不起作用或再次调用原始 $_SESSION['passlevel'] = '0'; 行,无论是第一个条件语句,即调用 $_SESSION['passlevel '] 等于 0 再次运行,而它需要运行第二个条件,即要求 $_SESSION['passlevel'] 等于 1。
  • 当页面重新加载时,$_SESSION['passlevel'] 在 php 标记的顶部再次设置为 0。这使得第一个条件块运行,无论他们点击了多少次颜色。我如何定义“passlevel”,这样用户就不会一遍又一遍地运行第一段代码?
  • @ryno 将第一行更改为if (empty($_SESSION['passlevel'])) { $_SESSION['passlevel'] = '0'; },以便在尚未设置时才初始化为0。
  • 差不多了,现在的问题是,当我选择紫色方块时,它会重新加载页面,但仍然显示回显“使用您的锁色密码登录”。但是,然后当我单击橙色(下一个正确的颜色)时就可以了...为什么在运行第二个语句时仍然显示第一个条件的 else 语句?
【解决方案2】:

你能用 POST 代替 GET 吗?您在 PHP 中使用 $_POST 而不是 $_GET,您永远不必担心 URL 中的内容 - 它总是干净的。

【讨论】:

  • 我想这是可能的,但是当我用 POST 替换 GET 时,我什么也得不到,php 不会运行,只显示原始 else 语句“echo”使用您的锁色密码登录。“;”所以我需要你解释一下如何在上述情况下实现它。另外,应用 POST 是否可以解决第二组条件语句在 url 中仍以第一种颜色运行的问题?
  • 您还需要更新 submit() 函数以使用 POST。否则 submit() 正在使用 GET 并且您的 PHP 正在使用 POST 并且不会得到任何结果。如果您需要帮助更改它,您可能需要发布 submit() 函数。如果使用 POST,则不会在 URL 中传递任何参数。
【解决方案3】:

试试

unset($_GET['box_1_color']);

在您的代码的适当位置

【讨论】:

  • 这不起作用 - OP 想从 URL 中隐藏它 - 而不是从脚本中隐藏。不过,您的代码应该在取消设置项目时做到这一点。
猜你喜欢
  • 1970-01-01
  • 2012-12-22
  • 2021-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多