我需要什么
我有一个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...)
?>
当单击每行的复选框时,我需要使用INSERT INTO作为我在另一个数据库中的MySQL表。
我无法理解我应该抓住每一行的所有信息并将其传递给另一个脚本,因此我可以将数据插入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答案,否则在我的情况下弊大于利。
谢谢!
- 安东尼
答案 0 :(得分: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)