必须有一种更优雅的方式来做到这一点。
如何将所有非空的帖子数据转换为会话变量,而不逐行指定每一个?基本上,我想对POST数组中存在的所有X实例执行以下函数。
if (!empty($_POST['X'])) $_SESSION['X']=$_POST['X'];
我将逐一进行,但后来我认为必须有一个更优雅的解决方案
答案 0 :(得分:10)
我会指定一个可接受的POST名称字典。
$accepted = array('foo', 'bar', 'baz');
foreach ( $_POST as $foo=>$bar ) {
if ( in_array( $foo, $accepted ) && !empty($bar) ) {
$_SESSION[$foo] = $bar;
}
}
或者那种效果。我不会使用empty
,因为它会将0
视为空。
答案 1 :(得分:3)
语法错误,只是因为有一个括号仍然打开。它应该是
$vars = array('name', 'age', 'location');
foreach ($vars as $v) {
if (isset($_POST[$v])) {
$_SESSION[$v] = $_POST[$v];
}
}
应该那样工作。如果你使用
if ($_POST[$v])...
它删除了空数据。
答案 2 :(得分:2)
你走了,
if(isset($_POST) {
foreach ($_POST as $key => $val) {
if($val != "Submit")
$_SESSION["$key"] = $val;
}
}
答案 3 :(得分:1)
我建议的第一件事是不这样做。这是一个巨大的潜在安全漏洞。假设您依赖于username和/或usertype的会话变量(非常常见)。有人可以发布这些细节。您应该采用白名单方法,只需将已批准的值从$_POST
复制到$_SESSION
,即:
$vars = array('name', 'age', 'location');
foreach ($vars as $v) {
if (isset($_POST[$v]) {
$_SESSION[$v] = $_POST[$v];
}
}
如何定义“空”决定了你做什么样的检查。上面的代码使用isset()
。如果您不想写空字符串或数字0,也可以if ($_POST[$v]) ...
。
答案 4 :(得分:1)
这引出了我的一点,这是@ meder答案的简化版本:
<?php
$accepted = array('foo', 'bar', 'baz');
foreach ( $accepted as $name ) {
if ( isset( $_POST[$name] ) ) {
$_SESSION[$name] = $_POST[$name];
}
}
您也可以将!empty()
替换为上面的isset()
,但请注意@meder指出的更远的empty()
。
答案 5 :(得分:0)
$_SESSION["data"] = $POST;
$var = $_SESSION["data"];
然后只使用$ var作为post变量。例如:
echo $var["email"];
而不是
echo $_POST["email"];
干杯