2013-05-02 54 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

相關問題