Wie kann ich den eingeloggten Benutzer anzeigen?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Wie kann ich den eingeloggten Benutzer anzeigen?

    Hallo Zusammen

    Ich habe eine kleine Login Site erstellt, die den User, bei erfolgreichem Log-In auf eine Hauptsite leitet. Ich möchte nun, aber auf meiner Hauptsite anzeigen, wer der Nutzer ist: Also Hallo "user". Ich habe dazu mehrere Anleitungen gefunden, allerdings funktioniert das nicht sauber! Es gibt drei Möglichkeiten, was als Fehler auftritt:
    1. Es wird einfach der erste Benutzer aus der Datenbank angezeigt, anstatt dem eingeloggtn.
    2. Es wird gar nichts angezeigt
    3. Es werden alle Benutzer angezeigt.

    Hier ist der Quellcode, auf der Site (ist nur ein Frame meiner Hauptsite), wo ich das Problem habe:

    PHP-Code:
    <?
    session_start();
    include 'sessionhelpers.inc.php';

    echo 'You are ';
    if (!logged_in())
        echo 'not ';
    echo 'logged-in.<p />';

    echo 'Hallo';
    echo " <a href=\"user.php".SID."\" target=\"Site".SID."\"
    >\n";

    $sql = "SELECT UserName, UserID
    FROM users ";

    $result = mysql_query($sql)
    or die(mysql_error());
    $row = mysql_fetch_assoc($result);

    echo " " .$row['UserName'] ;

    echo " </a>\n";


    echo '&nbsp(<font size="-1"><a href="logout.php" 

    target="_parent">Log out</a></font>)';
    ?>
    Also das Problem liegt ganz klar beim SELECT, so viel weiss ich, aber wie mach ich nun, dass ich da als Resultat nicht den ersten Eintrag, sondern den richtigen zurückkriege?

    Dazu hier noch meine Login Site:

    PHP-Code:
    <?
    session_start();
    include 'sessionhelpers.inc.php';
    if (isset($_POST['login']))
    {
        $userid=check_user($_POST['username'], $_POST['userpass']);
        if ($userid!=false)
            login($userid);
        else
            echo 'Your input was incorrect!';
    }
    if (!logged_in())
        echo '
        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
        <html>
        <head>
        <title>Log-In auf meinen Server</title>
        </head>
        <form method="post" action="login.php">
        <table>
         <tr>
          <td colspan="2">
           <h2>Welcome to my Server!</h2>
          </td>
         </tr>
         <tr>
          <td colspan="2">&nbsp</td>
         <tr>
          <td>
               <label>Benutzername:
          </td>
          <td>
           </label><input name="username" type="text">
          </td>
         </tr>
         <tr>
          <td>
               <label>Passwort:
          </td>
          <td>
           </label><input name="userpass" type="password" id="userpass">
          </td>
         </tr>
         <tr>
          <td>
           &nbsp
          </td>
          <td>
            <input name="login" type="submit" id="login" value="Log-in">
          </td>
         </tr>
         <tr>
          <td colspan="2">&nbsp</td>
         </tr>
         <tr>
          <td>
           Terms of use:
          </td>
          <td>
           <a href="terms.html">Read here!</a>
          </td>
         </tr>
        </table>
        </form>
        </body>
        </html>
    ';
    else
        echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

    <html>
    <head>
    <title>Log in successful</title>

    <meta http-equiv="refresh" content="0;URL=index.php">

    </head>
    <body>
    <center>
    You should be logged in now. You should get automaticly to the member site.
    <p>
    If your browser does not automatically redirect you,
    click <a href="index.php">here</a> to go to the site.
    </center>
    </body>
    </html>
    ';
    ?>
    und hier noch mein Background Script (die SQL-Login hab ich hier rausgelöscht). Also die sessionhelpers.inc.php :

    PHP-Code:
    <?
    function connect()
    {
        $con= mysql_connect('localhost','','') or die(mysql_error());
         mysql_select_db('login',$con) or die(mysql_error());
    }

    function check_user($name, $pass)
    {
        $sql="SELECT UserID
        FROM users
        WHERE UserName='".$name."' AND UserPass=MD5('".$pass."')
        LIMIT 1";
        $result= mysql_query($sql) or die(mysql_error());
        if ( mysql_num_rows($result)==1)
        {
            $user=mysql_fetch_assoc($result);
            return $user['UserID'];
        }
        else
            return false;
    }

    function login($userid)
    {
        $sql="UPDATE users
        SET UserSession='".session_id()."'
        WHERE UserID=".$userid;
         mysql_query($sql);
    }

    function logged_in()
    {
        $sql="SELECT UserID
        FROM users
        WHERE UserSession='".session_id()."'
        LIMIT 1";
        $result= mysql_query($sql);
          return ( mysql_num_rows($result)==1);
    }

    function logout()
    {
        $sql="UPDATE users
        SET UserSession=NULL
        WHERE UserSession='".session_id()."'";
         mysql_query($sql);
    }

    connect();
    ?>
    Ich bedanke mich schon im Voraus für jegliche Hilfe!

  • #2
    Als erstes könntest du beim Einloggen den Benutzernamen zur Session hinzufügen, das wäre das einfachste, wenn das noch nicht in der sessionhelpers.inc.php steht, findest du die Anleitung auf www.php.net unter dem Punkt Sessions. So würde ich das machen.

    Ansonsten kannst du folgenden Code
    PHP-Code:
    function logged_in()
    {
        
    $sql="SELECT UserID
        FROM users
        WHERE UserSession='"
    .session_id()."'
        LIMIT 1"
    ;
        
    $resultmysql_query($sql);
          return ( 
    mysql_num_rows($result)==1);

    nehmen und anpassen, so dass du nicht die UserID abfragst sondern den Benutzernamen.
    Wahrheit ist unser kostbarster Besitz. Lasst uns sparsam mit ihr umgehen. Mark Twain

    Kommentar


    • #3
      Erst mal danke für die rasche Antwort.

      Also versteh ich das richtig:
      Als erstes schreibe ich ganz am Schluss von sessionhelpers.inc.php einfoch eine Zeile mit session_register(name);
      und zweitens sollte dann meine Datei, wo der User angezeigt werden soll so aussehen?
      PHP-Code:
      <?
      session_start();
      include 'sessionhelpers.inc.php';

      echo 'You are ';
      if (!logged_in())
          echo 'not ';
      echo 'logged-in.<p />' ;

      echo 'Hallo';
      echo " <a href=\"user.php".SID."\" target=\"Site".SID."\"
      >\n";

          $sql="SELECT UserName
          FROM users
          WHERE UserName='".$name."'
          LIMIT 1";
          $result = mysql_query($sql) or die(mysql_error());
            return ( mysql_num_rows($result)==1);
          $row = mysql_fetch_assoc($result); //Hier bin ich mir nicht sicher, ob ich das stehen lassen muss.
      //Es ändert an meinem Resultat jedoch nichts.

      echo " " .$row['UserName'] ;

      echo " </a>\n";


      echo '&nbsp(<font size="-1"><a href="logout.php" 

      target="_parent">Log out</a></font>)';
      ?>
      Nun ist aber das Problem, dass nach dem Hallo mal gar nichts mehr angezeigt wird und zweitens kann ich angeblich nicht zwei mal die function logged_in() verwenden, meldet mein Browser als Fehler!

      Kommentar


      • #4
        Das mit dem session_register ist theoretisch richtig, sollte man laut http://de.php.net/manual/de/function...n-register.php allerdings nicht mehr machen, anstatt dessen kannst du das ungefähr so machen
        PHP-Code:
        $_SESSION['uname']=$name 
        Wobei du uname und $name an deine Bezeichnungen anpassen müsstest. Das steht in der login-Funktion.

        Danach kannst du mit $_SESSIOB['uname'] darauf zugreifen und den ganzen SQL-Teil, den du versucht hast, weglassen
        Wahrheit ist unser kostbarster Besitz. Lasst uns sparsam mit ihr umgehen. Mark Twain

        Kommentar


        • #5
          Vielleicht wäre eine Ergänzung einer Funktionen angebracht.

          PHP-Code:
          function get_user_info()
          {
              
          $sql="SELECT UserName, UserID FROM users
              WHERE UserSession='"
          .session_id()."'
              LIMIT 1"
          ;
              
          $resultmysql_query($sql);
                return ( 
          mysql_fetch_assoc($result));


          Könntest z.B. so abfragen an einer zentralen Datei:

          PHP-Code:
          $_SESSION['u_info'] = get_user_info();

          echo 
          $_SESSION['u_info']['UserName']; 

          Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
          sondern mit den Augen das Manual zu lesen.

          Kommentar


          • #6
            Erst mal wieder Danke für eure Vorschläge. Irgendwie funktioniert das so nicht, oder ich vergesse einfach was. Also als erstes habe ich in meiner Datei sessionhelpers.inc.php die letzte Linie wieder ersetzt durch
            PHP-Code:
            $_SESSION['username']=$uname
            Ich dachte mir dabei, dass "username" ja die ID des Feldes aus der login.php ist.
            Mit dem versuche ich nun an meiner Problemstelle einzubauen. Ich habe dann Folgenden Code:
            PHP-Code:
            $sql "SELECT UserName, UserID
            FROM users
            WHERE UserName='"
            .$uname."'
             "
            ;

            $result mysql_query($sql)
            or die(
            mysql_error());
            $row mysql_fetch_assoc($result);

            echo 
            " " .$row['UserName'] ; 
            Aber so bleibt mein Resultat immer noch leer, da irgendwie nicht die ganze Datenbank durchsucht wird, sondern anscheinend nur die erste Zeile

            An xManUx die Frage, könntest du diesen Code an meine Dateien anpassen, denn sonst bin ich schlicht überfordert. Ich sehe nämlich nicht, was ich nun ändern muss und wo ich es einbauen muss.
            Gruss & Danke

            Kommentar


            • #7
              Hm, ich empfehle dir, noch einmal ein paar PHP-Grundlagen zu lernen, da scheints ehrlich gesagt noch im Argen zu liegen.
              http://www.schattenbaum.net wird hier immer wieder empfohlen, bie Fragen zu bestimmten Funktionen/Syntax http://www.php.net.

              Zu deiner Frage:
              Mit
              PHP-Code:
              $_SESSION['username']=$name
              Weist du der Session-Variable "username" den Wert der Variable "name" zu. Setzt diesen Code in die function check_user, wenn die Login-Daten verifiziert wurden.

              Dann kannst du bei der Ausgabe des eingeloggten Users dein SQL ganz vergessen, einfach:
              PHP-Code:
              echo "Hallo "$_SESSION['username']; 
              und fertig ist die Kiste.

              Mach dich mal bei php.net über Sessions schlau!
              Wahrheit ist unser kostbarster Besitz. Lasst uns sparsam mit ihr umgehen. Mark Twain

              Kommentar


              • #8
                Na na nicht rüde werden. Natürlich versteh ich nicht alle Grundlagen, aber deine Lösung funktioniert so schlicht nicht!
                Also als erstes setze ich $_SESSION['username']=$uname;
                (ich nehme uname, weil dieser Name noch nicht verwendet wird => siehe open) in die Datei, wo der Login Vorgang stattfindet.
                Dann bin ich auf meiner Site, die der User zu sehen bekommt.
                Dort setz ich nun echo "Hallo ". $_SESSION['username']; in den Code.

                Das Resultat ist schlicht, dass nur das Hallo ausgegeben wird.
                Zweitens bin ich stark an einer Lösung interessiert, die mit der SQL Datenbank komuniziert, da in einem späteren Zeitpunkt der User ja seine Daten ansehen und überarbeiten können sollte. Da habe ich das genau gleiche Problem, dass ich einfach auf den falschen Datensatz zugreiffe.
                Und selbst wenn es an meinen Kentnissen mangelt, ich habe hier dran drei Wochen gebrühtet und nach Lösungen gesucht, bovor ich das hier gepostet habe!! Ich frag nicht einfach, ohne eine Lösung gesucht zu haben! Das Problem habe ich halt zwei mal, deshalb habe ich die einfachere Variante mal gepostet.

                Kommentar


                • #9
                  Sollen wir wetten, dass meine Lösung funktioniert?

                  Schreib doch einfach mal genau das, was ich geschrieben hab.
                  Du musst doch $_SESSION[...] einen Wert zuweisen, dieser Wert ist halt der Inhalt von $name und der muss verwendet worden sein, weil da halt sonst nichts drinsteht.

                  Und wenn ich mal ehrlich sein darf, SQL-Querys à la
                  Code:
                  SELECT name FROM table WHERE name='$name'
                  sind ja jetzt nun nicht Zeichen von langer Beschäftigung mit dem Thema...

                  Ich habe dir den richtigen Code geschrieben, bitte orientiere dich erst einmal dadran bevor du da was zu verbessern versuchst.
                  Übrigens benutzt der Code immer noch SQL, nur halt an der anderen Stelle, er benutzt die Daten des Logins, die ja von der Datenbank kommen.
                  Wahrheit ist unser kostbarster Besitz. Lasst uns sparsam mit ihr umgehen. Mark Twain

                  Kommentar


                  • #10
                    Also ich habe deinen Code mal 1:1 übernommen, was ich am Anfang ja immer zuerst versuche und das klappt so nicht.
                    Also in sessionhelpers.inc.php steht nun als letzter Eintrag: $_SESSION['username']=$name;
                    und in meiner Hauptsite steht nun: echo "Hallo ". $_SESSION['username'];
                    Ich nehme deine Wette gerne an, aber so funktioniert es schlicht nicht.
                    Zu deiner Äusserung, dass mein Code nicht von der intensivsten Auseinadersetztung strotzt, weiss ich selbst. Die Site soll ja auch nur für etwa 5 Leute sein. Und zudem haben nicht alle Leute so viel Zeit. Zudem bin ich ein absoluter "amateur-anwender" am Computer. Mein Fachgebiet liegt halt ein wenig wo anders. Also bitte, ich verseth zwar lang nicht alles hier, aber ganz unfähig bin ich auch nicht.
                    Die Lösung liegt darin (so glaube ich), dass ich bei der $sql Abfrage eine Schleife einbauen muss, nur klappt das leider nicht so wie ich will. Denn das Resultat da ist dann entweder "Query was empty" oder ich habe alle Werte aus meiner Datenbank.

                    Kommentar


                    • #11
                      Original geschrieben von dju010
                      Also in sessionhelpers.inc.php steht nun als letzter Eintrag: $_SESSION['username']=$name;
                      und in meiner Hauptsite steht nun: echo "Hallo ". $_SESSION['username'];
                      NilsV hat doch geschrieben
                      Setz diesen Code in die function check_user, wenn die Login-Daten verifiziert wurden.
                      Wenn Du das gemacht hättest, würde es auch dein
                      PHP-Code:
                      echo "Hallo "$_SESSION['username']; 
                      funktionieren, da gehe ich auch jede Wette ein!
                      Zuletzt geändert von thommyk; 30.11.2005, 11:47.
                      Die zehn Gebote sind deswegen so kurz und logisch, weil sie ohne Mitwirkung von Juristen zustande gekommen sind. (Charles de Gaulle)

                      Kommentar


                      • #12
                        Nennt mich unfähig, aber irgendwie schein ich das hier noch nicht ganz zu verstehen. Also meine Funktion sieht nun neu so aus:
                        PHP-Code:
                        function check_user($name$pass)
                        {
                            
                        $sql="SELECT UserID
                            FROM users
                            WHERE UserName='"
                        .$name."' AND UserPass=MD5('".$pass."')
                            LIMIT 1"
                        ;
                            
                        $resultmysql_query($sql) or die(mysql_error());
                            if ( 
                        mysql_num_rows($result)==1)
                            {
                                
                        $user=mysql_fetch_assoc($result);
                                return 
                        $user['UserID'];
                            }
                            else
                                return 
                        false;
                            
                        $_SESSION['username']=$name;

                        Ich habe es auch so versucht:
                        PHP-Code:
                        function check_user($name$pass)
                        {
                            
                        $sql="SELECT UserID
                            FROM users
                            WHERE UserName='"
                        .$name."' AND UserPass=MD5('".$pass."')
                            LIMIT 1"
                        ;
                            
                        $resultmysql_query($sql) or die(mysql_error());
                            
                        $_SESSION['username']=$name;
                            if ( 
                        mysql_num_rows($result)==1)
                            {
                                
                        $user=mysql_fetch_assoc($result);
                                return 
                        $user['UserID'];
                            }
                            else
                                return 
                        false;

                        Irgendwie klappt das nicht!
                        Mit diesem Ausdruck echo "Hallo ". $_SESSION['username']; zeigt es mir weiterhin ausschliesslich das Hallo an. Ich danke für eure Hilfe.

                        Kommentar


                        • #13
                          Ich behaupte mal frech, dass er beim 1. Skript NIE zu der $_SESSION Zuweisung kommt.

                          Schau dir mal an, was RETURN macht bzw. was danach nicht mehr passiert.

                          Beim 2. Skript sehe ich überhaupt weist er immer "" zu.

                          Versuch drei sollte so aussehen, dass du mit der $_SESSION['UserID'] genau zwischen eins und zwei liegst.

                          Gruß

                          Le Cheffe

                          Kommentar


                          • #14
                            Du hast aber in irgend einer Form session_start() vor der Zuweisung aufgerufen, oder?
                            Wahrheit ist unser kostbarster Besitz. Lasst uns sparsam mit ihr umgehen. Mark Twain

                            Kommentar


                            • #15
                              An NilsV:
                              Wo meisnt du dass mit session_start(); ?
                              In meiner sessionhelpers Datei, steht das eigentlich niergends, hab es dann mal ganz zu oberst eingebaut, hat aber am Resultat nichts verändert.

                              An Le_Cheffe:
                              Wenn ich dich richtig verstehe, kriege ich dann aber als Resultat aber die UserID wäre jedoch nicht der UserName. Ich habe das mal verucht, aber irgendwie klappt das so auch nicht.

                              Aber in Zukunft, schreibt mir doch bitte, wo ich was genau einbauen muss, sonst entstehen nur Missverständnisse.

                              Kommentar

                              Lädt...
                              X