Php 使用多个选择选项编辑选择选项

Php 使用多个选择选项编辑选择选项,php,html,Php,Html,在类型的多个选择中遇到一些问题 在我的CRM脚本中,我存储了客户访问详细信息的数据,以及销售人员如何访问的数量。这是我的参观桌 visit_id | customer | visit_date 1 | 4 | 2020-05-16 2 | 3 | 2020-05-20 我将参加销售人员的详细信息存储在一张表中,请访问以下与会者 id | visit_id | attendees 1 | 1 | 1 2 | 1

在类型的多个选择中遇到一些问题

在我的CRM脚本中,我存储了客户访问详细信息的数据,以及销售人员如何访问的数量。这是我的参观桌

visit_id | customer | visit_date
1        | 4        | 2020-05-16
2        | 3        | 2020-05-20 
我将参加销售人员的详细信息存储在一张表中,请访问以下与会者

id | visit_id | attendees
1  | 1        | 1
2  | 1        | 3
3  | 1        | 4
4  | 2        | 3
5  | 2        | 2
<?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> 
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);
}

}
这里是我从表销售人员处获得的与会者ID

sid | fname  | lname  
1   | ABC    | CDS
2   | XYZ    | AAA
3   | ZZZ    |
4   | CDE    | H  
存储不是问题。但在编辑时,我希望将这些值设置为选中值,并且仅在添加了额外值或删除了已显示的值时才存储这些值。我不知道怎么做

现在我对这样的转弯方法做得很对

id | visit_id | attendees
1  | 1        | 1
2  | 1        | 3
3  | 1        | 4
4  | 2        | 3
5  | 2        | 2
<?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> 
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);
}

}

有没有其他直接的方法来实现这一点

我不确定是否要更新MySQL表,但如果您不是通过这些字段进行查询,我建议您将与会者ID保存在json中,而不是一行一行。这意味着您只有一行需要更新并将许多查询保存到数据库中

Json并不是在MySQL中保存的最佳选项,但如果您是按id而不是按与会者id进行查询,这将非常适合您

这样,您需要将与会者ID保存在数组中,然后将其更新到如下字段:

"UPDATE visit_attendies SET attendees = '".json_encode($attendies_arr)."' where visit_id = '".$vid."'"
然后,当您选择他们时,您将进行json_解码并获取与会者的id。

该字段应该是文本字段。

我在json编码或解码方面非常差,有没有其他不使用json的方法?我想有其他方法,尽管json并不复杂。先对数组进行编码,然后对数组进行解码。您一直在使用基本php数组。mysql中的json看起来像一个javascript数组,没有什么特别之处。例如,具有3个值3,5,7的数组将类似于[3,5,7]。就这样。唯一需要考虑的是,当您使用json_decode($json,true)时,您应该为第二个参数设置true,以便它将其作为php数组而不是std类返回。