我不是最好的PHP编码,只是学习它。但我想知道为什么我一直得到传递给每个()的变量不是数组或对象警告。我知道有一个类似的线程,我已经用于此代码,但该帖子没有解决,所以我希望它可以是错误是一行46,它指出 -
while(list($ key,$ val)= each($ _ POST ['checkbox'])){
整个代码是
<?php
$host = 'localhost'; // Host name
$username = 'root'; // Mysql username
$password = ''; // Mysql password
$db_name = 'forms'; // Database name
$tbl_name = 'members'; // Table name
// Connect to server and select databse.
mysql_connect($host, $username, $password) or die('cannot connect');
mysql_select_db($db_name) or die('cannot select DB');
$sql = 'SELECT * FROM `'.$tbl_name.'`';
$result = mysql_query($sql);?>
<table width="400" border="0" cellspacing="1" cellpadding="0">
<tr>
<td>
<form name="form1" method="post" action="">
<table width="400" border="0" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td bgcolor="#FFFFFF"> </td>
<td colspan="4" bgcolor="#FFFFFF"><strong>Delete multiple rows in mysql</strong> </td>
</tr>
<tr>
<td align="center" bgcolor="#FFFFFF">#</td>
<td align="center" bgcolor="#FFFFFF"><strong>Id</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Name</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Lastname</strong></td>
</tr>
<?php while ($rows = mysql_fetch_array($result)): ?>
<tr>
<td align="center" bgcolor="#FFFFFF"><input name="need_delete[<? echo $rows['id']; ?>]" type="checkbox" id="checkbox[<? echo $rows['id']; ?>]" value="<? echo $rows['id']; ?>"></td>
<td bgcolor="#FFFFFF"><? echo $rows['Member ID']; ?></td>
<td bgcolor="#FFFFFF"><? echo htmlspecialchars($rows['firstname']); ?></td>
<td bgcolor="#FFFFFF"><? echo htmlspecialchars($rows['lastname']); ?></td>
</tr>
<?php endwhile; ?>
<tr>
<td colspan="5" align="center" bgcolor="#FFFFFF"><input name="delete" type="submit" id="delete" value="Delete"></td>
</tr>
<?php
// Check if delete button active, start this
if ($_POST['delete']) {
$i = 0;
while(list($key,$val) = each($_POST['checkbox'])) {
$sql = "DELETE FROM $tbl_name WHERE id= '$val'";
mysql_query($sql);
$i += mysql_affected_rows();
}
if($i > 0){
echo '<meta http-equiv="refresh" content="0;URL=delete_member3.php">';
}
}
mysql_close();
?>
</table>
</form>
</td>
</tr>
请帮我解决这个问题。
答案 0 :(得分:0)
首先,您没有名为“checkbox”的表单元素,因此$ _POST ['checkbox']将为null(它应该抛出未定义的索引错误)。其次,在处理表单时,html复选框将返回一个布尔值(true / false)。
另外,我认为你不了解每个()的用法。它返回一个包含当前数组元素的键和值的数组,然后使数组指针前进。所以在一个数组中,如果你有:
$a = array('foo' => 'bar', 'dog' => 'cat');
$b = each($a);
var_dump($b);
$ b现在包含一个这样的数组:
array( 0 => 'foo', 'key' => 'foo', 1 => 'bar', 'value' => 'bar' )
下次在$ a上使用each()时,它将使用dog / cat键/值对返回类似的结果。
答案 1 :(得分:0)
在复选框前插入一个名称相同的隐藏字段:
PHP Code:
<input type='hidden' name='x' value='0'>
<input type='checkbox' name='x' value='1'>
因此您的脚本会收到“x = 0”或“x = 1”。
另一种方式
最好检查NULL。尝试实现以下内容:
PHP Code:
<?php
foreach($_POST as $key => $value)
{
echo ($value !== NULL) $key . ' = ' . $value . '<br />' : '';
}
?>