Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
(Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI...

Loginscript | User bleibt nicht eingeloggt

Diskussion: Loginscript | User bleibt nicht eingeloggt im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige So habe das Script geschrieben: PHP-Code: <?php $sql  =  "SELECT ID,Name,PW FROM user WHERE Name='" . $_POST [ 'User' ]. "' AND PW=md5('" . $_POST [ ...

Antwort
Alt 05.04.07, 14:50   #1 (permalink)
 
Benutzerbild von reaLInsanity
 
Registriert seit: 10.01.06
reaLInsanity Leistung: Facit NTK
reaLInsanity eine Nachricht über ICQ schicken reaLInsanity eine Nachricht über AIM schicken reaLInsanity eine Nachricht über Yahoo! schicken
Likes: 0
Loginscript | User bleibt nicht eingeloggt

Anzeige

So habe das Script geschrieben:

PHP-Code:
<?php
$sql 
"SELECT ID,Name,PW FROM user WHERE Name='".$_POST['User']."' AND PW=md5('".$_POST['password']."')"

$result mysql_query($sql) OR die(mysql_error());

if(isset(
$_POST['User'],$_POST['password'],$_POST['submit'])){
    
session_start();
    if(
mysql_num_rows($result)>0){
        
$row mysql_fetch_array ($result);
        
$_SESSION["user_id"] = $row["ID"]; 
        
$_SESSION["user_nickname"] = $row["Name"]; 

        echo 
'<br>Hallo: <b>'.$_SESSION["user_nickname"].'</b><br>';}
    else{
        echo 
"<br>User und PW stimmen nicht überein!!! <br><br>";}}
        
if(!isset(
$_SESSION["user_nickname"])){
echo 
'<table border="0" margin="0" cellspacing="0" cellpadding="0">
        <tr>
            <td><form action="?section=login" method="post"><input value="User" width="6" type="text" name="User" id="User" class="input"></td>
            <td><input value="Passwort" width="6" type="password" name="password" id="password" class="input"></td>
            <td><input type="image" src="images/buttons/login.jpg" name="submit" value="Login"></td>
            <td><input type="image" src="images/buttons/forget.jpg" name="forget" value="Login Vergessen?"></form></td>
        </tr>
         </table><br>'
;}
?>
Also er soll das Hallo $_SESSION["user_nickname"] solange anzeigen bis die Session abgelaufen ist, also praktisch eingeloggt bleiben. Und erst wenn die Session abgelaufen ist soll er das Formaular anzeigen. Aber i-wie bekmm ich es net hin ... :(
reaLInsanity ist offline   Mit Zitat antworten
Alt 05.04.07, 15:25   #2 (permalink)
 
Benutzerbild von BasicAvid
 
Registriert seit: 17.03.04
BasicAvid Leistung: Facit NTK
Likes: 2
Standard

Du musst Deine Session gleich am Anfang starten, sonst wird das nichts.
__________________
Mfg Basic Avid
- Use it or be used! -
BasicAvid ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 05.04.07, 15:41   #3 (permalink)
Themenstarter
 
Benutzerbild von reaLInsanity
 
Registriert seit: 10.01.06
reaLInsanity Leistung: Facit NTK
reaLInsanity eine Nachricht über ICQ schicken reaLInsanity eine Nachricht über AIM schicken reaLInsanity eine Nachricht über Yahoo! schicken
Likes: 0
Standard

also das einloggen an sich klappt ja. Nur wenn ich auf ne andere Seite wechsel, zeigt er das Formular wieder an, obwohl der User eigentlich eingeloggt sein sollte...
reaLInsanity ist offline   Mit Zitat antworten
Alt 05.04.07, 15:56   #4 (permalink)
 
Benutzerbild von BasicAvid
 
Registriert seit: 17.03.04
BasicAvid Leistung: Facit NTK
Likes: 2
Standard

Wie geschrieben Du musst Deine Session am Anfang starten, und das in jedem File.

Deine Session, wird ja nur gestartet wenn sich der Benutzer einloggt, also in die IF Abfrage kommt.

PHP-Code:
<?php
session_start
(); // Hier mußt Du Deine Session starten.
//Du musst in jeder Datei, wo Deine Session gültig sein soll, session_start() aufrufen.

$sql "SELECT ID,Name,PW FROM user WHERE Name='".$_POST['User']."' AND PW=md5('".$_POST['password']."')"

$result mysql_query($sql) OR die(mysql_error());

if(isset(
$_POST['User'],$_POST['password'],$_POST['submit'])){
    
//session_start(); // Dass muss hier weg!!!
    
if(mysql_num_rows($result)>0){
        
$row mysql_fetch_array ($result);
        
$_SESSION["user_id"] = $row["ID"]; 
        
$_SESSION["user_nickname"] = $row["Name"]; 

        echo 
'<br>Hallo: <b>'.$_SESSION["user_nickname"].'</b><br>';}
    else{
        echo 
"<br>User und PW stimmen nicht überein!!! <br><br>";}}
        
if(!isset(
$_SESSION["user_nickname"])){
echo 
'<table border="0" margin="0" cellspacing="0" cellpadding="0">
        <tr>
            <td><form action="?section=login" method="post"><input value="User" width="6" type="text" name="User" id="User" class="input"></td>
            <td><input value="Passwort" width="6" type="password" name="password" id="password" class="input"></td>
            <td><input type="image" src="images/buttons/login.jpg" name="submit" value="Login"></td>
            <td><input type="image" src="images/buttons/forget.jpg" name="forget" value="Login Vergessen?"></form></td>
        </tr>
         </table><br>'
;}
?>
__________________
Mfg Basic Avid
- Use it or be used! -
BasicAvid ist offline   Mit Zitat antworten
Alt 05.04.07, 16:32   #5 (permalink)
Themenstarter
 
Benutzerbild von reaLInsanity
 
Registriert seit: 10.01.06
reaLInsanity Leistung: Facit NTK
reaLInsanity eine Nachricht über ICQ schicken reaLInsanity eine Nachricht über AIM schicken reaLInsanity eine Nachricht über Yahoo! schicken
Likes: 0
Standard

klappt auch nicht cookies werden auch angenommen also der PHPSESSID-Cookie
reaLInsanity ist offline   Mit Zitat antworten
Alt 05.04.07, 16:46   #6 (permalink)
 
Registriert seit: 25.06.06
0wnZ Leistung: Facit NTK
0wnZ eine Nachricht über ICQ schicken
Likes: 0
Standard

Fehlermeldung ?
Das mit dem eingeloggt kannste ganz einfach regeln in dem du if abfrage machst, ob eine Session gesetzt ist.
PHP-Code:
session_start()
if ( 
$_SESSION['id'] ) {
//ganz viel toller Inhalt
} else { 
    echo 
'Bitter erst <a href="login.php">einloggen</a>'

0wnZ ist offline   Mit Zitat antworten
Alt 05.04.07, 21:40   #7 (permalink)
Themenstarter
 
Benutzerbild von reaLInsanity
 
Registriert seit: 10.01.06
reaLInsanity Leistung: Facit NTK
reaLInsanity eine Nachricht über ICQ schicken reaLInsanity eine Nachricht über AIM schicken reaLInsanity eine Nachricht über Yahoo! schicken
Likes: 0
Standard

Also das klappt jetzt so wie ich es wollte.

Nur hat es einen Markel, wenn ich mich auslogge un erneut einlogge muss ich mich sozusagen zwei mal einloggen, und erst dann zeigt der mir an "Hallo <nick>" etc...

woran kann das liegen? und könnte vllt jemand mal drüber blicken und vllt verbesserungsvorschläge machen?!

PHP-Code:
<?php
session_start
(); 
if(isset(
$_REQUEST['action'])=="logout"){
        unset(
$_SESSION['user_id']);
        
session_destroy();}
if(isset(
$_SESSION['user_id'])) {
        echo 
'<table border="0" margin="0" cellspacing="0" cellpadding="0">
        <tr>
            <td>Willkommen,</td>
            <td>&nbsp;'
.$_SESSION['user_nickname'].'!</td>
        </tr>
        <tr>
            <form action="?section=login&action=logout" method="post">
                <td><input type="image" src="images/buttons/logout.jpg" name="submit" value="Login"></td>
            </form>
            <form action="?section=profile" method="post">
                <td><input type="image" src="images/buttons/edit_profile.jpg" name="submit" value="Login"></td>
            </form>
        </tr>
         </table><br>'
;} 
else { 
        echo 
'<table border="0" margin="0" cellspacing="0" cellpadding="0">
                <tr>
                    <form action="?section=Login" method="post">
                        <td><input value="User" width="6" type="text" name="User" id="User" class="input"></td>
                        <td><input value="Passwort" width="6" type="password" name="password" id="password" class="input"></td>
                        <td><input type="image" src="images/buttons/login.jpg" name="submit" value="Login"></td>
                        <td><input type="image" src="images/buttons/forget.jpg" name="forget" value="Login Vergessen?"></td>
                    </form>
                </tr>
                 </table><br>'
;}

if(isset(
$_POST['User'],$_POST['password'],$_POST['submit'])){
    
$sql "SELECT ID,Name,PW FROM user WHERE Name='".$_POST['User']."' AND PW=md5('".$_POST['password']."')"
    
$result mysql_query($sql) OR die(mysql_error());

    if(
mysql_num_rows($result)>0){
        
$row mysql_fetch_array ($result);
        
$_SESSION["user_id"] = $row["ID"]; 
        
$_SESSION["user_nickname"] = $row["Name"];}
    else{
        echo 
"<br>User und PW stimmen nicht überein!!! <br><br>";}}
?>
reaLInsanity ist offline   Mit Zitat antworten
Alt 06.04.07, 00:24   #8 (permalink)
 
Benutzerbild von BasicAvid
 
Registriert seit: 17.03.04
BasicAvid Leistung: Facit NTK
Likes: 2
Standard

Hier erstmal der ein wenig verbesserte Code.

PHP-Code:
<?php
session_start
();

if (isset(
$_POST['submit'])) {
    if (isset(
$_POST['User'], $_POST['password']) && ! empty($_POST['User']) && ! empty($_POST['password']) ) {
        
$sql sprintf("
                    SELECT
                        ID,
                        Name,
                        PW
                    FROM
                        user
                    WHERE
                        Name='%s' AND PW=md5('%s')"
,
                    
mysql_real_escape_string($_POST['User']),
                    
mysql_real_escape_string($_POST['password'])
            );
            
        
$result mysql_query($sql) OR die("Datenbankfehler!");
        
$row mysql_fetch_array($result);

        if (
sizeof($row) > 0) {        
            
$_SESSION["user_id"] = $row["ID"]; 
            
$_SESSION["user_nickname"] = $row["Name"];
        } else {
            echo 
"<br>User und PW stimmen nicht überein!!! <br><br>";
        }
    } else {
        echo 
"<span style='color: #ff0000;'>Bitte geben Sie einen Benutzernamen und ein Passwort ein. </span><br />";
    }
}
 
if ( isset(
$_REQUEST['action'])=="logout") {
        unset(
$_SESSION['user_id']);
        
session_destroy();
}

if (isset(
$_SESSION['user_id'])) {
        echo 
'<table border="0" margin="0" cellspacing="0" cellpadding="0">
        <tr>
            <td>Willkommen,</td>
            <td>&nbsp;'
.$_SESSION['user_nickname'].'!</td>
        </tr>
        <tr>
            <form action="?section=login&action=logout" method="post">
                <td><input type="image" src="images/buttons/logout.jpg" name="submit" value="Login"></td>
            </form>
            <form action="?section=profile" method="post">
                <td><input type="image" src="images/buttons/edit_profile.jpg" name="submit" value="Login"></td>
            </form>
        </tr>
         </table><br>'
;
} else { 
        echo 
'<table border="0" margin="0" cellspacing="0" cellpadding="0">
                <tr>
                    <form action="?section=Login" method="post">
                        <td><input value="User" width="6" type="text" name="User" id="User" class="input"></td>
                        <td><input value="Passwort" width="6" type="password" name="password" id="password" class="input"></td>
                        <td><input type="image" src="images/buttons/login.jpg" name="submit" value="Login"></td>
                        <td><input type="image" src="images/buttons/forget.jpg" name="forget" value="Login Vergessen?"></td>
                    </form>
                </tr>
                 </table><br>'
;
}
?>
Die Überprüfung, ob ein Login gültig ist oder nicht, mußt gleich am Anfang der Seite machen. Du schickst ja die Daten ab, und zeigst dann erst wieder den HTML Teil an und danach machst Du erst die überprüfung. Was natürlich dazu führt, dass Du nicht in die IF-Abfrage kommst weil die Session Vars zu diesem Zeitpunkt noch nicht existieren.
__________________
Mfg Basic Avid
- Use it or be used! -
BasicAvid ist offline   Mit Zitat antworten
Alt 06.04.07, 08:42   #9 (permalink)
 
Benutzerbild von Eydeet
 
Registriert seit: 14.04.06
Eydeet Leistung: Facit NTK
Likes: 4
Standard

Warum nicht so:
PHP-Code:
"... WHERE Name='%s' AND PW='%s'",
         
mysql_real_escape_string($_POST['User']),
         
md5($_POST['password']) 
Eydeet ist offline   Mit Zitat antworten
Alt 06.04.07, 13:28   #10 (permalink)
Themenstarter
 
Benutzerbild von reaLInsanity
 
Registriert seit: 10.01.06
reaLInsanity Leistung: Facit NTK
reaLInsanity eine Nachricht über ICQ schicken reaLInsanity eine Nachricht über AIM schicken reaLInsanity eine Nachricht über Yahoo! schicken
Likes: 0
Standard

Danke für die Zahlreichen Hilfen. Aber eine Frage habe ich noch. kann man das eventuell so machen, das man alle User anzeigt die momentan eingeloggt sind?! Und wieviele Minuten sie auf der Seite schon verbracht haben?!
reaLInsanity ist offline   Mit Zitat antworten
Alt 06.04.07, 13:47   #11 (permalink)
 
Registriert seit: 25.06.06
0wnZ Leistung: Facit NTK
0wnZ eine Nachricht über ICQ schicken
Likes: 0
Standard

Willst du nen fertiges Skript, oder wie ?!
Überleg, was du genau haben willst. Mit MySQL, oder ohne.
Ob du das beim Login machst, oder seperat.
Immer wieder zu empfehlen ist das Quakenet PHP-Tutorial. Steht zwar nichts direkt über ein Useronline-Skript drinne, aber gibt jede menge Anregungen .


0wnZ
0wnZ ist offline   Mit Zitat antworten
Alt 06.04.07, 14:42   #12 (permalink)
Themenstarter
 
Benutzerbild von reaLInsanity
 
Registriert seit: 10.01.06
reaLInsanity Leistung: Facit NTK
reaLInsanity eine Nachricht über ICQ schicken reaLInsanity eine Nachricht über AIM schicken reaLInsanity eine Nachricht über Yahoo! schicken
Likes: 0
Standard

ja das benutze ich ja ^^ meiner Meinung nachn sehr gutes Tutorial. Und um auf deine Frage zurückzukommen ich möchte nicht son fertig gebasteltes Script, da is ja der Lerneffekt weg. Nur was mir fehlt sind son paar Gedanken oder innovative Ideen.

Ich hab ne Idee... ich könnte doch rein theoretisch ne neue Zeile Anlegen inner DB (Eingeloggt) und beim Einloggen sie auf 1 setzten und beim ausloggen auf 0. Und sie dann seperat inner Statusbar ausgeben lassen, oder?! *kling* Idee xDD

Und das mit den Minuten ist eig. auch simpel. Timestamp nehmen vom einloggen, speichern. Timestamp nehmen beim ausloggen und dann die Differenz bilden dann hat man wie lange er auf der Seite war, und dann inne DB zu den anderen Minuten addieren x)
reaLInsanity ist offline   Mit Zitat antworten
Alt 06.04.07, 16:30   #13 (permalink)
 
Registriert seit: 25.06.06
0wnZ Leistung: Facit NTK
0wnZ eine Nachricht über ICQ schicken
Likes: 0
Standard

Und was ist, wenn einfach ne Session abläuft ?
D.h. einer muss zum Essen, lässt den Browser offen. Kommt nach 1 Stunde wieder, will dann sein Profil bearbeiten und wird dann, weil die Session abgelaufen ist, auf Die Loginseite verwiesen. Trotzdem wird der User die ganze Zeit als eingeloggt angezeigt.
0wnZ ist offline   Mit Zitat antworten
Alt 06.04.07, 16:56   #14 (permalink)
Member of Honour
 
Registriert seit: 02.10.01
Indi Leistung: Z3
Likes: 0
Standard

Dann baut man eine if-schleife ein, welche die alten Sessions aus der DB-Tabelle löscht...
Indi ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Web, Network & Multimedia Palace » (Web-) Design und webbasierte Sprachen » Loginscript | User bleibt nicht eingeloggt
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
phpbb3 nur 1 Sekunde eingeloggt. Anducar Webmaster-Security 3 23.09.08 15:15
X startet nicht - Bildschirm bleibt schwarz LaNdRiX Linux/UNIX 7 25.01.08 23:33
Grafikkartentreiber Trident 9525DVD bleibt nicht installiert valenterry Windows 0 09.04.07 15:50
Outlook 2003 Startet nicht, bleibt hängen. creeper2006 Applikationen 8 02.12.06 20:06
[PHP] Permanent eingeloggt sein Needa Code Kitchen 1 18.01.05 21:29


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61