我已经构建了一个空的关联数组,其中的键名引用了提交的post数据。我可以很好地捕获后期数据,但是我在尝试实例化名与数组键匹配的变量时遇到了麻烦。
例如:
$insArray = array('rUsername'=>'', 'rPass'=>'', 'rQuestion'=>'', 'rAnswer'=>'', 'rFName'=>'', 'rLName'=>'', 'rBDateD'=>'', 'rBDateM'=>'', 'rBDateY'=>'', 'rHCheck'=>'', 'rHCeckOption'=>'', 'rEmail'=>'');
foreach($insArray as $key=>$value){
if (filter_input(INPUT_POST, $key) != ''){
$key = stripslashes(filter_input(INPUT_POST, $key));
$insArray[$key] = $key;
}
}第一行创建空数组,然后foreach循环这个数组。现在变得棘手了。
filter_input(INPUT_POST, $key)捕获与当前键匹配的post数据中的值,在本例中为rUsername。
$key是问题所在。我希望新变量的名称是关联键名,例如,我希望在第一次迭代中用$key替换$rUsername,在第二次迭代中用$rPass替换等等。我试过使用两个$$,但我知道这是不对的。以前从未试过这样做,但如果我能弄清楚,那会很有帮助的。
更新:
这是最后的代码,它是所提供的两个答案的组合。
if (isset($_POST['submit'])) {
//Build array of variables to be put into database
$insArray = array('rUsername'=>'', 'rPassword'=>'', 'rQuestion'=>'', 'rAnswer'=>'', 'rFName'=>'', 'rLName'=>'', 'rBDateD'=>'', 'rBDateM'=>'', 'rBDateY'=>'', 'rHCheck'=>'', 'rHCheckOption'=>'', 'rEmail'=>'');
foreach(array_keys($insArray) as $key){
$insArray[$key] = filter_input(INPUT_POST, $key);
$$key = filter_input(INPUT_POST, $key);
}
}给了我我想要的输出,谢谢各位!
发布于 2012-05-06 04:44:56
您根本没有访问$_POST,所以您所做的就是使用一些您自己定义的数组成员,对它们进行筛选,以查找有害的POST字符(为什么要插入您自己的代码?)然后从那些自定义的键值创建一个新的数组。
如果我猜到你想要什么,应该是这样的:
foreach(array_keys($insArray) as $key) {
$insArray[$key] = stripslashes(filter_input(INPUT_POST, $_POST[$key]));
}条纹斜杠的使用表明,您使用的是具有magic_quotes启用功能的braindead版本的PHP。您应该升级到PHP的现代版本和/或关闭它们。
发布于 2012-05-06 04:45:19
解决办法是改变
$key = stripslashes(filter_input(INPUT_POST, $key));至
$$key = stripslashes(filter_input(INPUT_POST, $key));请参阅http://www.php.net/manual/en/language.variables.variable.php
另外,请重新检查您的代码,这些代码正在执行一些错误。
发布于 2012-05-06 06:45:10
如果我对你的理解是正确的,我会建议你这样做:
$defaultValues = array('rUsername'=>'', 'rPass'=>'', 'rQuestion'=>'', 'rAnswer'=>'', 'rFName'=>'', 'rLName'=>'', 'rBDateD'=>'', 'rBDateM'=>'', 'rBDateY'=>'', 'rHCheck'=>'', 'rHCeckOption'=>'', 'rEmail'=>'');
$values = array_map('stripslashes', array_merge($defaultValues, array_filter($_POST)));
extract($values, EXTR_SKIP);
echo $rUsername;
echo $rPass;
.........通过使用上面的片段,您必须考虑到以下几点
https://stackoverflow.com/questions/10468130
复制相似问题