Php 我在项目中创建了“删除用户帐户”按钮,但无法删除已删除用户留给其他用户的邮件
当用户在其帐户中并单击“delete account”(删除帐户)时,应删除该用户以及他们为用户留下的消息,并停止向其他用户显示为好友。我有两个这样的工作,但如果其他用户登录,仍然会显示消息。我已经创建了一个功能,用户可以使用它来删除来自朋友的消息,我已经尝试将此功能实现到一个新功能中,以便它可以删除来自特定朋友的消息。这是原始的deleteMsg,它将删除所有字段(message_id、from、to、message),因此消息将在消息数据库中删除。此功能出现在“我的邮件”模型中:Php 我在项目中创建了“删除用户帐户”按钮,但无法删除已删除用户留给其他用户的邮件,php,codeigniter,Php,Codeigniter,当用户在其帐户中并单击“delete account”(删除帐户)时,应删除该用户以及他们为用户留下的消息,并停止向其他用户显示为好友。我有两个这样的工作,但如果其他用户登录,仍然会显示消息。我已经创建了一个功能,用户可以使用它来删除来自朋友的消息,我已经尝试将此功能实现到一个新功能中,以便它可以删除来自特定朋友的消息。这是原始的deleteMsg,它将删除所有字段(message_id、from、to、message),因此消息将在消息数据库中删除。此功能出现在“我的邮件”模型中: funct
function deleteMsg($message_id)
{
$this->db->where(array('message_id' => $message_id));
$this->db->delete('messages');
}
下面是我试图实现的功能,这样当调用delete帐户时,它将删除这个现在已删除的用户在其他用户主页上留下的所有消息。它也出现在我的模型中:
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');
}
}
您一次只删除(通过选择)一条消息。您需要删除邮件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) 当您只需要选择消息id时,为什么选择*
3) 当您可以直接删除时,为什么要选择
?节省网络流量、处理和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');
$this->db->select('*')->from('messages')->where('from',$username)->或_where('to',$username)
这实际上解决了这个问题嗨,Robbie,谢谢你。我在deleteCountMsg函数中尝试了这一行:$delete=$this->db->delete('messages')->where('message\u id',$message\u id)->where('from',$from);但后来我犯了两个错误。第一个是遇到php错误:严重性:警告消息:非法偏移类型。我还遇到了一个数据库错误:不允许删除,除非它们包含“where”或“like”子句。我刚才不是在sql delete语句中包含了2个where吗?再次感谢-我现在删除了一个用户的帐户,它最终删除了所有消息。虽然现在有了一些功能,我也很欣赏,但如何让deleteAccountMsg只删除属于被删除帐户的人的用户名的邮件呢?如果你需要进一步解释,请让我知道..那就分解成最后一个例子吧。这里有足够多的例子:(比CI文档更容易)。是-您的问题[message_id AND from]中有两个WHERE,当您试图从一个用户删除所有记录时,这两个WHERE会导致问题,因为您只需要WHERE[from]中的一个好的,谢谢-我试着使用from,但同样的东西-我在想我是否可以引用特定的朋友名,并从sql语句中引用我朋友数据库中的朋友…是的,有。根据问题中的代码,我已经给了你答案。如果不是这样(例如,“from”实际上是一个用户id,而不是一个名字等等),那么如果你不能从中找到答案,那么你需要透露更多信息。抱歉-我只能根据您的问题提供帮助。请注意(如上所述),在“删除”之前进行“选择”既低效又不可取。首先,你打了两个电话,而一个可以。第二,尽管听起来不太可能,用户可能会在选择和删除之间添加一个条目-然后该记录将成为孤立记录。好的,谢谢您指出这一点-您建议这样做吗?$this->db->delete('*')->from('profileimages')->其中('user',$username);