【问题标题】:When trying to use windows.location.href , the values of $_POST[''] is lost尝试使用 windows.location.href 时,$_POST[''] 的值丢失
【发布时间】:2014-12-31 11:23:41
【问题描述】:

这是我的 php 脚本

    switch($x[0]){
        case 'categorias' :
                    $_POST['step'] = 'categorias';
                    $_POST['pais']=$_POST['pais'];
                    $_POST['method']=1;
                    ?><script>
                    window.location.href = "<?php echo $url ?>?step=categorias";
                    </script><?
                    break;
        case 'corredores':
                    $_POST['step'] = 'corredores';
                    $_POST['pais']=$_POST['pais'];
                    $_POST['method']=1;
                    ?><script>
                    window.location.href = "<?php echo $url ?>?step=corredores";
                    </script><?
                    break;
        default: //do something ;
}

当我尝试这样做时,我会丢失使用 POST[''] 变量发送的值,

任何人都可以帮我解决这个问题,我尝试使用 php header() 选项,但它正在产生标头已发送错误,

所以我使用了javascript

谁能帮我解决这个问题

提前致谢

【问题讨论】:

  • 您需要使用表单重新发布这些值。或者您可以使用 Session 或 cookie。
  • 首先,您通常不应该设置 $_POST 值。其次,即使整个概念有效,window.location.href 也会执行 GET 请求。您需要将值放入$url 或输出包含所需 POST 值的表单并使用 javascript 提交表单
  • @madforstrength 好的,所以我需要在 case 语句中添加一个 HTML 表单标签并发送它,这就是你的意思吗? .
  • 您将失去它,因为window.location.href 就像您通过在地址栏中传递 URI 来浏览任何页面一样。如果数据不大,您可以在查询字符串中传递数据
  • 如果您使用表单而不是使用location.href,则需要以编程方式提交。例如document.form1.submit();

标签: javascript php


【解决方案1】:

已经在这里回答jQuery - Redirect with post data

var redirect = 'Your Url here';
$.redirectPost(redirect, {x: 'example', y: 'abc'}); // your parametters

// jquery extend function
$.extend(
{
    redirectPost: function(location, args)
    {
        var form = '';
        $.each( args, function( key, value ) {
            form += '<input type="hidden" name="'+key+'" value="'+value+'">';
        });
        $('<form action="'+location+'" method="POST">'+form+'</form>').appendTo('body').submit();
    }
});

【讨论】:

  • 是两种不同的方法来完成这项任务吗? .
  • 小心,这是 XSS 漏洞。
【解决方案2】:

如 cmets 中所述,$_POST 不应手动设置,而应通过提交 form 生成。 您可以像这样将values 添加到 URL:

switch($x[0]){
    case 'categorias' :
                $step = 'categorias';
                $pais = $_POST['pais'];
                $method = 1;
                ?><script>
                window.location.href = "<?php echo $url ?>?step=$step&pais=$pais&method=$method";
                </script><?
                break;
    case 'corredores':
                $step = 'corredores';
                $pais = $_POST['pais'];
                $method = 1;
                ?><script>
                window.location.href = "<?php echo $url ?>?step=$step&pais=$pais&method=$method";
                </script><?
                break;
    default: //do something ;

如果您必须在其余代码中使用$_POST,您可以在发送它的 $url 处执行类似的操作。

$_POST['pais'] = $_GET['pais'];

等等。 或者,将您的 $_POST 引用替换为 $_REQUEST

【讨论】:

  • 对不起,我不清楚我必须使用 POST,因为我将值发送到具有大量 Post 验证的页面
  • 很公平:),我想我会接受变压器提供的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-03
  • 1970-01-01
相关资源
最近更新 更多