选择"未填充动态 ID'd 引导程序 4 模式"模式



我现在在哪里

我有一个HTML表,其中有许多行由SQL语句中的PHP foreach循环填充。表格的最后一列包含一个按钮下拉列表,其中一个是"分配车辆"。此按钮触发带有选择框的引导程序-4模式。该表是车辆列表,模态中的选择框是员工列表。

我想发生什么

用户单击表中的"Assign Vehicle"(分配车辆(。模式弹出,允许用户选择要分配的员工。vehicle_id和employee_id随后被传输到另一个页面进行处理。

代码


<table id="example23" class="display nowrap table table-hover table-striped table-bordered" cellspacing="0" width="100%"  data-order='[[ 3, "asc" ]]' data-page-length='25'>
<thead>
<tr>
<th class="text-center">Year</th>
<th class="text-center">Make</th>
<th class="text-center">Model</th>
<th class="text-center">Unit #</th>
<th class="text-center">Asset #</th>
<th class="text-center">Assignee</th>
<th class="text-center">Admin</th>
</tr>
</thead>
<tfoot>
<tr>
<th class="text-center">Year</th>
<th class="text-center">Make</th>
<th class="text-center">Model</th>
<th class="text-center">Unit #</th>
<th class="text-center">Asset #</th>
<th class="text-center">Assignee</th>
<th class="text-center">Admin</th>
</tr>
</tfoot>
<tbody>
<?php 
$a = 0;
$u = 0;
foreach ($vehicle->fetchAll() as $row){
$a++;
$u++;
?>
<tr>
<td style="text-align: center; vertical-align: middle;"><?php echo $row['Veh_Year']; ?></td>
<td style="text-align: center; vertical-align: middle;"><?php echo $row['Vehicle_Make_Make']; ?></td>
<td style="text-align: center; vertical-align: middle;"><?php echo $row['Vehicle_Model_Model']; ?></td>
<td style="text-align: center; vertical-align: middle;"><?php echo $row['Veh_Unit_No']; ?></td>
<td style="text-align: center; vertical-align: middle;"><?php echo $row['Veh_Asset_No']; ?></td>
<!--Creates Unassigned Tag for Vehicle if Database doesn't return a value for Assignee First Name  -->
<?php if (!empty($row['First_Name'])) { ?>
<td style="text-align: center; vertical-align: middle;"><a href="#"><?php echo $row['First_Name']; echo ' ' . $row['Last_Name']; ?></a></td>
<?php } else { ?>
<td style="text-align: center; vertical-align: middle;"><strong>Unassigned</strong></td>
<?php } ?>
<td style="text-align: center;">
<div class="btn-group">
<button type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Admin Action
</button>
<div class="dropdown-menu">
<?php if (!empty($row['First_Name'])) { ?>
<a class="dropdown-item" href="#" data-toggle="modal" data-target="#Unassign_<?php echo $u; ?>">Unassign Vehicle</a>
<?php } else { ?>
<a class="dropdown-item" href="#" data-toggle="modal" data-target="#Assign_<?php echo $a; ?>">Assign Vehicle</a>
<?php } ?>
<a class="dropdown-item" href="https://mailmelater.com/modify-vehicle.php?vehid=<?php echo $row['Veh_ID']; ?>">Modify Vehicle</a>
<a class="dropdown-item" href="https://mailmelater.com/retire-vehicle.php?vehid=<?php echo $row['Veh_ID']; ?>">Retire Vehicle</a>
</div>    
</td>
</tr>
<div class="modal fade" id="Unassign_<?php echo $u; ?>" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLongTitle">Unassign Confirmation</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
Are you certain that you would like to unassign the 
<span class="font-weight-bold"><?php echo $row['Vehicle_Make_Make']; echo ' ' . $row['Vehicle_Model_Model']; ?></span> 
from 
<span class="font-weight-bold"><?php echo $row['First_Name']; echo ' ' . $row['Last_Name']; ?></span>?
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary waves-effect waves-light" data-dismiss="modal">Cancel</button>
<button type="button" class="btn btn-info waves-effect waves-light">
<a class="text-white" href="https://mailmelater.com/includes/functions/fn-unassign-vehicle.php?vehid=<?php echo $row['Veh_ID']; ?>">Confirm</a>
</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="Assign_<?php echo $a; ?>" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLongTitle">Assign Vehicle to User</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<select name="check" class="select2 form-control custom-select" style="width: 100%;">
<?php foreach ($assign->fetchall() as $assignrow) { ?>                                      
<option value="<?php echo $assignrow['Emp_ID']; ?>">
<?php echo $assignrow['First_Name']; echo ' ' . $assignrow['Last_Name']; ?>
</option>
<?php } $assign->closeCursor(); ?>
</select>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary waves-effect waves-light" data-dismiss="modal">Cancel</button>
<button type="button" class="btn btn-info waves-effect waves-light">
<a class="text-white" href="https://mailmelater.com/includes/functions/fn-assign-vehicle.php?vehid=<?php echo $row['Veh_ID']; ?>">Confirm</a>
</button>
</div>
</div>
</div>
</div>
<?php } $vehicle->closeCursor(); ?>
</tbody>
</table>

问题

您将从代码中注意到,"Assign"模式ID是动态分配的。我觉得这是必要的,以便将相应行的车辆ID传递给模态。不幸的是,只要模态ID是动态分配的,这个解决方案只适用于第一条记录(或者当Veh_ID=1时(,对于任何其他行,模态显示为选择框,但没有结果,选择框为空。

即使使用动态分配的ID,"Unassign"模态也能很好地工作。从我的角度来看,这似乎只是选择框的问题,尽管我充其量只是一个新手程序员。

示例

两个功能都处于活动状态的示例页面。

在上面链接的页面上,对于表中的任何一行,如果您将鼠标悬停在"修改车辆"上,您可以在地址栏中看到ID。在车辆id不为1的任何车辆上单击"Assign Vehicle"(分配车辆(将导致模式中出现一个空的选择框。根据需要可以随意分配或取消分配。

查看您的示例页面的源代码,我看到您的模式等都被正确创建,唯一的问题是select中的员工列表仅第一次出现。那么,看看它是如何生成的——$assign。这就是问题所在。

检查文档中的fetchall():

fetchAll((返回一个数组,该数组包含结果集中的所有剩余行

注意剩余。在第一个表行中的第一次完整迭代之后,您已经检索到了所有结果。没有什么可拿的了。因此,在下一次迭代中,没有剩余的结果要获取,并且您得到一个空的<select>

如果您想再次从同一个查询中获取所有内容,则需要重新execute()该语句。

您的<select>在每一行中都是相同的。因此,与其重复检索结果,不如在主$vehicle表循环之外检索一次结果,并设置一个$select变量,然后在每行上检索echo

如果您想在每一行上预先选择合适的员工,以显示当前分配给谁,您可以在每行上添加一些preg_replace()

另一个注意事项-你也在使用:

$assign->closeCursor();

因此,也许您打算使结果集可滚动。文档描述了如何做到这一点,并确保在到达末尾后滚动回集合的开头。尽管AFAIK,但如果您只想检索部分结果,或者在完成第一个查询之前切换到处理不同的查询,则通常只需要这样做。你没有做这两件事,所以我不确定是否需要使用光标。

请注意,您的问题有几个元素,但每个元素在SO上或多或少都有重复。值得通读以下问题的所有答案,因为其中许多答案都很有帮助,并突出了问题的不同部分。

PDO多次提取同一查询

重置PDO结果中的数组指针

PDO语句何时应该使用closeCursor((?

最新更新