如何在PHP中获取MySQL查询后echo生成的表格表单内的指定输入值
问题:PHP中获取动态生成表单的对应输入值
问题描述
现有根据MySQL指标表动态生成的表单,提交后所有achievement输入框的值会在每个指标下重复输出,需要实现1个指标对应1个achievement值的效果。
现有代码
while ($row = mysqli_fetch_row($query)){ $_SESSION['id_kpi']=$row[0]; echo '<tr> <td> <span class="textarea" role="textbox" name="kpi'. ++$n .'" contenteditable>'.$row[1].'</span> </td> <td> <span style="margin-left:30px;"> <input type="text" name="achievement[]" id="achievement" style="width:30%"> </span> </td> </tr>'; if( isset( $_POST['submit'] ) ) { $idkpi = $row[0]; $achi = $_POST['achievement']; $items = array(); for($i = 0 ; $i < $count ; $i++){ $items[$i] = array( "achieve" => $achi[$i] ); } $value = array(); foreach($items as $item){ $value[] = "('{$item['achieve']}')"; } $values = implode(", ", $value); echo 'Your value is '.$values. '<br>'; }
问题根源
- 表单提交的处理逻辑被放在了遍历KPI的while循环内部,每遍历一行KPI数据就会执行一次提交处理,所以每次都会输出全部的achievement值,导致重复显示。
- 动态生成的achievement输入没有和对应KPI的唯一ID绑定,提交后无法直接匹配值对应的指标。
- 所有输入框都设置了相同的
id="achievement",属于不符合规范的HTML结构,也会影响后续取值逻辑。
修复方案
代码修改示例
// 提交处理逻辑放在循环外,仅执行一次 if( isset( $_POST['submit'] ) ){ $achi = $_POST['achievement']; $value = array(); foreach($achi as $kpi_id => $achieve_val){ // $kpi_id为对应指标ID,$achieve_val为该指标对应的输入值 $value[] = "('{$kpi_id}', '{$achieve_val}')"; } $values = implode(", ", $value); echo 'Your value is '.$values. '<br>'; } // 生成动态表单部分 $n = 0; while ($row = mysqli_fetch_row($query)){ $kpi_id = $row[0]; $_SESSION['id_kpi'] = $kpi_id; echo '<tr> <td> <span class="textarea" role="textbox" name="kpi'. ++$n .'" contenteditable>'.$row[1].'</span> </td> <td> <span style="margin-left:30px;"> <!-- 用KPI ID作为achievement数组的键,直接绑定对应关系 --> <input type="text" name="achievement['.$kpi_id.']" style="width:30%"> </span> </td> </tr>'; }
内容的提问来源于stack exchange,提问作者iyar
相关产品推荐
相关产品推荐

