2014-01-07 8 views
1

Может быть, я устал, может быть, я просто собираюсь сделать это неправильно, но что-то в этом случае не так.Неверная запись БД обновляется

Когда галочка отмечена, БД обновляется, но идентификатор $ id игнорируется и обновляется только первая запись с пустым столбцом pu_time. Предполагается, что это произойдет, когда галочка отмечена, текущее время вставляется в соответствующую запись с предоставленным идентификатором. Я могу повторить $ id, но он по-прежнему игнорируется.

Я успешно сделал эту работу с текстовым полем ....

$sql = "SELECT * FROM dispatch WHERE driver = '' OR pu_time = '' OR do_time = ''"; 
    $result = mysql_query($sql); 
      $i = 0; 
     $color1 = "#2b2823"; 
     $color2 = "#333333"; 
     while($row = mysql_fetch_array($result)){ 
      $id = $row['id']; 
      if($i%2 == 1) {$color = $color1;} 
       else {$color = $color2;} 

       echo "<tr style='background-color: $color'>"; 
       echo '<td><input name="id" type="hidden" value="'.$row['id'].'" />'.$row['call_time'].'</td>'; 
       echo "<td>".$row['start_address']."</td>"; 
       echo "<td>".$row['end_address']."</td>"; 
       echo "<td>".$row['phone']."</td>"; 
       echo "<td>".$row['puat']."</td>"; 
if (isset($row['pu_time']) === true && empty($row['pu_time']) === true){ 

         echo '<td> 
          <form id = "pu_time"> 
           <input name="pick_up_time" type="checkbox" value="" onchange="this.form.submit()" /> 
          </form></td>'; 
           if (isset($_GET['pick_up_time'])){ 
            $pick_up = date('g:ia'); 
            $update_p = "UPDATE dispatch SET pu_time = '{$pick_up}' WHERE id = '{$id}'"; 
            mysql_query($update_p,$con) 
            or die; 
            unset($_GET['pick_up_time']); 
            echo '<script type="text/JavaScript"> 
              window.location.href = "new_index.php"; 
              </script>'; 
            } 
         } 
         else { 
          echo "<td>".$row['pu_time']."</td>"; 
          } 
+1

Функции mysql устарели, используйте mysqli. – BuddhistBeast

+0

Вы должны действительно использовать подготовленные заявления PDO или mysqli. Конкатенация в SQL очень плохая и опасная. –

ответ

1

Только два изменения будет исправить вашу проблему:

Добавить в строке ID в скрытое поле, а затем представить:

<?php echo ' 
<td><form id = "pu_time"> 
    <input name="pick_up_time" type="checkbox" value="" onchange="if(this.checked)this.form.submit()" /> 
    <input name="rowId" type="hidden" value="'.$id.'" /> 
</form></td>'; 

И, конечно же, часть обновления БД будет вне цикла, чтобы избежать ненужного вызова DB, как мы перенаправлять на новую страницу (или же страницу):

if (isset($_GET['pick_up_time']) && !empty($_GET['rowId'])){ // must have id; 
    $pick_up = date('g:ia'); 
    $rowId = $_GET['rowId']; //mark this! 
    $update_p = "UPDATE dispatch SET pu_time = '{$pick_up}' WHERE id = '{$rowId}'"; 
    mysql_query($update_p,$con) 
    or die; 
    unset($_GET['pick_up_time']); 
    echo '<script type="text/JavaScript"> 
     window.location.href = "new_index.php"; 
     </script>'; 
} 

//and then write your code what is currently in the first line: $sql = "SELECT * FROM dispatch WHERE dr ...... and so; 
+1

Спасибо, спасибо, СПАСИБО !! Я был с этим с трудом, чтобы долго ... Теперь я могу ложиться спать! ;) – user3154948

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