Обновите MySQL несколькими данными

0

Я хочу обновить таблицы с помощью multi select. Multi-выбор имеет данные MySQL. Он работает, если у сотрудника есть 1 компания, но если у него 2 или более, он не обновил его.

Изображение 174551

Я показываю текущие компании в меню выбора. Таким образом, у сотрудника № 1 есть 2 компании, но он не обновлял его, если я выбираю другое 2. Как я могу это решить? Employee_company - моя связанная таблица.

Выбор из нескольких вариантов

<select size="10" name="company[]" id="company" class="form-control" multiple>
   <?php 
      $query2 = "SELECT * FROM company GROUP BY company_id";  
      $result2 = mysqli_query($connect, $query2);  
      while($row2 = mysqli_fetch_array($result2)){
   ?>
   <option value="<?php echo $row2['company_id'];?>"><?php echo $row2['name'];?></option>
   <?php }?>
</select>

Обновить

$name = mysqli_real_escape_string($connect, $_POST["name"]);  
$address = mysqli_real_escape_string($connect, $_POST["address"]); 
$company = mysqli_real_escape_string($connect, $_POST["company"]);

$id = $_POST["employee_id"];

if($id != ''){             
    foreach($_POST['company'] as $comp){
        $query = "
        UPDATE      employee t1
        LEFT JOIN   employee_company t2 ON (t1.employee_id = t2.employee_id)            
        SET         t1.name='$name',
                    t1.address='$address',
                    t2.employee_id='$id',
                    t2.company_id='$comp'            
        WHERE       t1.employee_id='$id'"; 
    }               
       $message = 'Data Updated';            
  }  
  else{  
  }  
  if(mysqli_query($connect, $query)){  
       $output .= '<label class="text-success">' . $message . '</label>';  
  }  
  echo $output;
Теги:

1 ответ

3
Лучший ответ

company[] - это массив - вы должны ИМПЛОДИТЬ значения, если хотите, чтобы они были как строка.

 $company = mysqli_real_escape_string($connect, implode(",",$_POST["company"]));

Мой совет - пересмотреть модель данных и нормализовать ее - не помещать идентификаторы компаний в строку в столбце company_id и вместо этого использовать таблицу employee_companies для объединения ассоциаций между сотрудником и нулем/одним или несколькими компаниями.

ОБНОВИТЬ

Я имел в виду нечто подобное

"START TRANSACTION"
"UPDATE employee SET name = '$name', address = '$address' WHERE employee_id = $id"
"DELETE FROM employee_company WHERE employee_id = $id"

if(is_array($_POST["company"])) 
{
  $values = Array();
  foreach($_POST["company"] as $c_id) $values[] = "($id, $c_id)";

  "INSERT INTO employee_company(employee_id, company_id) VALUES ".implode(",", $values)
}
"COMMIT"
  • 0
    Спасибо, это работает! Я никогда не слышал о взрыва.
  • 0
    Implode и Explode являются фундаментальными инструментами при работе с массивами

Ещё вопросы

Сообщество Overcoder
Наверх
Меню