PHP MySQL 如何将资产审批列表行数据填充至对应审批表单页
实现选中行数据自动填充的方案
核心逻辑是通过URL查询参数携带选中行的全部资产字段,跳转至审批表单页后读取参数、自动填充对应输入框,全程不需要调整原有数据库查询逻辑。
一、修改资产审批列表页代码
1. 替换原有无参跳转的JS函数
原有的approval()函数固定跳转不带参数,需要改成支持接收当前行字段、自动拼接编码后参数的版本:
<script> function approval(cat, sn, model, oid, oname, desc){ // 用URLSearchParams做参数编码,自动处理特殊字符的转义,避免链接结构被破坏 const params = new URLSearchParams({ category: cat, serial: sn, model: model, owner_id: oid, owner_name: oname, desc: desc }) window.location.href = "AddAssetApproval.php?" + params.toString(); } </script>
2. 替换PHP循环中View按钮的渲染逻辑
原按钮点击时没有传任何参数,需要修改为把当前行的6个字段值作为参数传入JS函数,同时做转义避免单引号引发JS语法错误:
while ($row = mysqli_fetch_assoc($result)) { echo '<tr>'; echo '<td>'. $row['Category'].'</td>'; echo '<td>'. $row['SerialNumber'].'</td>'; echo '<td>'. $row['ModelName'].'</td>'; echo '<td>'. $row['OwnerID'].'</td>'; echo '<td>'. $row['OwnerName'].'</td>'; echo '<td>'. $row['Description'].'</td>'; // 替换原来的按钮代码 echo '<td><input type="button" value="View" onclick="approval( \''.addslashes($row['Category']).'\', \''.addslashes($row['SerialNumber']).'\', \''.addslashes($row['ModelName']).'\', \''.addslashes($row['OwnerID']).'\', \''.addslashes($row['OwnerName']).'\', \''.addslashes($row['Description']).'\' )"></td>'; echo '</tr> '; }
注意:如果字段值里包含单引号、反斜杠这类特殊字符,addslashes转义是必须的,否则会导致onclick里的JS字符串提前闭合,按钮直接失效。
二、修改AddAssetApproval.php表单页的输入框逻辑
原表单输入框没有默认值,需要在每个input的value属性中读取URL传递的参数,无参数时保持空值,同时做安全转义避免XSS风险:
<div class="title"> Add Asset Approval Form </div> <div class="form"> <div class="inputfield"> <label>Category</label> <input type="text" class="input" name="Category" value="<?php echo isset($_GET['category']) ? htmlspecialchars(urldecode($_GET['category'])) : '' ?>"> </div> <div class="inputfield"> <label>Serial Number</label> <input type="text" class="input" name="SN" value="<?php echo isset($_GET['serial']) ? htmlspecialchars(urldecode($_GET['serial'])) : '' ?>"> </div> <div class="inputfield"> <label>Model Name</label> <input type="text" class="input" name="Model Name" value="<?php echo isset($_GET['model']) ? htmlspecialchars(urldecode($_GET['model'])) : '' ?>"> </div> <div class="inputfield"> <label>Owner ID</label> <input type="text" class="input" name="OID" value="<?php echo isset($_GET['owner_id']) ? htmlspecialchars(urldecode($_GET['owner_id'])) : '' ?>"> </div> <div class="inputfield"> <label>Owner Name</label> <input type="text" class="input" name="OName" value="<?php echo isset($_GET['owner_name']) ? htmlspecialchars(urldecode($_GET['owner_name'])) : '' ?>"> </div> <div class="inputfield"> <label>Description</label> <input type="text" class="input" name="Desc" value="<?php echo isset($_GET['desc']) ? htmlspecialchars(urldecode($_GET['desc'])) : '' ?>"> </div> </div>
可选优化
如果存在描述字段过长、URL长度限制导致参数截断的问题,可以调整为仅传递当前行的主键ID(比如waiting_approval表的自增id字段),跳转后在表单页根据ID重新查询数据库拿到完整数据再填充,这种方式也能避免用户手动修改URL参数伪造资产数据,安全性更高。
内容的提问来源于stack exchange,提问作者Kin Wei
相关产品推荐
相关产品推荐

