1

我正在尝试使用带有 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];

}

对于一个具体的例子,我现在有三行,我“检查”第一行和最后一行。

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

关于如何正确配置它的任何想法?我确定结构有问题,只是在寻找确认。

4

3 回答 3

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>"; 
}

然后在帖子上,您只能获取已检查的数组 -

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];
}
于 2013-06-05T15:48:34.250 回答
1

也许这是一个更好的结构,这样您将拥有一个以 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] );
    }
}
于 2013-06-05T15:50:17.017 回答
1

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

有多种方法可以满足您的需要(仅处理属于选中复选框的行的信息)。

Javascript 帮助:

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

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

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

PHP服务器端:

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

于 2013-06-05T16:16:49.607 回答