错误:注意:未定义的偏移量:第55行的C:\ wamp \ www \ project \ php \ deleteRow.php中的1

时间:2012-02-21 09:46:15

标签: php

我在尝试从表格和数据库中删除电子邮件时遇到此错误,我试图解决它,但有些字段工作,而其他人仍然给我一个错误,任何帮助是apreciated,我正在学习我自己的PHP

/ 这是我的代码 /

<?php
 $dbhost = 'host';

 $dbuser = 'username';

 $dbpass = 'password';

 $dbname = 'databe_name';

 $dbtable = 'database_table';

 $conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');
 //
 mysql_select_db($dbname,$conn) or die ("Could not open database");
 //
$sql="SELECT * FROM '$dbtable'";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
?>
<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>Sender</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Message</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Date</strong></td>
</tr>
<?php
while($rows=mysql_fetch_array($result)){
?>
<tr>
<td align="center" bgcolor="#FFFFFF"><input name="checkbox[]" type="checkbox" id="checkbox[]" value="<?php echo $rows['id']; ?>"></td>
<td bgcolor="#FFFFFF"><?php echo $rows[0]; ?></td>
<td bgcolor="#FFFFFF"><?php echo $rows[2]; ?></td>
<td bgcolor="#FFFFFF"><?php echo $rows[3]; ?></td>
<td bgcolor="#FFFFFF"><?php echo $rows[4]; ?></td>
</tr>
<?php
}
?>
<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(isset($_POST['delete'])){
    for($i=0;$i<$count;$i++){
            $del_id = $_POST['checkbox'][$i]; /*this line gives me an error*/
            $sql = "DELETE FROM '$dbtable' WHERE id='$del_id'";
            $result = mysql_query($sql);
    }
    // if successful redirect to delete_multiple.php
if($result){
    echo "<meta http-equiv='refresh' content='0' URL='deleteRow.php'>";
}
}
mysql_close();
?>
</table>
</form>
</td>
</tr>

6 个答案:

答案 0 :(得分:1)

尝试:


if(isset($_POST['delete'])){
    $checkboxCount = count($_POST['checkbox']);
    for($i=0;$i<$checkboxCount;$i++){
            $del_id = $_POST['checkbox'][$i]; 
            $sql = "DELETE FROM '$dbtable' WHERE id='$del_id'";
            $result = mysql_query($sql);
    }
    // if successful redirect to delete_multiple.php
if($result){
    echo "";
}
}


答案 1 :(得分:0)

未选中的复选框没有发送其值。

您可能需要将for正文替换为:

if(isSet($_POST['checkbox'][$i])) {
        $del_id = $_POST['checkbox'][$i]; /*this line gives me an error*/
        $sql = "DELETE FROM '$dbtable' WHERE id='$del_id'";
        $result = mysql_query($sql);
}

答案 2 :(得分:0)

复选框帖子字段仅在选中时可用于帖子中。所以你的post数组只能包含值1和2.你循环遍历所有数据库行,在复选框数组的计数中更改$ count变量

答案 3 :(得分:0)

$_POST['checkbox'][1]不存在。

使用$count

而不是使用代码中查询结果数count($_POST['checkbox'])

所以for($i=0;$i<$count;$i++){会变成

 for($i=0; $i < count($_POST['checkbox']); $i++){

第二眼看,就像其他人建议的那样,并非所有复选框的索引都可以设置。最好使用foreach循环,以便轻松获取密钥和值。

foreach($_POST['checkbox'] as $key => $value){

答案 4 :(得分:0)

如果未选中复选框,则不会显示在$_POST['checkbox']

您可以做的是将所有复选框保存在一个数组中,并在循环后对所有复选框执行单个删除查询。

for($i=0;$i<$count;$i++){
    if (isset($_POST['checkbox'][$i])) $delids[] = $_POST['checkbox'][$i];
}

if (isset($delids) && is_array($delids)) {
    $sql = "DELETE FROM '$dbtable' WHERE id IN (".implode(',', $delids).")";
    $result = mysql_query($sql);
}

但更好的方法是跳过for - 循环并使用foreach代替:

foreach($_POST['checkbox'] as $c) {
    $delids[] = $c;
}

if (isset($delids) && is_array($delids)) {
    $sql = "DELETE FROM '$dbtable' WHERE id IN (".implode(',', $delids).")";
    $result = mysql_query($sql);
}

答案 5 :(得分:0)

我认为混淆在于你使用值($ count - 行数)来索引每个复选框的值。行数定义了将有多少个复选框,但不定义每个复选框的值。因此,不能保证删除循环中的$ i小于复选框数组的大小。