【问题标题】:How to INSERT INTO using html checked boxes with PHP如何通过 PHP 使用 html 复选框插入 INTO
【发布时间】:2014-08-06 15:44:25
【问题描述】:

我需要什么

我在 html 表中的网页上显示了 Oracle 查询的结果。我还在每一行中为复选框添加了另一列。我的代码如下。

<?php

(...some code with Oracle Query...)

echo "<form method='post'>";
echo "<table>";

while($row = oci_fetch_array($sql)) {
    echo "<tr>";
    echo "<td>" . $row['SKU'] . "</td>";
    echo "<td>" . $row['DESCRIPTION'] . "</td>";
    echo "<td>" . $row['LOCATION_MAX'] . "</td>";
    echo "<td>" . $row['QUANTITY'] . "</td>";
    echo "<td><input type='checkbox'></td>";
    echo "</tr>";
}

echo "</table>";
echo "</form>";

(...some more code...)

?>


单击每一行的复选框时,我需要对另一个数据库中的 MySQL 表使用 INSERT INTO。
我无法思考我应该如何获取每一行的所有信息并将其传递给另一个脚本,以便我可以将数据插入 MySQL 表中。

我的尝试

我想我会将行的每个值存储在一个数组中,然后将其放入复选框value 属性中并使用name 属性引用它,如下所示:

...
echo "<input type='submit' name='submit' value='submit'>";
while($row = oci_fetch_array($sql)) {

    $rowVal = array(
        "SKU" => $row['SKU'],
        "DESCRIPTION" => $row['DESCRIPTION'],
        "LOCATION_MAX" => $row['LOCATION_MAX'],
        "QUANTITY" => $row['QUANTITY']
    );

    echo "<tr>";
    echo "<td>" . $row['SKU'] . "</td>";
    echo "<td>" . $row['DESCRIPTION'] . "</td>";
    echo "<td>" . $row['LOCATION_MAX'] . "</td>";
    echo "<td>" . $row['QUANTITY'] . "</td>";
    echo "<td><input type='checkbox' name='checkbox' value='" . $rowVal . "'></td>";
    echo "</tr>";
}


所以,我试图在脚本底部(或另一个脚本)的$_POST['name'] 属性中引用它。见下文。

if (isset($_POST['submit'])) {
    foreach($_POST['checkbox'] as $checkVal) {
        /*(do stuff here, like print out all check rows first
        so I can understand what is going on, then eventually
        write the MySQL INSERT INTO query.)*/
}



我的问题是什么

1)老实说,我一开始就很难把我的大脑包裹起来。我真的认为将所有$row 信息存储在一个数组中并将该数组变量分配给value 属性不会有问题。但是,一旦按下提交按钮,我无法弄清楚如何调用所有复选框。

问题是,当我将数组放入 value 属性时,我收到一条错误/通知,内容为 Notice: Array to string conversion in [/script location.php] on line [where the checkbox code is]

2) 假设我不关心上面的通知。我仍然需要参考检查的数据,以便将其插入我拥有的 MySQL 数据库中。我什至不认为这很困难。一旦我引用了所有检查的数据,我就可以使用 foreach 循环遍历该数组并为查询中的每一行执行插入查询。

我该如何做到这一点?提前致谢!如果我遗漏了任何帮助者需要的重要信息,请告诉我,我可以更新此问题。

我唯一的要求是,如果需要,所提供的任何解决方案都应在 PHP、HTML 和 CSS/Oracle/MySQL 的范围内。我对 Javascript 或它的任何库都不太熟悉,因为这有点时间敏感,所以我没有时间学习所有可能涉及的内容。因此,除非有一个非常直接的 javascript 答案,否则在我的情况下它弊大于利。

谢谢!

-安东尼

【问题讨论】:

    标签: php html sql arrays checkbox


    【解决方案1】:

    又快又脏,没有测试,但是......

    $rowNum = 0;
    while($row = oci_fetch_array($sql)) {
    
        $rowVal = array(
           "SKU" => $row['SKU'],
           "DESCRIPTION" => $row['DESCRIPTION'],
           "LOCATION_MAX" => $row['LOCATION_MAX'],
            "QUANTITY" => $row['QUANTITY']
        )
    
        echo "<tr>";
        echo "<td>" . $row['SKU'] . "</td>";
        echo "<td>" . $row['DESCRIPTION'] . "</td>";
        echo "<td>" . $row['LOCATION_MAX'] . "</td>";
        echo "<td>" . $row['QUANTITY'] . "</td>";
        echo "<td>" .
               "<input type='hidden' name='opt[$rowNum]' value='". implode("::", $rowVal) ."'>".
               "<input type='checkbox' name='checkbox[$rowNum]' value='$rowNum'>".
             "</td>";
        echo "</tr>";
    
        $rowNum++;
    }
    

    您只需将数组值放在隐藏的输入中,然后放在您的后期处理代码中:

    // Note that you need to check if all values are $_POSTEd, 
    // this is a quick and dirty solution!
    if (isset($_POST['submit'])) {
      $data = [];
      foreach($_POST['checkbox'] as $rowNum) {
        $data[] = explode("::", $_POST['opt'][$rowNum]);
      }
      var_dump($data);
    }
    
    // Output sample (selected row 2 and 4):
    array (size=2)
      0 => 
        array (size=4)
          0 => string 'SKU2' (length=4)
          1 => string 'DESC2' (length=5)
          2 => string 'LOC2' (length=4)
          3 => string 'QUAN2' (length=5)
      1 => 
        array (size=4)
          0 => string 'SKU4' (length=4)
          1 => string 'DESC4' (length=5)
          2 => string 'LOC4' (length=4)
          3 => string 'QUAN4' (length=5)
    

    【讨论】:

    • 感谢您提供答案。您能否详细说明如何“检查”选中了哪个复选框?
    • 当我实现上面的代码时会发生这种情况。 Notice: Undefined index: checkbox in /xxxx/xxxx.php on line 755 Notice: Undefined index: opt in /xxxx/xxxx.php on line 755
    • 哇,我意识到我们在谈论复选框,而不是单选按钮(我的错!),所以我的解决方案不能直接应用,因为你可以选择多行,所以你需要转也将复选框放入数组中(参见编辑后的答案)
    • 谢谢。在您更新答案之前,我使用了您原始解决方案的一部分,方法是内爆数组并指定为复选框的值(没有看到需要添加隐藏输入),然后结束引用哪个复选框被标记为if(isset...) 语句、foreach 循环和 explode 函数,几乎与您在编辑答案中所做的相同。非常感谢您的帮助!
    • @mTorres 你能告诉我如何将数据写入mysql表 var_dump($data); ?
    猜你喜欢
    • 2011-05-03
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    相关资源
    最近更新 更多