如何插入使用html复选框与PHP


How to INSERT INTO using html checked boxes with PHP

我需要什么

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

<?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]

假设我不关心上面的通知。我仍然需要引用被检查的数据,以便我可以将其插入到MySQL数据库中。我甚至不觉得这有多难。一旦我引用了所有已检查的数据,我就可以使用foreach循环遍历该数组,并对查询中的每一行执行插入查询。

我该怎么做?提前感谢!如果我遗漏了任何重要信息,请让我知道,我可以更新这个问题。

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

谢谢!

安东尼

又快又脏,不需要测试,但是…

$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++;
}

你只是把数组的值放在一个隐藏的输入,然后在你的post处理代码:

// 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)