很长的帖子所以这是我的免责声明。
我正在研究一个从MYSQL数据库构建表并在网页中显示它的函数(使用localhost XAMP)。那部分很容易,想通了没问题。但是,我尝试为复选框创建另一列,以允许我检查要删除的条目,然后单击删除按钮以删除所有选中的列。这是完整的功能:
<?php // functions.php
$conn = new mysqli($hn, $un, $pw, $db);
if ($conn->connect_error) die ($conn->$connect_error);
function buildTable($query) {
global $conn; // need clarification why this works
$result = $conn->query($query);
if (!$result) die ("Database access failed: " . $conn->error);
$rows = $result->num_rows;
echo "<table> <tr> <th>Delete</th> <th>stockID</th> <th>cardID</th>
<th>categoryID</th> <th>condID</th> <th>Potential Value</th> </tr> ";
for ($j = 0 ; $j < $rows ; ++$j) {
$result->data_seek($j);
$row = $result->fetch_array(MYSQLI_NUM);
这段代码是我的问题;当我在操作页面'inventory.php'上print_r($ _ POST)时,$ _POST数组不显示存在的stockID。
echo "<tr> <td> <form method='post' action='inventory.php'>
<input type='checkbox' name='stockID[]' value='$rows[0]'>
</form></td>";
for ($l = 0 ; $l < 5 ; ++$l) echo "<td>$row[$l]</td>";
echo "</tr>";
};
结束可能的问题位,继续其余代码:
echo <<<_END
?>
</table> <a href='card input.php'> Record inventory </a>
<form method='post' action='inventory.php'>
<input type='hidden' name='delete' value='true'>
<input type='submit' value='Delete Record(s)'>
</form>
_END;
};
然后我在操作页面上使用此IF语句来确定要删除的内容:
<?php //inventory.php <-- NOTICE NEW FILE
if ( isset($_POST['delete']) && isset($_POST['stockID']) ) {
$stockID = $_POST['stockID'];
foreach ($stockID as $value) {
$query = 'DELETE FROM `itemized inventory`
WHERE stockID="$value" ';
queryMysql($query);
};
};
我去过的可能问题:
1。) stockID用于同一目录中的另一个文件,并且存在冲突。 如果它们位于两个不通过“require”或“include”调用连接的不同文件上,我认为两个相同的关联数组键不会发生冲突。我是新手,所以我可能是错的。我已尝试过不同的ID,但没有解决问题。
2。)我将用于调用DELETE命令的IF语句不正确。 这可能仍然是真的,但我认为我甚至不能说这是因为我会因为queryMysql($ query)函数而收到错误消息。
<?php //function.php
function queryMysql($query) {
global $conn;
$result = $conn->query($query);
if (!$result) echo "Database action failed: $query" . "<br>" .
$conn->error . "<br><br>";
};
?>
因为我不是。)收到错误并且b。)没有删除数据库中的任何内容,这使我得出结论:'functions.php页'中的<input type='checkbox' name='stockID[]' value='$row[0]'>
没有被推送到操作页面'inventory.php'上的$ _POST数组(通过'inventory.php'页面上的print_r($ _ POST)进一步确认)。因为isset($ _ POST ['stockID'])然后为false,所以甚至不调用用于确定要删除的内容的IF语句,因为它的条件为false。因此,查询甚至没有被提交,因此我不能证明这是问题。
3。) for循环和heredocs不是朋友。也许吧?在这一点上,我只是猜测....也许它的for循环和<input>
语句不是朋友?
这就是我能想到的一切。任何帮助将不胜感激。 Newb程序员和海报在这里堆栈,所以PLZ变得简单。粗糙是可以的,因为我们后来依偎。
谢谢!
答案 0 :(得分:0)
带删除按钮的最后一个表单没有名为&#34; stockID []&#34;的字段。这些字段属于其他表单,因此不会使用此表单发送。
您可以将带有复选框的整个表格包装成一个表单
<form method='post' action='inventory.php'>
<table> <tr> <th>Delete</th> <th>stockID</th> <th>cardID</th>
<th>categoryID</th> <th>condID</th> <th>Potential Value</th> </tr>
<?php
for ($j = 0 ; $j < $rows ; ++$j) {
$result->data_seek($j);
$row = $result->fetch_array(MYSQLI_NUM);
echo "<tr> <td><input type='checkbox' name='stockID[]' value='$rows[0]'></td>";
for ($l = 0 ; $l < 5 ; ++$l) echo "<td>$row[$l]</td>";
echo "</tr>";
};
</table>
<input type='hidden' name='delete' value='true'>
<input type='submit' value='Delete Record(s)'>
</form>
或者在发送最后一个表单之前调用javascript函数,收集所有选中复选框的值,并将其传递给发送的数据。