0

ソーシャルネットワーク上にユーザーモジュールを作成しています。$user['id'];サインインして自分のプロファイルを表示している場合と、サインインして他の人のプロファイルを表示している場合に$prof['id'];、私が達成し始めた場所に設定しようとしています。

しかし、私はcodeigniterと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>

モデル:// PERHAPS私はここで歌われ、ここで歌われ、コントローラーとビューに組み込まれることの全体的な違いを解決することができましたか?????

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.

                }

            }

前もって感謝します。

***編集//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'];

***ルートの編集

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);

    }
4

1 に答える 1

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>';
    }

また、保存を行う前に、userIdがセッションと一致することを再度確認します。ちなみに、上記は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はworldNOT.comの後に続きます。 。

あなたはまた、多くの初心者のことをしますが、正直なところ、私はなぜ私がいつも人々を示しているチュートリアルを見るのか分かりません。

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

なぜこれをしないのですか?変数を設定して変数を設定する目的は何ですか?:

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

また、ユーザークエリでLIMITを削除します。これにより、クエリが複数の結果に一致する場合でも1つの結果しか得られないようにする必要があります。明らかに、常に同じIDを持つ複数のユーザーを含めることはできませんが、クエリにそれを含めると、 ifnumrowsステートメント。何があっても1または0を取得します。

于 2013-02-04T21:07:08.417 に答える