1

我不是最擅长 php 编码,只是学习它。但我想知道为什么我不断将变量传递给 each() 不是数组或对象警告。我知道有一个类似的线程我曾用于此代码,但该帖子没有解决,所以我希望它可能是错误是它指出的第 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">&nbsp;</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>

请帮我解决这个问题。

4

2 回答 2

0

首先,您没有名为“checkbox”的表单元素,因此 $_POST['checkbox'] 将为空(它应该引发未定义的索引错误)。其次,在处理表单时,一个 html 复选框将返回一个布尔值(真/假)。

另外,我认为您不了解each() 的用法。它返回一个包含当前数组元素的键和值的数组,然后前进数组指针。所以在一个数组中,如果你有:

$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 键/值对返回类似的结果。

于 2012-12-05T00:51:58.123 回答
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 />' : '';
    }
?>
于 2012-12-05T00:55:30.477 回答