我想用多选更新MySQL表。选项值在MySQL中。我的问题是,即使雇员拥有多个公司,多重选择也只显示一个公司。
Employee1有3个公司,但是在选择中,它仅显示1。我无法更新它。但是,如果一个员工有1家公司,并且我更改了它,那么我对其进行更新,则它可以工作。我如何才能在精选的所有公司中显示出雇员所拥有的,而不仅仅是1个?
我的表结构:
<form method="post" id="insert_form">
<label>Employee name:</label>
<input type="text" name="name" id="name" class="form-control" />
<br />
<label>Address:</label>
<textarea name="address" id="address" class="form-control"></textarea>
<br />
<label>Company:</label>
<select 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>
<br/>
<input type="hidden" name="employee_id" id="employee_id" />
<input type="submit" name="insert" id="insert" value="Insert" class="btn btn-success" />
</form>
<script>
$(document).on('click', '.edit_data', function(){
var employee_id = $(this).attr("id");
$.ajax({
url:"fetch.php",
method:"POST",
data:{'employee_id':employee_id},
dataType:"json",
success:function(data){
$('#name').val(data.name);
$('#address').val(data.address);
$('#company').val(data.company);
$('#employee_id').val(data.id);
$('#insert').val("Update");
$('#add_data_Modal').modal('show');
}
});
});
</script>
if(isset($_POST["employee_id"]))
{
$query = "SELECT employee.employee_id AS id, employee.name AS name, employee.address AS address, company.company_id AS company
FROM employee
LEFT JOIN employee_company ON employee.employee_id = employee_company.employee_id
LEFT JOIN company ON company.company_id = employee_company.company_id
WHERE employee.employee_id = '".$_POST["employee_id"]."'";
$result = mysqli_query($connect, $query);
$row = mysqli_fetch_array($result);
echo json_encode($row);
}
答案 0 :(得分:1)
您必须进行两件事:
我已经将您的ajax代码分为2个查询。第一个获取员工的数据,第二个获取他的公司。
if (isset($_POST["employee_id"])) {
$return = [];
$query = "SELECT * FROM employee WHERE employee_id = " . (int)$_POST["employee_id"];
$result = mysqli_query($connect, $query);
if ($employee = $result->fetch_assoc()) {
$companyIdList = [];
$query = "SELECT company_id FROM employee_company WHERE employee_id = $employee[id]";
$result = mysqli_query($connect, $query);
while ($company = $result->fetch_assoc()) {
$companyIdList[] = $company["company_id"];
}
$return = array_merge($employee, ["companies" => $companyIdList]);
}
echo json_encode($return);
}
然后替换此行:
$('#company').val(data.company);
使用以下代码:
$.each(data.companies, function(i, e) {
$("#company option[value='" + e + "']").prop("selected", true);
});
这将遍历公司ID数组,并相应地选择<option>
。
此外,在此行之后:
$(document).on('click', '.edit_data', function(){
插入此代码,以重置所选的<option>
:
$("#company option").prop("selected", false);