2014-02-05 23 views
2

По сути, я пытаюсь обновить несколько строк MySQL, используя массив, который я получил от переменной $_POST, называемой «единицами». Застрял, пытаясь понять это. Это то, что я до сих пор:

Текущий код, который оленья кожа добавить к 2-го лица:

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

Почему вы ставите '#' перед значениями? Если вы этого не сделали, вы можете просто использовать значения post в качестве данных для вставки в базу данных. – Barmar

+0

О, так что без # в значении я мог бы просто отправить прямые данные прямо, и он обновит каждого пользователя, назначенного его «занятому» столбцу? – CaptainThrills

+0

Не изменил столбец занятости 2-го пользователя. Только изменил первый. Также ему пришлось добавить некоторые тяжелые проверки, потому что он добавлялся ко всем, но второй человек – 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

Получение этой ошибки: Неизвестный столбец '$ in_units' в 'where clause' – CaptainThrills

+0

Исправлено, у меня был неправильный тип кавычек, чтобы переменная не была заменена. – Barmar

+0

Спасибо - это сработало отлично! – CaptainThrills

0

Я думаю, что ваш HTML-код отсутствует «форма» тег. Каждый тип «ввода» в html должен находиться внутри тегов «форма» и «/ форма», которые определяют метод отправки формы (POST или GET) и то, что является местом назначения (какой файл php), определенный « действие ".

+0

Я думаю, что он просто не показал это в своем отрывке кода. – Barmar

+0

Да, я оставил остальную информацию о форме, так как она не была актуальной. но метод формы POST и действие отправляется на нужную страницу – CaptainThrills

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