【问题标题】:Checkbox to send only specific rows to php form parser仅将特定行发送到 php 表单解析器的复选框
【发布时间】:2013-06-05 14:47:36
【问题描述】:

我正在尝试使用带有 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 行的所有值。

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

【问题讨论】:

    标签: php html forms


    【解决方案1】:

    尝试通过为输入数组提供相同的键来将它们链接在一起,在本例中为$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];
    }
    

    【讨论】:

    【解决方案2】:

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

    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] );
        }
    }
    

    【讨论】:

      【解决方案3】:

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

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

      Javascript 帮助:

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

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

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

      PHP服务器端:

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

      【讨论】:

      • +1 我喜欢您关于在提交前使用 javascript 禁用的建议。我曾讨论过是否将其包含在我的答案中,但没有选择,因此我很高兴您发布了该建议。
      • Javascript 有时是一个真正的帮助。你的回答很棒,我没有意识到你可以这样做,你节省了大量的过滤,koodus!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-29
      相关资源
      最近更新 更多