2015-04-18 5 views
1

Ive получил цикл, который создает несколько полей выбора, как это:

enter image description here

Код, который генерирует selectboxes выглядит следующим образом:

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 

Здесь приходит сложная часть Мне нужно извлечь выбранные результаты из selectboxes, который содержит значения 'event_id,' won_team, 'score' и вставить в базу данных:

Im используя следующий код, чтобы извлечь выбранные результаты, которые я мог бы получить, чтобы работать, но при добавлении поля оценка я начал получать ошибки:

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] для массива $ wonScore и затем отправки этого запроса к базе данных, но я получаю сообщение об ошибке «array to строка преобразования "для массива $ wonScore.

UPDATE: $ winningScore содержит следующие значения, которые правильно на основе выбора оценка:

enter image description here

Любые предложения приветствуются

+0

Попробуйте использовать var_dump, чтобы увидеть, что происходит –

+0

'$ winScore' это массив. Вы выбираете так странно, 'score []' его использовали для нескольких опций, но вы потеряли атрибут 'multiple' – mcklayin

+0

@JoeDF, см. Обновление по вопросу, для результата var_dump() – Marilee

ответ

0

Вы используете вы приводите строки в виде строки, но они являются массивами.

Вы должны перебрать их

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

score является массивом, но вы не выбираете текущее значение. Поэтому, если вы замените $winningScore = $_POST['score'] ; на $winningScore = $_POST['score'][$key] ;, он должен работать.

Обратите внимание, что ваш код крайне небезопасен. Вы должны использовать подготовленные инструкции для защиты от SQL-инъекций. И вы не должны использовать mysql_*, так как он устарел с 2013 года, вместо этого используйте mysqli_* или PDO. Использование подготовленных операторов также имеет преимущество ускорения вашего кода, так как вам нужно только подготовить один раз, а затем выполнить несколько значений. Кроме того, если $team1 предоставляется любым пользователем, вы должны кодировать специальные символы для защиты от XSS.

+0

Тим спасибо! Однако, если я это сделаю, добавляется индекс массивов, для оценки, которую я считаю довольно странным ... Я буду продолжать играть – Marilee

Смежные вопросы