2014-03-05 108 views
-3

我想用复选框更新多行。我的脚本工作,但显示的ini_set的display_errorsPHP注意:未定义的偏移量

这里后,错误信息是代码:

$count=mysql_num_rows($result); 
if (isset($_POST['submit'])) { 
    $checked = $_POST['checkbox']; 
    for ($i = 0; $i < $count; $i++) { 
     $result = mysql_query("UPDATE trace SET status='Delivered' WHERE id='$checked[$i]'") or die(mysql_error()); 
    } 
} 

它显示通知:未定义偏移行数

有什么不对?

+1

未定义的偏移量?它缺少部分消息 –

+1

定义'$ count'的位置在哪里?此外,你是**开放** SQL注入攻击,和**如果你还没有被黑客攻击**。使用准备/参数化查询完全避免此问题。 – Brad

+0

你是ckecing $ _POST ['submit'],但没有检查$ _POST ['checkbox'],也没有定义$ count –

回答

3

错误

Notice: Undefined offset 

在本质上是说你试图引用不存在的数组的值。

查看您的代码,有两种可能的情况发生,第一种为$_POST['checkbox'],第二种为$checked[$i]

你可以通过这样的

if (isset ($_POST['submit'])) 
{ 
    $checked = isset($_POST['checkbox']) ? $_POST['checkbox'] : null; 
    if (is_array($checked)) 
    { 
    foreach ($checked as $check) 
    { 
     $result = mysql_query("UPDATE trace SET status='Delivered' WHERE id='$check'") or die(mysql_error()); 
    } 
    } 
} 

注意上面的代码不应该在生产中使用,因为它是不安全的解决此问题。

另请注意,mysql_函数已被弃用。使用PDO或mysqli进行数据库查询。

+1

查看您编辑的代码示例后,存在无法轻易解决的固有错误。 – Kami

+0

我想用复选框更新多行。我的脚本可以工作,但在ini_set display_errors – user3391807

+0

之后显示错误消息您的脚本可以工作。谢谢。什么安全? – user3391807

0

如果定义:

$count = count($_POST['checkbox']); 

然后,你需要使用$计数 - 1,你从零开始迭代。

for($i = 0; $i < $count - 1; $i++){ 
    // .... 
} 

还是应该更好地使用的foreach代替 - 无需处理计数指标。

foreach ($_POST['checkbox'] as $checkbox) 
{ 
    // you will use $checkbox instead $checked[$i] in this case 
} 
+0

我已更新代码。请参阅 – user3391807