将发布数据导入数组

时间:2011-01-20 07:18:49

标签: 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,$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;

然后将用户定向到另一个页面,其中进行另外16个选择,然后运行相同的脚本,只是这次将数组作为“scores2”存储到会话中。

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

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

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

解析脚本如下所示:

$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插入我的数据库..

3 个答案:

答案 0 :(得分:0)

我现在没有php环境来测试这个,但这应该可行:

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

编辑:我测试并且正在工作

答案 1 :(得分:0)

你这样做的方式并不完全安全,因为同样的原因,register_globals()是个坏主意。如果您碰巧使用'form_'为其中一个内部变量添加前缀,则用户可能会覆盖该值并可能注入有害代码(取决于该变量的使用方式)。

更好的方法是使用array_filter()preg_grep()将数组直接过滤到新数组中。

Oliver A.的解决方案仅适用于所有数组键都采用'form_rating'形式的场景,但原始脚本假设前缀为'form _'。

preg_grep可以按如下方式使用:

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

答案 2 :(得分:-1)

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

  1. 检查logs以查看错误
  2. 检查PHP Changelog是否有任何功能或控制结构更改我停止了您的脚本。
  3. 在5.1和5.2之间切换时,我遇到的一个问题是 Elvis运算符 ?:,这在php 5.1中无法识别。

    这就是为什么开发与服务器具有相同类型的配置,或实现单元测试和自动部署,以便在到达生产之前检测到这些问题的原因。

相关问题