Php 将post数据导入数组

Php 将post数据导入数组,php,sql,Php,Sql,我有一个页面bottom1.php,它有16个选择菜单,标签为rating1-rating16。 当用户提交此表单时,下一页将显示如下脚本: //pulling data from post into array. import_request_variables("p", "form_"); $scores= array($form_rating1,$form_rating2,$form_rating3,$form_rating4,$form_rating5,$form_rating6,$f

我有一个页面bottom1.php,它有16个选择菜单,标签为rating1-rating16。 当用户提交此表单时,下一页将显示如下脚本:

//pulling data from post into array.
import_request_variables("p", "form_"); 
$scores= array($form_rating1,$form_rating2,$form_rating3,$form_rating4,$form_rating5,$form_rating6,$form_rating7,$form_rating8,$form_rating9,$form_rating10,$form_rating11,$form_rating12,$form_rating13,$form_rating14,$form_rating15,$form_rating16);
//putting array into session
$_SESSION['scores']=$scores;
$fpage=$_SESSION['scores'];
$spage=$_SESSION['scores2'];

$score1 = $fpage['0'];
$score2 = $fpage['1'];
$score3 = $fpage['2'];
$score4 = $fpage['3'];
$score5 = $fpage['4'];
...
$score31 =$spage['13'];
$score32 =$spage['14'];
$score33 =$spage['15'];
然后将用户定向到另一个页面,在该页面上进行另外16个选择,然后运行相同的脚本,只是这次数组作为scores2存储到会话中

向用户显示每个数组的输出,然后当用户确认值正确时,将解析出scores和scores2数组的每个成员,将其放入另一个变量,然后插入数据库

我知道这是实现这一目标的原始方法,但这是我知道的唯一方法

这种方法适用于5.2.13的php配置,但是我切换到了5.1.6配置的服务器,现在这个脚本不起作用了。此脚本对我的站点至关重要。谢谢你的帮助

解析脚本如下所示:

//pulling data from post into array.
import_request_variables("p", "form_"); 
$scores= array($form_rating1,$form_rating2,$form_rating3,$form_rating4,$form_rating5,$form_rating6,$form_rating7,$form_rating8,$form_rating9,$form_rating10,$form_rating11,$form_rating12,$form_rating13,$form_rating14,$form_rating15,$form_rating16);
//putting array into session
$_SESSION['scores']=$scores;
$fpage=$_SESSION['scores'];
$spage=$_SESSION['scores2'];

$score1 = $fpage['0'];
$score2 = $fpage['1'];
$score3 = $fpage['2'];
$score4 = $fpage['3'];
$score5 = $fpage['4'];
...
$score31 =$spage['13'];
$score32 =$spage['14'];
$score33 =$spage['15'];

然后我将$score1-$score33插入我的数据库。

我现在没有一个php环境来测试这一点,但这应该可以工作:

  $scores = array();
    for($i=1;array_key_exists("form_rating{$i}",$_POST);$i++){
      $scores[] = $_POST["form_rating{$i}"];
    }

编辑:我测试和工作的方式并不完全安全,同样的原因register\u globals是个坏主意。如果您碰巧在其中一个内部变量前面加上“form_u2;”,用户可能会覆盖该值,并根据该变量的使用方式可能插入有害代码

更好的方法是使用或将数组直接过滤到新数组中

Oliver A.的解决方案仅适用于所有数组键都采用“form_rating”形式的场景,但您的原始脚本假定前缀为“form_”

preg_grep可按如下方式使用:

$keys = preg_grep('/^form_/', array_keys($_POST));
$scores = array();
foreach ($keys as $key) {
  $scores[$key] = $_POST[$key];
}

如果PHP更改版本时脚本不起作用,则:

检查以查看错误 检查是否有任何函数或控件结构更改导致脚本停止。 在5.1和5.2之间切换时,我经常遇到的一个问题是Elvis操作符?:这在PHP5.1中是无法识别的


这就是为什么在服务器具有的同一种配置上进行开发很重要,或者实施单元测试和自动部署,以便在投入生产之前检测到此问题。

以何种方式不起作用?是否有错误报告/登录,如果有,您会收到哪些错误?如果没有,你能打开它吗?您需要对此进行更多的调试,因为代码中没有要求PHP版本超过5.1.6的内容。另外,顺便说一句,您可以通过命名post变量rating[0]、rating[1]等来发布数组。我不确定,因为我不是服务器管理员,是否存在限制会话的设置?因为我将在上面编辑它,所以我的输出在数据库中都是0。array_key_exists返回一个布尔值,您不能在for@Elzo真的吗?for循环中的第二个表达式必须返回布尔值!我刚刚测试了代码,它工作正常,我有一个小的打字错误。我用3'r'编写数组你知道for循环是如何工作的吗?我没有看到条件中的$I,我认为它将永远运行。请看,我将添加该保护,但似乎我的数组没有成功提交,除非我从会话中错误地调用了数组,否则您是否正在调用会话\u start;在你申请的开始?可能旧服务器已设置为自动启动会话,而新服务器未设置。