我有一个生成多个选择框的循环:
生成选择框的代码如下:
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包含以下值,根据分数选择正确:
欢迎任何建议
答案 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。