从多个selectBox获取多个$ _POST值

时间:2015-04-18 10:51:23

标签: php

我有一个生成多个选择框的循环:

enter image description here

生成选择框的代码如下:

while($row=mysql_fetch_array($result)){

    $team1 = $row['team1'];
    $team2 = $row['team2'];
    $id[$i]= $row['event_id']; 

    echo'<h3>'.$team1.' VS '.$team2.'</h3>';
    echo'<select name="id[]">'; //this is team winner selectbox
            echo'<option value="'.$row['team1'].'">'.$team1.'</option>';
            echo'<option value="'.$row['team2'].'">'.$team2.'</option>';
            echo'</select>';    

            echo'By <select name="score[]">'; //this is score selectbox
            echo'<option value="1">1</option>';
            echo'<option value="2">2</option>';
            echo'<option value="3">3</option>';
            echo'<option value="4">4</option>';
            echo'<option value="5">5</option>';
            echo'<option value="6">6</option>';
            echo'</select>';    
}//while

我需要从selectbox中提取所选结果,这是一个棘手的部分,其中包含'event_id,'winning_team,'score'的值并插入到数据库中:

我使用以下代码提取选定的结果,我可以开始工作,但在添加得分字段后,我开始收到错误:

foreach($_POST['id'] as $key => $winner){
    echo  $winningScore = $_POST['score'] ;
    $winnerb = $id[$key];
    echo($winner."-".$winnerb);
    echo $winningScore;
    $sql="INSERT INTO picks(member_nr,event_id,pick,score)
            VALUES('$userId','$winnerb','$winner',$winningScore)";
            mysql_query($sql) or trigger_error(mysql_error()." in ".$sql);
}//for

我的自然假设是在forloop中添加一个forloop,但这将导致内部循环执行多次迭代,因此我使用将$ POST ['score']值分配给数组$ winningScore的逻辑然后将其发送到数据库查询,但我得到$ victoryScore数组的“数组到字符串转换”错误。

更新: $ winningScore包含以下值,根据分数选择正确:

enter image description here

欢迎任何建议

2 个答案:

答案 0 :(得分:0)

您将结果行用作字符串,但它们是数组。

你需要遍历它们

$length = count($winningScore);
for ($i = 0; $i < $length; $i++) {
  print $winningScore[$i]; //do stuff 
}

答案 1 :(得分:0)

score是一个数组,但您没有选择当前值。因此,如果您将$winningScore = $_POST['score'] ;替换为$winningScore = $_POST['score'][$key] ;,它应该有效。

请注意,您的代码非常不安全。您应该使用预准备语句来防止SQL注入。并且您不应该使用mysql_*,因为它自2013年以来已被弃用,而是使用mysqli_*PDO。使用预准备语句还有加快代码速度的好处,因为您只需准备一次,然后可以使用多个值执行。此外,如果$team1以任何方式提供用户,则应编码特殊字符以防止XSS。