редактирование опции выбора с опцией множественного выбора - PullRequest
0 голосов
/ 29 мая 2020

Возникла проблема с множественным выбором типа.

В моем сценарии CRM я храню данные о посещениях клиентов с указанием количества продавцов, которые их посетили. Вот моя таблица посещений

visit_id | customer | visit_date
1        | 4        | 2020-05-16
2        | 3        | 2020-05-20 

и данные о продавцах, которые я храню в таблице visit_attendees, например

id | visit_id | attendees
1  | 1        | 1
2  | 1        | 3
3  | 1        | 4
4  | 2        | 3
5  | 2        | 2

здесь идентификаторы посетителей, которые я получаю из таблицы sales_persons

sid | fname  | lname  
1   | ABC    | CDS
2   | XYZ    | AAA
3   | ZZZ    |
4   | CDE    | H  

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

Теперь я правильно делаю метод поворота, подобный этому

<?php  
$m1 = DB_query("SELECT sp.id, sp.fname, sp.lname, va.attendees FROM sales_persons sp INNER JOIN visit_attendees va ON sp.id=va.attendees WHERE va.visit_id=".$VisitID.""); ?>
<h4>Attendies</h4>
<select name="attendees[]" class="form-control select2 is-invalid" multiple="multiple" required>
<?php while($m2 = DB_fetch_array($m1)) { ?>
  <option value="<?php echo $m2['id'];?>" selected="selected"><?php echo $m2['fname'].' '.$m2['lname'];?></option>
<?php } 
$st = "SELECT id, fname, lname FROM sales_persons";
$st1 = DB_query($st);
while($st2 = DB_fetch_array($st1)) {  ?>
  <option value="<?php echo $st2['id']; ?>"> <?php echo $st2['fname'].' '.$st2['lname']; ?> </option>
<?php } ?>
</select> 

, и обновляю таблицу visit_attendees следующим образом

if(isset($_POST['UpdateVisits']))
    {  

$vid = DB_escape_string($_POST['visit_id']);    
   $attendees = $_POST['attendees'];

//$l1 = "UPDATE visits SET ....";

$d1 = DB_query("DELETE FROM visit_attendeees WHERE visit_id=".$vid.""); 
    foreach($attendees as $attend)
{
$att =  "INSERT INTO visit_attendies(visit_id, attendees) VALUES(".$vid.", ".DB_escape_string($attend).")"; 
$att1 = DB_query($att);
}

}

есть ли какой-нибудь другой прямой способ добиться этого?

1 Ответ

0 голосов
/ 29 мая 2020

Я не уверен, хотите ли вы обновить свою MySQL таблицу, но в случае, если вы не запрашиваете эти поля, я бы предложил вам сохранить идентификаторы участников в json вместо одной строки для каждого один. Это означает, что у вас есть только одна строка для обновления и сохранения множества запросов к базе данных.

Json - не лучший вариант для сохранения в MySQL, но если вы запрашиваете по идентификатору, а не по идентификатор участников, который в значительной степени поможет вам.

Таким образом вам нужно будет сохранить идентификаторы участников в массиве, а затем обновить их в поле, например:

"UPDATE visit_attendies SET attendees = '".json_encode($attendies_arr)."' where visit_id = '".$vid."'"

А затем когда вы их выбираете, вы делаете json_decode и получаете идентификатор участников. Поле должно быть текстовым полем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...