我根据MySQL数据库中数据的不同搜索条件在php中生成动态订单。 订单表单实际上是一个行项目列表,可能有几百个行项目。 每个订单项都将包含以下数据(模拟名称): 行#ItemID ItemName单位/包价格/单位。 除了从数据库中提取的上述数据外,我还添加了2个动态字段: 1.一个复选框,用于标识要订购的商品 2.输入有序数量的文本框
<?php
$row=0;
while($item = mysqli_fetch_array($result))
{
$row++;
$id = "$item[ProductID]";
$name = "$item[Name]";
$units = "$item[PerPack]";
$price = "$item[Price]";
echo "<tr>
<td align='center'>$row</td>
<td align='center'>$id</td>
<td>$name</td>
<td align='center'>$units</td>
<td align='center'>$price</td>
<td align='center'><input type=checkbox id=$row name=ReviewID[] value='$id' /></td>
<td align='center'><input type=text size=3 maxlength=3 id=$row name=ReviewQty[] /></td>
</tr>";
}
?>
然后订单表格由订单审核脚本处理。 经过大量的搜索和实验,我得出了以下脚本。
<?php
$keys_array = $_POST['ReviewID'];
$keys_count = count($keys_array);
$values_array = array_filter($_POST['ReviewQty']);
$values_count = count($values_array);
$order_array = array_combine($keys_array, $values_array);
if($keys_count != $values_count){
$status = 'Error';
$error_message = "ORDER Quatities Mismatch";}
// html code omitted
if($status == 'Error') echo $error_message;
//html code omitted
if($keys_count != $values_count) exit();
//html code omitted
while (list ($key, $val) = each ($order_array))
{
echo "<tr>
<td align='center'>...</td>
<td align='center'>$key</td>
<td>...</td>
<td>...</td>
<td align='center'>...</td>
<td align='center'>...</td>
<td align='center'>...</td>
<td align='center'>$val</td>
</tr>";
}
?>
我的解决方案的问题是,不检查每个选中的复选框在同一行中是否具有对应的数量值。 换句话说,如果我检查任何5个框并在任何5个文本框中输入值,它将通过测试。
我需要一张检查来验证复选框与qty值在同一行(line-item)中。 如果我可以解析所选复选框的所有行项目数据也会很棒,否则我需要在审阅脚本中执行另一个MySQL查询。
我无法获得每个键有2个值的数组。 任何帮助/改进将不胜感激。
TIA。
答案 0 :(得分:0)
通过实验FWIW我发现通过使用行号作为键,我可以匹配键并交叉检查两个键都相同的数组。
<td align='center'><input type=checkbox name=ReviewID[$row] value='$id' /></td>
<td align='center'><input type=text size=3 maxlength=3 name=ReviewQty[$row] /></td>
我还可以再次使用行号作为键,通过单独数组中的隐藏字段解析其他数据。
<td align='center'>$price</td><input type=hidden name=ReviewPrice[$row] value='$price' />
我现在要做的就是匹配键值,然后我只能提取我需要的数据。
我仍然对任何更好的解决方案感兴趣,o /明智的我希望其他人觉得这很有用 - 我知道我真的很难达到这一点。