2014-02-05 42 views
2

本質上,我試圖使用數組更新多個MySQL行,我從$_POST變量中獲得了一個名爲「units」的變量。一直試圖弄清楚這一點。這是我到目前爲止有:

目前代碼,這並不添加到第二個人:

if(isset($_POST['unit'])){ $units .= implode(', ', $_POST['unit']); } else { redirect('addcall.php?err=7'); } 

$my_s = $my->prepare('INSERT INTO `calls`(`call_taker`, `call_time`, `call_type`, `call_priority`, `call_location`, `call_city`, `reporter_name`, `reporter_num`, `call_info`, `units`) VALUES (?,?,?,?,?,?,?,?,?,?)') or die($my->error); 
$my_s->bind_param('sssisssiss', $name, $date, $c_type, $c_prio, $c_loc, $c_city, $r_name, $r_num, $c_info, $units) or die($my->error); 
$my_s->execute() or die($my->error); 
$my_s->close(); 
$my->close(); 
$my = new mysqli(HOST, USER, PASS, DB); 
$my_s2 = $my->prepare('UPDATE `users` SET `busy` = 1 WHERE `badge` = ? AND `enabled` = 1 AND `confirmed` = 1 AND `duty` = 1') or die($my->error); 
$my_s2->bind_param('s', $units) or die($my-error); 
$my_s2->execute() or die($my-error); 
$my_s2->close(); 
$my->close(); 
redirect('dashboard.php'); 

     <table> // table for checkboxes thats in main HTML area 
     <tr> <td>Units Available:&nbsp&nbsp&nbsp</td> 
     <?php 
     $my = new mysqli(HOST, USER, PASS, DB); 
     $my_s = $my->prepare('SELECT `name`, `badge` FROM `users` WHERE `duty` = 1 AND `busy` = 0'); 
     $my_s->execute(); 
     $my_s->store_result(); 
     if($my_s->num_rows == 0){ 
      echo "<td>None</td>"; 
     } 
     $my_s->bind_result($u_name, $u_badge); 
     while($row = $my_s->fetch()){ 
      echo '<td><input type="checkbox" name="unit[]" value="'.$u_badge.'">'.$u_name.' , #'.$u_badge.'&nbsp</td>'; 
     } 
     $my_s->close(); $my->close();?> 
     </tr> 
     </table> 
+0

你爲什麼要把'#'放在值的前面?如果你沒有這樣做,你可以使用後值作爲數據插入到數據庫中。 – Barmar

+0

哦,如果沒有#值,我可以直接發送直接後續數據,它會更新每個分配給其「忙」列的用戶? – CaptainThrills

+0

沒有更改第二個用戶繁忙的列。只改變了第一個。還必須添加一些重要的檢查,因爲它被添加到每個人,但第二人 – CaptainThrills

回答

0

您可以使用foreach循環更新$_POST['unit']中的每個徽章編號。或者你可以用它來構建一個IN測試中使用的值列表。不幸的是,你不能綁定一個參數,所以有必要明確地轉義它們。

if (isset($_POST['unit'])) { 
    $units = implode(', ', $_POST['unit']); 
    $my_s = $my->prepare('INSERT INTO `calls`(`call_taker`, `call_time`, `call_type`, `call_priority`, `call_location`, `call_city`, `reporter_name`, `reporter_num`, `call_info`, `units`) VALUES (?,?,?,?,?,?,?,?,?,?)') or die($my->error); 
    $my_s->bind_param('sssisssiss', $name, $date, $c_type, $c_prio, $c_loc, $c_city, $r_name, $r_num, $c_info, $units) or die($my->error); 
    $my_s->execute() or die($my->error); 

    $in_units = implode(', ', array_map(function($u) use ($my) { return "'" . $my->real_escape_string($u) . "'"; }, $_POST['unit'])); 
    $my_s2 = $my->prepare("UPDATE `users` SET `busy` = 1 WHERE `badge` IN ($in_units) AND `enabled` = 1 AND `confirmed` = 1 AND `duty` = 1") or die($my->error); 
    $my_s2->execute() or die($my-error); 
} 
+0

獲取此錯誤: 'where子句'中的未知列'$ in_units' – CaptainThrills

+0

已修復,我的引號類型錯誤,因此該變量未被替換。 – Barmar

+0

謝謝 - 這個工作完美! – CaptainThrills

0

我覺得你的HTML代碼中缺少一個「形式」的標籤。 html中的每一種「輸入」都需要放在一個「form」和「/ form」標籤中,這些標籤定義了表單發送的方法(POST或GET)以及目標(什麼是php文件),由「行動「參數。

+0

我想他只是沒有在他的代碼片段中顯示。 – Barmar

+0

是的,我遺漏了表格信息的其餘部分,因爲它沒有關聯。但是表單方法是POST並且動作被髮送到了正確的頁面 – CaptainThrills