在for循环

时间:2016-01-14 00:01:22

标签: php mysql arrays html5 post

很长的帖子所以这是我的免责声明。

我正在研究一个从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变得简单。粗糙是可以的,因为我们后来依偎。

谢谢!

1 个答案:

答案 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函数,收集所有选中复选框的值,并将其传递给发送的数据。