分别排列的_POST变量的迭代次数

时间:2012-08-02 03:02:22

标签: php if-statement foreach

我在使用一个旨在将灯具插入体育联盟数据库的表格时遇到了一些麻烦。

上一页包含一个通过_POST“area”/“division”/“season”定义的表单,并包含一组fixture字段的迭代(到十个)循环,这些字段被定义为具有像“hometeam”这样的数组名称[$ i]“,”awayteam [$ i]“等等。

在处理灯具输入的页面上,我需要从$ _POST数组中插入表单的每个单独的迭代 - 即“hometeam [1]”“awayteam [1]”等等 - 并插入进入下一个之前进入MYSQL数据库。我完全沉迷于foreach和if条款所以我认为最好在这里问。

<?php
$a=1;
while($a<11){
foreach($_POST as $key){
if(is_array($key))
{foreach($key as $value1=>$value2){
    if($value1=$a){
    if($_POST='hometeam')$home_id=$value2;
    else if($_POST='awayteam')$away_id=$value2;
    else if($_POST='day')$day=$value2;
    else if($_POST='month')$month=$value2;
    else if($_POST='year')$year=$value2;
    else if($_POST='hour')$hour=$value2;
    else if($_POST='mins')$mins=$value2;}
    $date = ($year . "-" . $month . "-" . $day);
    $time = (($hour) . ":" . ($mins) . ":00");
    $enter_query = "INSERT INTO matches (home_id, away_id, date, time, league_id) VALUES ('$home_id', '$away_id', '$date', '$time', '$league_id'";
    if($hour != "00"){
$enter_result = mysql_query($enter_query);
}}}

}
$a++;
}
?>

如果有人能指出我在这里公然出错的地方,我会非常感激。我确信这并不意味着这么难,但我很慌张,不能看到我输入的内容,而且我不确定我的知识是否准确。

在阵列上运行print_r会给出以下结构:

Array ( [area] => 1 [season] => 2 [division] => 1 [hometeam]
=> Array ( [1] => 17 [2] => 2 [3] => 12 [4] => 17 [5] => 17
[6] => 17 [7] => 17 [8] => 17 [9] => 17 [10] => 17 ) [awayteam]
=> Array ( [1] => 6 [2] => 4 [3] => 10 [4] => 17 [5]

其中相同的10倍结构继续,阵列被索引为hometeam,awayteam,day,month,year,hour,mins。

1 个答案:

答案 0 :(得分:0)

$_POST是一个关联数组,因此可以通过键名访问其值,例如$_POST['hometeam']。这将包含每个hometeam[]值的数组。

我看到的第二件事是你需要记住=运算符用于赋值,而==用于比较。因此,如果($ value = $ a)将$ a分配给$ value并返回结果,而不是逻辑测试。

你应该考虑用select块替换if / else的大链。但这是可选的,我已经离开了你的例子。

我最后的建议是,你不必拥有空格,当它无法正常工作时,它确实能够更容易地审查代码。

我还没有测试过这段代码,但这就是我如何重做你所拥有的。

<?php
    $a=1;
    while ($a<11) {
        foreach ($_POST as $key => $value) {
            if (isarray($value)) {
                foreach ($value as $value1 => $value2) {
                    if ($value1 == $a){
                        if ($key == 'hometeam') { $home_id = $value2; }
                        else if($key == 'awayteam') { $away_id = $value2; }
                        else if($key == 'day') { $day = $value2; }
                        else if($key == 'month') { $month = $value2; }
                        else if($key == 'year') { $year = $value2; }
                        else if($key == 'hour') { $hour = $value2; }
                        else if($key == 'mins'){ $mins = $value2;}
                        $date = ($year . "-" . $month . "-" . $day);
                        $time = (($hour) . ":" . ($mins) . ":00");
                        $enter_query = "INSERT INTO matches (home_id, away_id, date, time, league_id) VALUES ('$home_id', '$away_id', '$date', '$time', '$league_id')";
                        if ($hour != "00"){
                            $enter_result = mysql_query($enter_query);
                        }
                }
            }

        }
        $a++;
    }
?>

我希望这至少让你走上正轨。

编辑:我稍微重构了一下。它不会检查表单上返回的内容(这是一个安全问题),但这超出了这个问题的范围..

<?php
    $a=1;
    while ($a<11) {

        $date = ($_POST['day'][$a] "-" . $_POST['month'][$a] . "-" . $_POST['day'][$a]);
        $time = ($_POST['hour'][$a] . ":" . $_POST['mins'][$a] . ":00");
        $hometeam = $_POST['hometeam'][$a];
        $awayteam = $_POST['awayteam'][$a];
        $enter_query = "INSERT INTO matches (home_id, away_id, date, time, league_id) VALUES ('$hometeam', '$awayteam', '$date', '$time', '$league_id')";
        if ($_POST['hour'][$a] != "00"){
            $enter_result = mysql_query($enter_query);
        }
        $a++;
    }
?>

我看不出联盟来自哪里。如果它是$ _POST的一部分,你可以用同样的方式引用它(如果它不是数组,那么不要使用[$ a])。