2014-12-17 4 views
0

Я пытаюсь обновить же поле над различными строками, используя PDO и MYSQL, я создать таблицу с заявлением, а затем передать идентификатор & «результат» (обновление статуса) в php, следующий код для моей таблицы, но когда я перехожу к обновлению, сначала он сообщает мне, что существует множество параметров привязки, даже когда я вводим значение для всех полей, сгенерированных таблицей, и он по-прежнему не обновляет таблицу!Multiple Mysql обновления в одном запросе

<form action='' method='POST'> 
<table width="auto" class="table table-bordered table-hover"> 
    <tr> 
<th class='col-md-1'>ID</th> 
<th class='col-md-1'>User ID</th> 
<th class='col-md-1'>Name</th> 
<th class='col-md-1'>Date submited</th> 
<th class='col-md-1'>Date Requested</th> 
<th class='col-md-1'>Status</th> 
</tr> 

<?php 
$sql = "SELECT * FROM data"; 
$sth = $pdo->query($sql); 
$count= $sth->rowCount(); 
while($row = $sth->fetch()) { 

echo "<tr>"; 
echo "<td>" . $row['id']. "</td>"; 
echo "<td>" . $row['user_id']. "</td>"; 
echo "<td>" . $row['Name']. "</td>"; 
echo "<td>" .$row['Date_submited']. "</td>"; 
echo "<td>" .$row['Date_requested']. "</td>"; 
echo "<td>" .$row['Status']. "</td>"; 
echo "<td> <select name='Status[]' value=''> <option disabled selected='true'>Please  Select</option> <option value='denied'>Denied</option> <option value='approved'>Approved</option> </td>"; 
echo "<input type='hidden' name='id[]' value='".$row['id']."' />"; 
echo "</tr>"; 
} 

?> 
<td>  <input type='submit' name='approve' class='btn btn-default' value='submit'/></td> 
</table> 
</form> 

И это мой запрос на обновление:

if (isset($_POST['approve'])){ 
$result = $_POST['Status']; 
$id = $_POST['id']; 
$a = count($id); 
try{ 
$sth = $pdo->prepare('UPDATE data 
           SET 
           Status = :Status 
               WHERE id = :id    
           '); 
$i = 0; 
while ($i < $a) { 
    $sth->bindParam(':Status', $result[$i]); 
    $sth->execute(); 
    $i++; 
    } 
    } 
    catch(PDOException $e) { 
    echo "I'm sorry, but there was an error updating the database."; 
    file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND); 
} 
} 
+2

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

+0

"Статус =: Статус WHERE id =: id" где второй параметр в этом запросе? – Dan

+0

: Статус один,: id - второй. –

ответ

1

У вас есть цикл в неправильном месте, и вы должны связать все ваши параметры запроса -

if (isset($_POST['approve'])){ 
    // loop through results of post array 
    for($i = 0; $i < count($_POST['id']); $i++) { 
     $result = $_POST['Status'][$i]; 
     $id = $_POST['id'][$i]; 
     try{ 
      $sth = $pdo->prepare('UPDATE data SET Status = :Status WHERE id = :id'); 
      $sth->bindParam(':Status', $result); 
      $sth->bindParam(':id', $id); 
      $sth->execute(); 
     } 
     catch(PDOException $e) { 
      echo "I'm sorry, but there was an error updating the database."; 
      file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND); 
     } 
    } 
} 
+0

Нет одновременного обновления нескольких записей, например, пользователь может выбрать одновременное утверждение 5 записей, а затем нажать кнопку «Отправить», обновив записи более чем в одной строке! – Dan

+0

, если у вас есть неопределенные смещения, теперь это потому, что действие не передало переменные. Посмотрите на свой базовый HTML на первой странице и убедитесь, что переменные помещаются так, как вы ожидаете. Вы никогда не выполняете запрос на этой странице. –

+0

Есть ли способ сделать этот код без необходимости обновления каждой записи за один раз? – Dan

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