2013-02-09 101 views
1

假设我有以下PHP代码,它尝试从名为$arr的数组中读取数据,该数组的值为 {全名,学号,电子邮件}。在提交我的HTML表单后,此PHP代码将执行foreach循环,并将发布到页面的值存储在$_SESSION数组中。表单提交:在foreach循环中的PHP S_SESSION语句

foreach($arr as $field): 
    $_SESSION[$field] = $_POST[$field]; 
endforeach; 

上述代码不能按预期工作。如果我要用下面的代码替换上面的代码块,我的页面上的字段中的值将正确存储在$_SESSION阵列中。

$_SESSION[fullname] = $_POST[fullname]; 
$_SESSION[studentnumber] = $_POST[studentnumber]; 
$_SESSION[email] = $_POST[email]; 

如何以高效和可扩展的方式实现这一目标?我不希望每次向表单添加新字段时都必须编写新的$ _SESSION语句。

编辑://第一个代码块实际上按预期工作。最初有一个错字!

+0

你有什么_should_工作,提供'$ arr'填充作为数组'$ ARR =阵列('全名','studentnumber','email')' – 2013-02-09 00:41:15

+0

鉴于你有没有引号的数组键,我们必须假设你没有打开错误报告,所以在你的代码中可能会有一些其他问题。 '的error_reporting(E_ALL); ini_set('display_errors',1);'你会看到一堆关于使用未定义常量的通知..这些数组键应该像'$ _SESSION ['fullname']' – 2013-02-09 00:42:36

+0

一样被引用。 $ POST中有一个输入错误;它应该是$ _POST!不能相信我忽视了那一个。感谢Michael和@asifrc的回复。对不起,以琐碎的方式打扰你们。 – Kevcom 2013-02-09 02:11:10

回答

0

你想要的是使用array_keys()否则你会得到数组内容。

foreach (array_keys($arr) as $field) 

让我知道,如果这个工程/是你在找什么:)

+0

我在找的是在我的页面中使用字段元素的实际名称,而不是增量。在第二个代码块中,我使用变量_fullname_,_studentnumber_和_email_。我想从'$ _POST'中抓取这些值,并将其插入到foreach循环中的$ _SESSION数组中,就像它们的字段名一样。 – Kevcom 2013-02-09 01:12:32

+0

实际上,我的代码应该是'foreach(array_keys($ _ POST)'作为$ field)',但是如果您使用$ arr,那么这会更安全。你有没有@迈克尔的建议添加引号?我的第一个猜测是.. – asifrc 2013-02-09 01:33:17