2016-03-22 6 views
1

自分のサイトで、自分の情報を変更できるユーザーのプロファイルページを作成しています。私は、名前、姓、ユーザー名、コードなどを変更することが可能でなければなりませんが、私はユーザー名で始めました。セッションのユーザー名を使用してmysqlからデータを取得する

人がログインし、私はセッション中にユーザー名を格納します。

のindex.php

<?php 
    if(!isset($_SESSION['username'])) include('resources/auth/login.php'); 
      else exit(header('Location: home.php')); 

       if(!isset($_SESSION)) session_start(); 

    // Logout Session 
    if(isset($_GET['todo']) && $_GET['todo'] == 'logout'){ 

     session_unset(); 
     session_destroy(); 
     //echo 'You have been logged out!'; 
    } 
?> 

私は

profile.phpでテストを行った。

<?php 
    if(!isset($_SESSION)) session_start(); 
?> 
    <?php //echo $_SESSION['username'];?> 

これは私のユーザ名を呼びます

しかし、mysqlデータベースからファーストネームを呼び出すには、そのユーザ名に属していますが、それにはsession[username]を使用する必要がありますか?

<?php 
    $stmt = $mysqli->prepare("SELECT firstname FROM login"); 

    $stmt->execute(); 

    $fname = null; 

     $stmt->bind_result($fname); 
     while($stmt->fetch()) { 
      echo $fname; 
     } 

    $stmt->close(); 
    $mysqli->close(); 
    ?> 

これは機能しますが、データベース内のすべての最初の名前が呼び出されます。

$stmt = $mysqli->prepare("SELECT firstname FROM login WHERE u_id=$username"); 

$stmt = $mysqli->prepare("SELECT firstname FROM loginWHERE u_id = '.$_SESSION[username]'"; 

しかし、ここで私はエラーを取得する:だから私は、保存されたセッション変数に=デシベルでPKでU_IDを、設定しようとした 未定義の変数を:プロファイルのユーザ名.php

これは誰でも見ることができますか?

+0

セッションを開始した後** $ _SESSION値にアクセスしようとしましたか?それは意味をなさない。 PHPは旅行に時間がかからず、session_start()を呼び出した後で遡及的にユーザー名テストを再実行しません。 'set'セッションのテストはsession_start()のための有効なテストではないことに注意してください。 $ _SESSIONをまったく持たないセッション(本当に単なるクッキー)を作ることは全く可能です。代わりに 'session_status()'を使用してください。 –

+0

後にセッションを開始することができませんか?これは、ログインしたときに実行されている最初のスクリプトです。 – McDuck4

+0

'session_start()'を呼び出さないと、 '$ _SESSION'は空白/空の配列になります。つまり、そこにユーザ名を見つけることはできません。 –

答えて

1

私はあなたによく理解していれば、私はこのクエリを考える:あなたは、そのユーザーのファーストネームを取得する場合

$stmt = $mysqli->prepare("SELECT firstname FROM login WHERE username ='.$_SESSION[username].'"); 
//forgive my syntax issues 

$stmt = $mysqli->prepare("SELECT firstname FROM login WHERE u_id=$username"); 

は、このする必要がありますが記録されている場合、where句のパラメータはユーザのユーザ名でなければなりませんが、これはユーザを識別する唯一の方法ですが、セッションのユーザIDも設定することをお勧めしますユーザーの一意のIDを取得します。 2人のユーザーが同じユーザー名を持つ可能性があるため、その特定のユーザーの情報を確実に取得するためのより良い方法です。where句でパラメータを取得すると、データベースから2行が取得されます。

+0

ありがとう、ユーザー名が今呼び出されました。私はIDをもチェックアウトします。私の質問では、その特定ユーザーのファーストネームを呼び出すことについても尋ねました。そのためにセッション[ユーザー名]を使用する必要がありますか、それをどうすればできますか? – McDuck4

+0

詳細を表示するプロファイルページで、select * from login where username = $ _SESSION [username]のようなクエリを実行し、ループを使用して表示する内容を表示します。 ? –

+0

私はそれを考えなかった。私はあなたが何を意味しているのか理解していますが、どうすればそれを作ることができるのかを見なければなりません。データベースから列名を取得する方法について疑問に思っています。しかし、私はしばらくの間それをやり遂げることができますか? – McDuck4

1

セッションを開始しなかった可能性が高いです。私はu_id = 'の代わりに$ _SESSION [' username ']を書くことしか知りません。 $ _SESSION [ユーザー名]」

+0

ありがとうございました。今すぐユーザー名で動作します – McDuck4

関連する問題