2012-12-07 58 views
0

當用戶在他們的帳戶中並點擊「刪除帳戶」時,它應該刪除用戶以及他們留下的消息對於用戶而言,並且也不再作爲其他用戶的朋友顯示。我有2個這些工作,但消息仍然顯示爲另一個用戶,如果他們登錄。我有一個功能已經創建,用戶可以用來刪除朋友的消息,我試圖實現這個到一個新的功能,所以它會刪除消息,但從特定的朋友。這是原始的deleteMsg,它將刪除所有字段(message_id,from,to,message),這樣郵件將在郵件數據庫中被刪除。此功能會出現在我的消息模型:我在我的項目中創建了刪除用戶帳戶按鈕,但我無法刪除留給其他用戶的已刪除用戶的消息

function deleteMsg($message_id) 
{ 

$this->db->where(array('message_id' => $message_id)); 
$this->db->delete('messages'); 

} 

這裏是我想要實現這樣當刪除帳戶稱爲它將會刪除所有其他用戶的主頁現在這個刪除用戶留下的所有郵件的功能。它也出現在我的模型:

function deleteAccountMsg($message_id, $from) 
    { 
$delAcctMsg = $this->db->select('*')->from('messages')->where('message_id', $message_id)->where('from', $from); 
$delete = $this->db->delete('messages', $delAcctMsg); 

    } 

最後,這裏是我的控制器的DeleteUserAccount功能是應該抓住與用戶相關聯的一切,並將其刪除:

function Deleteuseraccount() 
{ 
    parent::__construct(); 

    $this->load->model("membership"); 
    $this->load->model("friends"); 
    $this->load->model("messages"); 


    $username = $this->session->userdata('username'); 
    $this->membership->deleteUser($username); 
    $this->friends->deleteMemberFriend($username, $friendname); 
    $this->messages-> deleteAccountMsg($message_id, $from);// this is the function I'm calling that isn't deleting the associate messages from the deleted user 
    $this->session->sess_destroy(); 
    redirect('start'); 
} 
} 

回答

0

$這個 - > DB->選擇( '*') - >從( '消息') - >在哪裏( '從',$用戶名) - > or_where( '到',$用戶名);

這實際上解決了這個問題

+0

只需在「刪除」之前執行「選擇」的備註(如上所述)既低效又不建議。首先,你要做兩個電話。其次,儘可能聽起來不太可能,用戶可以在選擇和刪除之間添加一個條目 - 這條記錄將被孤立。 – Robbie

+0

好的謝謝你指出 - 你會建議嗎? \t $ this-> db-> delete('*') - > from('profileimages') - > where('user',$ username); –

0

您刪除(由一次只選擇一條消息)。您需要OT刪除消息的ID限制

$delAcctMsg = $this->db->select('*')->from('messages')->where('from', $from); 
$delete = $this->db->delete('messages', $delAcctMsg); 

的幾個注意事項

1)在僞SQL第一寫

你可以工作,你想做的事在拼寫出來PHP

SELECT * 
FROM messages 
WHERE from=$from 

然後,這會爲您提供SQL模型所需的鏈。

2)爲什麼SELECT *當你只需要選擇message_id?

3)爲什麼SELECT根本就不能刪除?節省網絡流量,處理和mySQL調用。

$delete = $this->db->delete('messages')->where('from', $from); 

4)如果你想修改前面的函數,你可以分成幾個位。喜歡的東西

// (Untested - try it first on test data) 
$this->db->where('from', $from); 
if ($message_id) { 
    $this->db->where('message_id', $message_id); 
} 
$this->db->delete('messages'); 
+0

嗨,羅比,謝謝你。我在我的deleteAccountMsg函數中試過這一行:$ delete = $ this-> db-> delete('messages') - > where('message_id',$ message_id) - > where('from',$ from);但後來我得到了2個錯誤。第一個是遇到的php錯誤:嚴重性:警告 消息:非法偏移類型。我也發生了數據庫錯誤:除非它們包含「where」或「like」子句,否則不允許刪除。我沒有在我的sql刪除語句中包含2個wheres? –

+0

再次感謝 - 我現在刪除了一個用戶的帳戶,它最終刪除了整個板子上的所有消息。雖然現在有一些功能,我很欣賞這一點,我怎麼能得到deleteAccountMsg只是刪​​除屬於誰的帳戶被刪除的人的用戶名的消息?如果您需要進一步解釋,請讓我知道.. –

+0

然後分解成最後一個例子。這裏有一套足夠好的例子:http://www.phpexpertsforum.com/deleting-data-in-codeigniter-t2009.html(比CI文檔更簡單)。是的 - 你有兩個WHERE在你的問題[message_id和來自]這是造成問題時,試圖刪除所有記錄從一個用戶,因爲你只需要一個[從] – Robbie