2016-12-29 1 views
0

поэтому у меня динамически сгенерированной таблицыPhp обновление базы, если флажок не установлен

<tr> 
    <td><?php echo $row['RequestID']?></td> 
    <td><?php echo $row['FirstName'] . " " . $row['LastName']?></td> 
    <td><?php echo $row['DateRequested']?></td> 
    <td><?php echo $row['DateNeeded']?></td> 
    <td><?php echo $row['TotalPrice']?></td> 
    <td><?php echo $row['Company']?></td> 
    <td><?php echo $row['Account']?></td> 
    <td><?php echo $row['Brand']?></td> 
    <td><?php echo $quantity?></td> 
    <td><input type="checkbox" name="bill[]" value=<?php echo '"' . $row['RequestID'] . '"'; if($row['BillBack'] == "1") {echo "checked='checked'"; } ?></td> 
</tr> 

и я хочу, чтобы обновить базу данных, когда строка проверяется или бесконтрольно.

if(isset($_POST['submit'])){//to run PHP script on submit 
    if(!empty($_POST['bill'])){ 
    // Loop to store and display values of individual checked checkbox. 
    foreach($_POST['bill'] as $selected){ 
    echo "hello"; 
    $sql2 = "UPDATE Requests SET BillBack = '1' WHERE RequestID = '$selected'"; 
    $result2 = $conn->query($sql2); 

    }} elseif(empty($_POST['bill'])){ 
    // Loop to store and display values of individual checked checkbox. 
    foreach($_POST['bill'] as $selected){ 
    echo "hello"; 
    $sql2 = "UPDATE Requests SET BillBack = '0' WHERE RequestID = '$selected'"; 
    $result2 = $conn->query($sql2); 
    }} 

     } 

Теперь. Операция if работает как шарм. Для каждого установленного флажка в представлении эта запись обновляется. Проблема заключается в снятии флажков. Как вы можете видеть, отмеченные флажки найдены, находя то, что не пусто. Но, когда я удаляю этот восклицательный знак, это не делает фактически наоборот. Он также не работает, поскольку он является собственным, если утверждение, как прямое утверждение else, и проверка на! Isset. Это из-за того, что входы считаются проверенными? есть ли синтаксическая ошибка? Я сделал около 5 часов проверки ошибок, googling, и я не мог понять это. Спасибо, ребята

+0

Не используйте 'empty()' для флажков, используйте 'isset()'. –

+0

@ Fred-ii- подобный я сказал,! Isset() все еще не работает. isset() работает, чтобы установить флажки для проверки. но! isset() не устанавливает флажки для снятия флажка. – Sharkn8do

+0

Непроверенные флажки не публикуются. Таким образом, вам нужно найти другой способ узнать, какие флажки не были проверены, и соответственно сделайте свое обновление. – BizzyBob

ответ

0

Его очень просто: просто обновите ВСЕ свои записи до 0, затем установите 1 на те, которые отмечены.

//to run PHP script on submit 
if(isset($_POST['submit'])){  
    // Setting everyone to 0 
    $sql2 = "UPDATE Requests SET BillBack = '0'"; 
    $result2 = $conn->query($sql2); 

    // Setting only those checked to 1 
    if(!empty($_POST['bill'])){ 
     // Loop to store and display values of individual checked checkbox. 
     foreach($_POST['bill'] as $selected){ 
      echo "hello"; 
      $sql3 = "UPDATE Requests SET BillBack = '1' WHERE RequestID = '$selected'"; 
      $result3 = $conn->query($sql3); 
     } 
    } 
} 

EDIT:

Имейте в виду, что наличие запросов внутри Еогеасп может вызвать перегрузку на сервере, чтобы избежать этого, вы можете хранить идентификаторы записей, которые вы хотите обновить и использовать его в только один запрос за пределами foreach:

//to run PHP script on submit 
if(isset($_POST['submit'])){ 
    // Setting everyone to 0 
    $sql2 = "UPDATE Requests SET BillBack = '0'"; // Maybe add a WHERE clause, like BizzyBob pointed out 
    $result2 = $conn->query($sql2); 

    // Setting only those checked to 1 
    if(!empty($_POST['bill'])){ 

     // Initialize an array of selected ids 
     $selected_ids = array(); 

     // Loop to store individual checked checkboxes on array   
     foreach($_POST['bill'] as $selected){ 
      $selected_ids[] = $selected; 
     } 

     // Get the ids separated by comma 
     $in_clause = implode(", ", $selected_ids); 

     // Do only one sql query 
     $sql3 = "UPDATE Requests SET BillBack = '1' WHERE RequestID in (".$in_clause.")"; 
     $result3 = $conn->query($sql3); 
    } 
} 
+0

Обязательно добавьте предложение WHERE, чтобы не влиять на строки, которые не относятся к текущей транзакции. – BizzyBob

+0

СПАСИБО! Я сделал редактирование, на случай, если кто-то захочет скопировать и вставить, потому что первое использование $ sql vanilla - это начало цикла while, вызывающее ошибку fetch_assoc() при отправке. Кроме этого, это прекрасно, большое вам спасибо – Sharkn8do