2013-02-04 43 views
0

我在我的社交網絡上創建用戶模塊。我試圖將其設置爲如果您已登錄並查看自己的個人資料,您是$user['id'];,並且如果您已經登錄並查看其他人的個人資料,您就是我已經開始完成的$prof['id'];如何將用戶標識附加到代碼點火器中的網址?

不過我一起新笨和PHP,並試圖弄清楚如何將用戶ID附加到URL的末尾,所以我的系統,可以檢查,看它是否是$user['id']或$prof['id']

控制器:

public function profile() 
    { 
     $data['profile_icon'] = 'profile'; 
     $data['main_content'] = 'account/profile'; 
     $this->load->view('includes/templates/profile_template', $data); 
     $this->load->helper('date'); 
     $this->load->library('session'); 
     $session_id = $this->session->userdata['id']; 
     //USER ID LOOKING AT OWN PROFILE 
     $this->load->model('account_model'); 
     $user = $this->account_model->user(); 
     $data['user'] = $user; 
     //PROF ID LOOKING AT SOMEONE ELSE'S PROFILE 
     $this->load->model('account_model'); 
     $prof = $this->account_model->prof(); 
     $data_prof['prof'] = $prof; 


     if($session_id != $user['id']) 
     { 
      echo $prof['id']; 
      echo "<br />"; 
      // FOR TESTING PURPOSES 
      echo "other user"; 
     } 

     elseif($session_id == $user['id']) 
     { 
      echo $user['id']; 
      echo "<br />"; 
      // FOR TESTING PURPOSES 
      echo "hey it's me "; 

     } 


    } 

查看:

<div class="edit_prof_header"> 
// WHAT IS A GOOD WAY TO MAKE THIS DYNAMIC WITH THE `$prof` AND `$user` WITH OUT HAVING TO D O AN IF STATEMENT WITH EACH ELEMENT? 
    <?php echo $user['first_name']." ".$user['last_name'];?> 
</div> 

型號: //也許我可以解決SINGE的全差分D在這裏和在這裏,並將其納入控制者和觀點?????

public function user() 
     { 
      $session = $this->session->userdata('is_logged_in'); 
      $user_id = $this->session->userdata('id'); 

      $query = $this->db->query("SELECT * FROM users WHERE id=$user_id LIMIT 1"); 
      if($query->num_rows()==1) 
      { 
       $data = $query->result_array(); 
       return $data[0]; 
      //above returns the single row you need to the controller as an array. 
      //to the $data['user'] variable. 

      } 

     } 
     public function prof() 
      { 
       $session = $this->session->userdata('is_logged_in'); 
       $user_id = $this->session->userdata('id'); 

       $query = $this->db->query("SELECT * FROM users WHERE id=$user_id LIMIT 1"); 
       if($query->num_rows()==1) 
       { 
        $data_prof = $query->result_array(); 
        return $data_prof[0]; 
       //above returns the single row you need to the controller as an array. 
       //to the $data['user'] variable. 

       } 

      } 

在此先感謝。

***編輯//試圖讓attched到URL中的ID

$this->load->view('includes/templates/profile_template', $data); 
$this->load->helper('date'); 
$this->load->library('session'); 
$session_id = $this->session->userdata['id']; 
$this->load->model('account_model'); 
//USER ID LOOKING AT OWN PROFILE 
$data_user['user'] = $this->account_model->user(); 
$user['id'] = $this->uri->segment(3); 
echo $user['id']; 
$data['profile_icon'] = 'profile'; 
$data['main_content'] = 'account/profile/'.$user['id']; 

***編輯ROUTES

route['default_controller'] = "home"; 
$route['404_override'] = ''; 
$route['profile/:num'] = "auth/profiles"; 

//控制器

public function profile() 
    { 

     $this->load->helper('date'); 
      $this->load->library('session'); 
     $session_id = $this->session->userdata['id']; 
     $this->load->model('account_model'); 
     $user = $this->account_model->user(); 
      $data['user'] = $user; 
     $user['id'] = $this->uri->segment(4); 
     $data['profile_icon'] = 'profile'; 
     $data['main_content'] = 'account/profile/'.$user['id']; 
     $this->load->view('includes/templates/profile_template', $data); 

    } 
+0

基本上兩者都是相同的,所以你只需要使用if語句添加缺失的數據,而不是像你現在正在做的那樣。 無論如何codeigniter的會話使用正常的大括號()not [] – ahmad

+0

$ user ['id']和$ prof ['id']不是由會話助手完全創建的。 – LightningWrist

回答

2

第一在所有我看不到需要切換ID的情況下,說實話沒有實際意義。如果你正在查看一個配置文件,你可以通過userId來完成,無論它是你的配置文件還是其他人的配置文件。如果您想要編輯配置文件頁面的功能,只需檢查配置文件的userId是否與會話userId匹配即可。

例如,在你看來,你可以有一個鏈接:

<?php 
    if($user['userId']==$this->session->userdata('userId')) 
    { 
     echo '<a href="users/edit_user/'.$user['userId'].'">Edit my profile</a>'; 
    } 

也將再次檢查該用戶id做任何保存之前匹配的會話。順便說一下,你將如何創建一個與userId連接的鏈接,在控制器中使用該鏈接來檢查uri段,所以如下所示:

示例URL:www.example.com/profiles/view_profile/23

$userId = $this->uri->segment(3); 

瞭解uri細分。 我認爲有時候人們會對URI段感到困惑。你的base_url是0,你從那裏開始計算。只要您記得base_url始終爲0,那麼它在實際URL結構中的位置並不重要。例如,如果您的基本URL是www.example.com/hello/world,那麼uri段1會出現在世界NOT .com 。

你也做了很多初學者的事情,說實話我不知道爲什麼我看到教程顯示人們所有的時間。

$prof = $this->account_model->prof(); 
    $data_prof['prof'] = $prof; 

爲什麼不這樣做?設置變量來設置變量的目的是什麼?:

$data_prof['prof'] = $this->account_model->prof(); 

同樣在你的用戶查詢中取出LIMIT。這將確保即使您的查詢匹配多個結果,您也只能得到一個結果,但您應該確保不能在多個時間顯示具有相同ID的多個用戶,但在查詢中存在這樣的結果會失敗if num rows語句。無論如何你都會得到1或0。

+0

非常感謝。這是一個很好的答案,我一直在尋找! – LightningWrist

+0

我剛剛發現這篇有用的文章http://ellislab.com/codeigniter/user-guide/general/urls.html – LightningWrist

+0

我想我必須應用邏輯錯誤,因爲我越來越無法加載請求的文件:。這段代碼的PHP錯誤:SEE EDIT ****** – LightningWrist

相關問題