2015-06-03 5 views
0

Добрый день StackOverflowers,Foreach принимает последний пункт ввода текстового поля

У меня довольно простой вопрос. (Я думаю :))

Каждый раз, когда я отправляю форму со многими другими полями ввода, она принимает последнее значение поля ввода.

У меня была аналогичная проблема, месяц назад, но я установил ее как-то .. Я просто не могу решить эту проблему ..

Ниже вы можете увидеть мой HTML форму. (Нет разметки, я знаю)

<?php 

include_once("database.php"); 

$sql = "SELECT * FROM statements"; 
$stmt = $db->prepare($sql); 
$stmt->execute(); 

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); 
foreach($rows as $row){ 
echo "<b>"; 
echo $row['question']; 
echo "<br/></b>"; 



    $sqlA = "SELECT * FROM question_answer WHERE question_id =" . $row['id']; 
    $stmtA = $db->prepare($sqlA); 
    $stmtA->execute(); 
    $rowsA = $stmtA->fetchAll(PDO::FETCH_ASSOC); 
     echo "<form id='modify' name='modify' action='modify.php' method='POST'> 
     <div id='answers'>"; 
    foreach($rowsA as $rowa){ 
     if($rowa['correct_answer'] == 1){ 

     $rowAnswer = $rowa['answer']; 
     $rowId = $rowa['question_id']; 
     echo "<input type='text' checked value='" . $rowAnswer . "' name='" . $rowId."' style='background:lightgreen;'><br/>"; 
     echo "</div>"; 
    } 
    else{ 
     $rowFalseId = $rowa['question_id']; 
     echo "<input type='text' value='" . $rowAnswer . "' name='" . $rowFalseId."'><br/>"; 
    } 




} 

} 
?> 

<input type='submit' name='modify_answers' value="Modify Answers"> 
</form> 

Ниже вы можете увидеть мой обновленный запрос;

<?php 
include_once("database.php"); 

// foreach($_POST as $val){ 
//  print_r($val); 

// } 


$sql = "SELECT * FROM statements"; 
$stmt = $db->prepare($sql); 
$stmt->execute(); 

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); 
foreach($rows as $row){ 

    $sqlA = "SELECT * FROM question_answer where question_id =" . $row['id']; 
    $stmtA = $db->prepare($sqlA); 
    $stmtA->execute(); 
    $rowsA = $stmtA->fetchAll(PDO::FETCH_ASSOC); 

    foreach($rowsA as $rowa){ 
     foreach($_POST as $id => $value){ 
     $update = "UPDATE question_answer SET answer = '".$value."' WHERE question_id ='". $id."'"; 
     $stmt = $db->prepare($update); 
     $stmt->execute(); 
    } 
} 
} 
?> 

Каждый раз, когда он отправляется в файл modify.php, он обновляет последнее значение поля ввода.

В примере, если у меня есть 16 полей ввода, это занимает 4, 8, 12 и 16-е значения поля ввода.

Так что проблема probaly с именем поля ввода, но это может быть также modify.php ..

Любая помощь appericiated! Я изо всех сил дней с этой простой проблемой :(

Заранее спасибо Ребята !!

+0

Просто напечатайте запрос вместо того, чтобы исполнять: вы сами можете разобраться в проблеме –

+0

Пробовал много раз без удачи :(Я борюсь, но это кажется простой проблемой. Но это все еще не fixed :( – Taykklan

+0

Исключить обновление цикла. Вместо обновления в цикле [проверить несколько обновлений в одном запросе] (http://stackoverflow.com/questions/20255138/sql-update-multiple-records-in-one- запрос) .Это, вероятно, решит вашу текущую проблему.Также вы очень уязвимы для SQL-инъекций. – Andrew

ответ

2

Я думаю, что я могу видеть, что здесь происходит. Вы должны переместить эту линию ...

$rowAnswer = $rowa['answer']; 

... так что это не входит в вашем if заявлении (переместить их вверх над ним). это только было назначено, в настоящее время, если $rowa['correct_answer'] == 1 вычисляет true.

+0

Нет, не повезло :(Это все тот же результат .. Все еще принимая последнее значение поля ввода. – Taykklan

+0

NB Он все равно должен находиться внутри цикла foreach, только не в пределах if, b Я думаю, вы это сделали. – d0ug7a5

+0

Исправлено. Ребята, у меня был $ rowa ['question_id'], который имел каждый раз тот же номер .. Это была проблема, я должен получить идентификатор вместо этого. Но в любом случае спасибо за помощь !! – Taykklan

1

это фиксированные ребята! Спасибо за вашу помощь .. @ d0ug7a5 спасибо за ans Это помогло мне. Но моя главная проблема заключалась в том, что я получал Question_id вместо id. Благодаря!!