1

私はPHPコーディングが得意ではなく、学んでいるだけです。しかし、変数が each() に渡され続けるのはなぜだろうと思っていましたが、これは配列またはオブジェクトの警告ではありません。このコードに使用した同様のスレッドがあることは知っていますが、その投稿は解決されていないため、エラーが1行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

チェックボックスの前に同じ名前の非表示フィールドを挿入します。

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 に答える
0

まず、「checkbox」という名前のフォーム要素がないため、$_POST['checkbox'] は null になります (未定義のインデックス エラーがスローされるはずです)。次に、フォームが処理されているときに、html チェックボックスはブール値 (true/false) を返します。

また、 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() を使用すると、犬/猫のキー/値のペアを使用して同様の結果が返されます。

于 2012-12-05T00:51:58.123 に答える