2017-03-24 24 views
0

我有這個功能讓用戶獲得與當前用戶相同的電子郵件地址域。 我的問題是有沒有更好的方法在codeigniter中做到這一點?在codeigniter中獲得具有相同電子郵件地址域的用戶的最佳方式是什麼?

我的代碼是

<?php 
    public function sr_get_identical_users() 
    { 
     $user_email = substr($this->session->userdata('email'), strrpos($this->session->userdata('email'), '@') + 1); 
     $this->db->like('email', $user_email, 'before'); 
     $query = $this->db->get('users'); 
     return $query->result_array(); 
    } 
?> 

感謝。您的意見是讚賞。

+0

爲什麼你需要這樣做?解釋這可能有助於回答你的問題。 – Sparky

+0

我正在製作分享功能。同一個域的用戶可以與其他用戶分享他的故事。 – shazyriver

回答

1

您應該在查詢中包含@字符,以查找其電子郵件地址中具有相同域的用戶。如果不是,您將冒險獲得多個不同域的不需要的匹配。例如域mail.com將在您的查詢匹配的用戶的電子郵件[email protected][email protected]等。

在你的榜樣,你可以只取出+1到包括@字符:

<?php 
    public function sr_get_identical_users() 
    { 
     $user_email = substr($this->session->userdata('email'), strrpos($this->session->userdata('email'), '@')); 
     $this->db->like('email', $user_email, 'before'); 
     $query = $this->db->get('users'); 
     return $query->result_array(); 
    } 
?> 

也許你已經知道在session->userdata的電子郵件地址是有效的,但我可能會在執行查詢之前反正驗證的電子郵件地址:

<?php 
    public function sr_get_identical_users() 
    { 
     $email = $this->session->userdata('email'); 
     // CHECK IF EMAIL ADDRESS IS VALID 
     if (($email = filter_var($email, FILTER_VALIDATE_EMAIL)) !== false) { 
      $email = substr($email, strrpos($email, '@')); // EXTRACT DOMAIN PART 
      $this->db->like('email', $email, 'before'); 
      $query = $this->db->get('users'); 
      return $query->result_array();    
     } 
    } 
?> 

還要考慮安全性,如果包含敏感數據和散列密碼等,請避免從users表中選擇所有數據。如果表中有許多列不需要特定性能方面的原因目的。

+0

這是關於包含@的好處。我的用戶將有公司的電子郵件,所以這不太可能,但它絕對是一種可能性。 – shazyriver

相關問題