2012-03-08 100 views
0

我得到这个错误从下面的代码的第一行:PHP错误,而使用阵列

Fatal error: Only variables can be passed by reference in /home/path/file.php on line 36 



     if (isset($_POST['id'])) 
     { 
      $ids = array_walk('intval', $_POST['id']); 

      $sql = "DELETE FROM table WHERE id IN (' . implode(',', $ids) . ')')"; 
      //run query here 

      $msg->type = "success"; 
      $msg->text = "Bulk delete has been successful"; 
     } 

任何想法可能是什么?

顺便说一句,上面的代码是批量删除项目。

错误是由$ids = array_walk('intval', $_POST['id']);

+0

使用双引号在这行: “DELETE FROM表WHERE id IN(“。implode(',',$ ids)。”)')“; – hackartist 2012-03-08 23:26:02

+0

你的ID是否有空值? – 2012-03-08 23:26:12

+1

你有错误的顺序array_walk上的参数? – Scuzzy 2012-03-08 23:26:23

回答

2

你的函数array_walk调用是不正确

bool array_walk (array &$array , callback $funcname [, mixed $userdata = NULL ]) 

试试这个来代替,而假设$_POST['id']是一个数组

$ids = array_walk($_POST['id'], 'intval'); 

http://php.net/manual/en/function.array-walk.php

此外,它可能是好的调用前检查函数来确保$_POST['id']是一个数组

编辑

看着你做一个小的经过,你需要使用的功能是array_maparray_walk返回布尔值,而array_map返回一个数组,它看起来像您需要返回的数据,因为您在$ids上使用implode

所以你需要有

$ids = array_map('intval', $_POST['id']); 
+0

'array_map' ftw。 – 2012-03-09 01:00:49

0

引起的哪条线是线36?另外,你似乎在SQL语句中有一个额外的右括号。而且,$ _POST变量真的是一个数组吗?

+0

是的,这是一个数组。 html是''input type =“checkbox”name =“id []”value =“{$ id [$ index]}”/>' – user962449 2012-03-08 23:34:44

0

也许你已经改变参数的顺序$ids = array_walk('intval', $_POST['id']);?在我看来,它应该是$ids = array_walk($_POST['id'],'intval');

1

array_walk要求每个阵列功能,并采用功能参数0,我认为你需要改变:

array_walk('intval', $_POST['id']);array('intval', $_POST['id']);