2016-05-19 2 views
0

Я пытаюсь отправить форму, содержащую расписание для каждого идентификатора пользователя. До сих пор это выглядит следующим образом:PHP Отправить входы Foreach() ID

$sql = "SELECT * FROM dbtable"; 
    $result = $conn->query($sql); 
    $name_info = "SELECT udidId, name FROM udid"; 
    $name_result = $conn->query($name_info); 
    if ($result->num_rows > 0) { 
     while($row = $result->fetch_assoc()) { 
      $udidId = $row["udidId"]; 
      echo "<label for='hours' class='schedule'><strong>I want <span>".$row["name"]."</span>"; 
      echo "<input type='text' name='udidId' class='hidden' value='".$row["udidId"]."' />"; 
      echo " to be <br />allowed out between <input type='text' name='outAllowedStartHour' placeholder='8' value='" . $row["outAllowedStartHour"] . "'> - <input type='text' name='outAllowedEndHour' placeholder='8' value='" . $row["outAllowedEndHour"] . "'><br />allowed in between <div class='padd_left'></div><input type='text' name='inAllowedStartHour' placeholder='8' value='" . $row["inAllowedStartHour"] . "'> - <input type='text' name='inAllowedEndHour' placeholder='8' value='" . $row["inAllowedEndHour"] . "'></strong></label>"; 
     } 
}  


if(isset($_POST["update_schedule"])) { 
     foreach($_POST as $key => $value) { 
      echo "POST parameter '$key' has '$value' <br />"; 
      while($row = $result->fetch_assoc()) { 
       foreach($value as $x => $x_value) { 
       echo "Key=" . $x . ", Value=" . $x_value; 
       echo "<br>"; 
       $update_pets = "UPDATE v_spottData SET $x_value = $x_value WHERE udidId = $x"; 
$conn->execute($update_pets); 
       } 
      } 
     } 

Однако только обновляя входы от последнего ID в базе данных, а не обновление входных значений на всех. Какие-либо предложения?

+0

введите ваш запрос $ conn-> ($ update_pets); после строки $ update_pets. –

+0

Спасибо @ Dr.Stitch, но это, похоже, ничего не решило – ColoursB

+0

Я не уверен, какую структуру вы используете, но попробуйте изменить $ conn-> query на $ conn-> execute. –

ответ

0

Я чувствую себя очень глупо, но для всех, кто имеет дело с проблемой, мое решение было простым.

Попробуйте помещать PHP для обработки представления формы в верхней части документа, а не снизу. Все работало нормально, как только я его поднял!

Спасибо за вашу помощь всем, особенно @ chris85!

+0

Код в вопросе не будет выполнен, даже если он перемещен в верхней части страницы. – chris85

0
  1. Execute не execute запрос, он выполняет подготовленный оператор. Для подготовки запроса вам необходимо использовать prepare.
  2. Подготовленные заявления должны использовать заполнители. Драйвер будет обрабатывать цитирование/экранирование.
  3. Столбцы примечаний не могут быть связаны/размещены.
  4. Ваш текущий запрос пытается обновить столбец с тем же значением, что не может быть прав. Измените $updating_column ниже на любой столбец, который вы пытаетесь обновить.

$columns = array('outAllowedStartHour', 'outAllowedEndHour', 'inAllowedStartHour', 'inAllowedEndHour'); // whitelist columns 
if(in_array($updating_column, $columns)) { 
    $update_pets = "UPDATE v_spottData SET `$updating_column` = ? WHERE udidId = ?"; 
    $stmt = $con->prepare($update_pets); 
    $stmt->bind_param("ii", $x_value, $x); 
    $stmt->execute(); 
} else { 
    echo 'Using a Not Allowed Column'; 
} 

Вы можете прочитать больше о подготовленных заявлений здесь, http://php.net/manual/en/mysqli.quickstart.prepared-statements.php.

+0

Спасибо @ chris85, как бы я извлек значение для столбца обновления и udidId в этом случае? – ColoursB

+0

Они должны быть '$ x_value, $ x'. – chris85

+0

вот так? '$ update_pets =" UPDATE v_spottData SET '$ update_column' = $ x_value WHERE udidId = $ x ";' – ColoursB