2013-10-25 14 views
1

我正在寫在笨刪除功能相同的代碼PHP語法錯誤。用戶有兩種選擇。全部刪除或刪除一行。我不想重複相同的代碼,我使用這樣的功能。但有一個錯誤'分析錯誤:語法錯誤,意外的T_ELSE'。我該如何解決這個問題?只有重複代碼的方法?嘗試刪除所有行或一排用

public function _delete_port() 
{ 
    if ($_GET['delete_all']): 
     foreach ($_GET['delete_id'] as $delete_id):   
    else: 
     $delete_id = $_GET['delete_id']; 
    endif; 
     // Some controls 
     // ... 

     $this->db->delete('ma_port', array('id' => $delete_id)); 

    if ($_GET['delete_all']) : 
     endforeach; 
    endif; 

    redirect($url); 
} 
+4

「foreach():'後面沒有內容。備用流量控制語法(使用'如果不推薦HTML模板以外/ ENDIF的foreach/endforeach'。使用適當的括號內的控制結構和這個東西變得容易被發現。'如果(){...}否則{.. }'和'的foreach(){...}' –

+0

哦,等一下,你想在這裏做什麼?它看起來很像你正試圖通過有條件地開始和結束循環,以程序上構建PHP代碼。 –

+0

@ MichaelBerkowski我必須重複代碼嗎?它是唯一的解決辦法? – curiosity4834

回答

1

面對你的代碼的主要問題似乎是如何流動的控制工作的誤解。您所採取的方法是嘗試使用if/else/endif來構建你想怎麼你的代碼看起來而不是你希望你的代碼做什麼

如果$_GET['delete_all']作爲數組存在,並且以其他方式使用$_GET['delete_id'],則您的過程將使用循環。因此,首先檢查變量的內容,然後採取適當的措施。整個事情可以通過將$_GET['delete_id']到一個數組如果$_GET['delete_all']不存在被簡化。

// Empty array we'll fill later 
$delete_ids = array(); 

// If the delete_all array is available, use it as the array to delete from 
if (isset($_GET['delete_all']) && is_array($_GET['delete_all'])) { 
    $delete_ids = $_GET['delete_all']; 
} 
// Next if delete_id is present 
else if (isset($_GET['delete_id'])) { 
    // Place it into the array to use later 
    $delete_ids[] = $_GET['delete_id']; 
} 
else { 
    // Neither was set, you have an error state, so handle it however you need to 
    // Redirect, display an error, whatever. 
} 

// Now loop over your array and perform the action. 
// The array either contains the original array from $_GET['delete_all'] or the single element $_GET['delete_id'] 
// Or it may be empty entirely, and therefore won't do anything 
foreach ($delete_ids as $delete_id) { 
    $this->db_delete('ma_port', array('id' => $delete_id)); 
} 

// And finish with your redirect 
redirect($url); 
0

這是這麼髒,我應該有更好的翻譯thoguh:

public function _delete_port() 
{ 
    if ($_GET['delete_all']): 
     foreach ($_GET['delete_id'] as $delete_id):   
      // Some controls 
      // ... 
      $this->db->delete('ma_port', array('id' => $delete_id)); 
     endforeach; 
    else: 
     $delete_id = $_GET['delete_id']; 
     $this->db->delete('ma_port', array('id' => $delete_id)); 
    endif; 
    redirect($url); 
}