PHP变量在header函数中的使用

5

我正在尝试使用header函数通过URL传递变量来重定向页面。但是当页面被重定向时,它传递的是实际的变量名,而不是与变量相关联的值。我是PHP的新手,对语法不是很了解,因此非常感谢任何进一步解释正确方法的帮助。

header('location: index.php?id=".$_POST[ac_id]."&err=".$login."');
6个回答

17
你想要:
header("Location: index.php?id=".$_POST['ac_id']."&err=".$login);

你在字符串中混合使用了单引号'和双引号",因此无法正确地插入变量。在我上面的示例中,您严格使用双引号"打开字符串,并将变量与字符串连接。


$_POST 中两个引号都丢失了 ;-) - zerkms
这会引起通知,因为数组键未加引号。 - Stephen
没有必要将字符串和变量连接起来,因为PHP会在双引号字符串中展开变量。 - Stephen
这是个人偏好问题,如果你想要挑剔微小的性能差异,可以参考这里(连接操作略快一些):https://dev59.com/BXVD5IYBdhLWcg3wVKEb#13665 - Mike Lewis
大多数我合作过的开发人员都认同这样一个观点:如果你想进行字符串拼接,就使用单引号;如果你想使用内联变量扩展,就使用双引号。 - Stephen

3

您的引号中包含引号。请尝试以下方法:

header('location: index.php?id=' . urlencode($_POST['ac_id']) . '&err=' . urlencode($login));

urlencode()函数可以处理url中的任何保留字符。

如果您认为在URL中有一个或两个以上的变量,我建议使用http_build_query().

header('Location: index.php?' . http_build_query(array(
    'id' => $_POST['ac_id'],
    'err' => $login
)));

此外,在location头中技术上不能使用相对路径。虽然它在大多数浏览器中可以工作,但根据RFCs规范,它是无效的。您应该包含完整的URL。


这里也是一样... $_POST 键名不需要加引号。 - zerkms

1
尝试使用SESSION存储。 header用于重定向页面。 如果您确实想要通过header传递值,则需要生成URL。 header('location:destination.php? value1=1&value2=3'); 但这不是变量的良好实践。 只需在header()重定向调用之前将值存储在SESSION全局变量中。 在接收页面上,您必须测试SESSION是否已设置且不为空,然后...或者...。 希望这可以帮助您。

-1
在我的情况下,很多时候header()函数不能正常工作。我会使用window.location.href代替header函数。你可以像这样尝试:
echo "<script> 
            window.location.href='index.php?id=".$_POST[ac_id]."&err=".$login';
      </script>";

-3
header('location: index.php?id='.$_POST['ac_id'].'&err='.$login);

$_POST 中两个引号都丢失了 ;-) - zerkms

-3

试试这个:

header("location: index.php?id=$_POST[ac_id]&err=$login");

PHP变量在双引号字符串中会被扩展。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接