复选框,只发送特定的行到php表单解析器


Checkbox to send only specific rows to php form parser

我试图使用php的形式。

我从数据库中填充表单信息。

表单输入被分成几行。

表单提供了一个复选框,只传递那一行数据,应该发生的是,当我在表单解析文档中解析数据时,我只得到被检查的行。

然而,实际情况是,复选框数组的$_POST方法将只返回选中的内容,但所有其他输入数组仍然包含所有行,甚至是未选中的行。

<?php

while($row = mysql_fetch_assoc($query)){
    $id = $row["id"];
        $email = $row["user_email"];
    $androidId = $row["user_androidid"];
    $amount = $row["amount"];
    echo "<tr>
    <td><input id='data_id' name='data_id[]' size='25'  value='".$id."'/></td>
    <td><input id='mail' name='mail[]'size='25' value='".$email."'/></td>
    <td><input id='androidId' name='androidId[]' size='25' value='".$androidId."'/></td>
    <td><input id='amount' name='amount[]' size='25' value='".$amount."'/></td>
    <td>coming soon...</td>
    <td><input id='currency' name='currencyCode[]' size='25' value='USD'/></td>
    <td><input type='checkbox' name='chosen[]' value='".$id."'<td>
    </tr>";

}
?>

我像这样测试它:

for($i=0; $i<count($_POST["chosen"]); $i++){
echo $_POST["chosen"][$i];
}
for($i=0; $i<count($_POST["mail"]); $i++){
echo $_POST["mail"][$i];
}

对于一个特定的例子,现在我有三行,我"检查"第一行和最后一行。

当我解析表单数据时,复选框数组只返回第一个和最后一个的值,但是如果我尝试解析邮件[],它具有第1、2和3行的所有值。

关于如何正确配置这个有什么想法吗?我确定结构有问题,只是想确认一下。

尝试通过给它们相同的键将输入数组连接在一起,在本例中为$id -

while($row = mysql_fetch_assoc($query)){
    $id = $row["id"];
        $email = $row["user_email"];
    $androidId = $row["user_androidid"];
    $amount = $row["amount"];
    echo "<tr>
    <td><input id='data_id' name='data_id[".$id."]' size='25'  value='".$id."'/></td>
    <td><input id='mail' name='mail[".$id."]'size='25' value='".$email."'/></td>
    <td><input id='androidId' name='androidId[".$id."]' size='25' value='".$androidId."'/></td>
    <td><input id='amount' name='amount[".$id."]' size='25' value='".$amount."'/></td>
    <td>coming soon...</td>
    <td><input id='currency' name='currencyCode[".$id."]' size='25' value='USD'/></td>
    <td><input type='checkbox' name='chosen[".$id."]' value='".$id."'/><td>
    </tr>"; 
}

然后在post中你只能得到被检查过的数组-

foreach($_POST["chosen"] as $key=>$value){
     echo $_POST["data_id"][$key];
     echo $_POST["mail"][$key];
     echo $_POST["androidId"][$key];
     echo $_POST["amount"][$key];
     echo $_POST["currencyCode"][$key];
     echo $_POST["chosen"][$key];
}

也许这是一个更好的结构,这样您将拥有一个以id为键的值数组,以及一个包含所选键的选定值数组。还要检查html错误,如<td><input type='checkbox' name='chosen[]' value='".$id."'<td>

echo "<tr>
<td><input id='data_id' name='".$id."[data_id]' size='25'  value='".$id."'/></td>
<td><input id='mail' name='".$id."[mail]' size='25' value='".$email."'/></td>
<td><input id='androidId' name='".$id."[androidId]' size='25' value='".$androidId."'/></td>
<td><input id='amount' name='".$id."[amount]' size='25' value='".$amount."'/></td>
<td>coming soon...</td>
<td><input id='currency' name='".$id."[currency]' size='25' value='USD'/></td>
<td><input type='checkbox' name='chosen[]' value='".$id."'/></td>
</tr>";

现在PHP用于测试:

if ( !empty($_POST['chosen']) ) {
    foreach ( $_POST['chosen'] as $value ) {
        print_r( $_POST[$value] );
    }
}

我建议您执行var_dump($_POST)并查看您总体上发送的内容,因为它使我感到惊讶(除非我误解了),您正在获取复选框选中的行的信息(并且只有该信息)。对于初学者来说,如果你没有在输入类型中指定"type",默认类型将是"text"。这意味着您可以编辑该文本框中的任何内容,因此当您点击提交按钮时(无论您是否选中了中的一个复选框),每个文本框中的所有值都将被发送。

有多种方法可以完成您需要的操作(仅处理属于已选中复选框的行的信息)。

Javascript帮助:

  1. 添加一个名为disable()的函数,该函数将在提交按钮被按下时被调用。这个函数负责检查未选中复选框行的值,并将文本框设置为"禁用",这样它们就不会被发送到服务器。

这样做的好处是,只有与选中的复选框相关的信息才会被发送,并且您不必担心在服务器中进行过滤。

Cosn,如果你不习惯javascript,这显然是没有帮助的。

PHP服务器端:

我刚刚看到了Sean的答案,这是一个很好的答案,如果你想在服务器上验证,你可以这样做。只是让我警告你,尽管用户可以编辑你的文本框数据,例如,把它空着或添加他喜欢的东西,当他发送它,你试图通过$_POST[input_name][$key]访问它,你不会得到你已经从服务器建立的。