从动态表单到脚本解析数组

时间:2014-07-14 05:41:21

标签: php

我根据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。

1 个答案:

答案 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 /明智的我希望其他人觉得这很有用 - 我知道我真的很难达到这一点。