2013-05-02 64 views
0

我有一个表格显示表格中每个工程师的复选框。如果工程师的复选框未勾选,表单将被提交,它们将从作业中删除($ diary_id)。in_array()期望参数2是数组,空给出的错误

此时的代码正常工作,但在返回下一页之前,页面会简要显示此错误。

in_array()预计参数2为阵列,空给定的错误

表格中的代码...

$sql = "SELECT * FROM users WHERE type = 'engineer' ORDER BY first_name"; 
    $result = mysql_query($sql) or die(mysql_error()); 
    while ($row = mysql_fetch_array($result)){ ?> 

     <div style="width:70px; float:left"> 
     <input type="hidden" name="engineer_on_page[]" value="<? echo $row['id']; ?>"/> 
      <input type="checkbox" name="engineer[]" <? 
      $eng_id= $row['id']; 

       $result2 = mysql_query("SELECT * FROM calls_engineers WHERE call_ce = '$diary_id' AND engineer_ce = '$eng_id'"); 
       if((mysql_num_rows($result2)) > 0) 
       { echo 'checked="checked"'; 
      ?> value="<? echo $row['id']; ?>" /> 
      <? echo ' '.$row['first_name']; } 
      else { 
       echo "value=".$row['id']." />"; 
      echo ' '.$row['first_name']; 
      } 
       ?> 
     </div> 

    <? } ?> 

MySQL的去除未被选择的工程师

foreach($_POST['engineer_on_page'] as $engineer_id) { 
      $sql = "SELECT * FROM calls_engineers WHERE call_ce = '$diary_id' AND engineer_ce = '$engineer_id'"; 
      $result = mysql_query($sql)or die(mysql_error()); 
       if(!in_array($engineer_id, $_POST['engineer'])){ 
        if(mysql_num_rows($result) > 0){ 
         $sql = "DELETE FROM calls_engineers WHERE engineer_ce = '$engineer_id' AND call_ce = '$diary_id'"; 
         $result = mysql_query($sql)or die(mysql_error()); 
        }   
       } 

      } 

我试图在foreach循环之前初始化$ _POST ['engineer']作为数组($ _POST ['engineer'] = array();),但它也停止了页面的工作,没有错误消息,它只是不再工作。

我知道这个页面需要更新到mysqli,但我想在这之前先解决这个问题。

感谢

+0

更换'如果(!in_array($ engineer_id,$ _ POST [ '工程师'])){'和'如果(isset($ _ POST [ '工程师'])&& is_array($ _ POST [ '工程师'])&& !in_array($ engineer_id,$ _POST ['engineer'])){' – Ejaz 2013-05-02 20:54:23

+0

@Ejay,谢谢你,但它停止工作页面 – tatty27 2013-05-02 21:02:04

+0

'停止页面工作'你的意思是你得到一些错误?或者它不执行删除语句? – Ejaz 2013-05-02 21:13:05

回答

2

如果只有1个工程师被选中,值可能是一个字符串,而不是一个数组。

然后,我会调用in_array()前添加一个is_array()

if(is_array($_POST['engineer']) && !in_array($engineer_id, $_POST['engineer'])){ 
    // code   
} 

其实有很多,你可以结构的方式,但你应该明白我的意思。

+0

嗨,如果我补充说,它停止工作的页面,检查的工程师不会被从工作中删除 – tatty27 2013-05-02 21:04:13

+0

在你的foreach之前,尝试添加这个:'$ engineer = is_array($ _ POST ['engineer'])? $ _POST ['engineer']:array($ _ POST ['engineer']);'然后,在您的原始代码中,将第4行的$ _POST ['engineer']更改为变量'$ engineer'。否则,检查你的逻辑和SQL结果。 – 2013-05-02 21:35:18

+0

完美!谢谢 – tatty27 2013-05-02 22:23:42

相关问题