1

私の更新された質問はここにあります:

データベースMYSQL&Codeigniterからの情報の取得

参照してください :)


このコードの何が問題なのかを聞きたいだけです。私は昨夜からこれを理解しようとしてきました。そして、私は再び、この質問を投稿しています。私の構文に何か問題があると思います。

function member_here()
{
    $this->db->select('');
    $this->db->from('membership');
    $this->db->where('username',$this->input->post('username'));
    $q=$this->db->get('');

    if($q->num_rows() > 0) {
        $data = array();
        foreach($q->result() as $row) {
            $data=$row;
        }
        return $data;
    }
}

そう、とにかく。そのための出力は、データベースから選択された情報になります。

しかし

コードの一部は出力を提供しているため、正しいと思いました。しかし、それでも正しくありません。

私がこのデータを持っているとしましょう:

|-------Name-----|-----Username-----|---------Email Address----------|
|     Marishka   |   marishkapv     |    marishka@email.com          |
|     John       |   johndoe        |   john@doe.com                 |
|     Dennis     |   dennisv        |     dennis@v.com               |

そこで、マリシュカを使ってログインしました。ログインに成功した後。ホームページに表示される情報は、dennisの情報です。

ジョンにログインした場合も同じです

データベースからフェッチされるデータは、最後に保存されるデータです。ログインした特定のユーザー名に属するデータベースから選択するにはどうすればよいですか?

お答えください。どうもありがとう!

ここに更新があります

これは私のビューフォームのコードです

<?php
$CI =& get_instance();
$CI->load->model('membership_model');
$result = $CI->membership_model->member_here();
?>


User Information:

</br></br></br>
Name: &nbsp;<?php echo $result->first_name; echo " ";   echo $result->last_name;?><br/></br>
Email Address: &nbsp;<?php echo $result->email_address; ?><br/></br>
Date of Birth: &nbsp;<br/></br>
Gender: &nbsp;<?php echo $result->gender;   ?><br/></br>
</br></br></br>
Account Information:<br/></br></br>

Username:<?php echo $this->session->userdata('username'); ?><br/></br>
Security Question: <?php echo $result->security_question;   ?>&nbsp;<br/></br>
Security Answer: <?php echo $result->security_answer;   ?>&nbsp;<br/></br>
4

3 に答える 3

0

codeigniterでは、これとは異なる方法で行うカスタム認証ライブラリを使用している場合を除き、通常はこれです。

$user_id = $this->session->userdata('account_id');

だからあなたは使うべきです

$this->db->where('user.id',$this->session->userdata('account_id'));

ルックアップフィールドを名前からIDに変更しました。これは、IDでルックアップを実行する必要があるためです。これは、2人が同じ名前を持っている可能性があるためです。INTのルックアップも高速です。

于 2012-11-11T23:56:55.453 に答える
0

あなたの db クエリに何か問題があります - あなたの説明は、すべての行が返されていることを示唆しています (または、少なくともデニスの行が常に返されています)。

コードは、返されたすべての行をループして、最後の行を出力するだけです。

デバッグ コードを追加して、返されたデータ セットをループ処理する前にダンプし、クエリを調整します。

于 2012-11-12T00:06:07.307 に答える
0

あなたが持っている

$data = array();
foreach($q->result() as $row) {
    $data=$row; // every time $data variable is being updated with new value
}

次のように変更すると、毎回ループ$dataが新しい値で更新されるため、最後のレコードが返されます

$data = array();
foreach($q->result() as $row) {
    $data[]=$row;
}

次に、すべての行を の配列として保持します$data

foreachまたは、ループなしで次のコードを使用できます

$data['result']=$q->result();

あなたのビューでは、次のようにループできます

foreach($result as $row) {
    echo $row->name;
     ...
}

更新:モデル、ビュー、コントローラーを適切に使用する必要があります。で使用modelしてviewいますが、これを行うべきではありません。をロードして使用しmodelcontrollerコントローラーからロードして、次のviewようなデータを渡します。

$this->load->view('your_view_name', $data);

そして、上で述べたようにloop内部。viewここに別の同様の答えがあります。

于 2012-11-12T00:07:40.850 に答える