2012-12-05 39 views
1

我不是最好的PHP編碼,只是學習它。但我想知道爲什麼我不斷獲取傳遞給each()的變量不是數組或對象警告。我知道有一個類似的線程,我曾用於此代碼,但該帖子沒有解決,所以我希望它可以是錯誤是一行46它在哪裏陳述 -PHP刪除窗體有變量傳遞給每個()警告

while(list($ key, $ VAL)=每($ _ POST [ '複選框'])){

整個代碼是

<?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> 

請幫我解決這個問題。

回答

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') 

而且你使用的每個()在$一個,它會使用返回類似結果狗/貓鍵/值對。

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 />' : ''; 
    } 
?> 
相關問題