| (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 [ ...
 |
05.04.07, 14:50
|
#1 (permalink)
|
Registriert seit: 10.01.06 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 ... :( |
| |
05.04.07, 15:25
|
#2 (permalink)
|
Registriert seit: 17.03.04 Likes: 2 | Du musst Deine Session gleich am Anfang starten, sonst wird das nichts.
__________________ Mfg Basic Avid
- Use it or be used! - |
| | | |
| | HaBOT
| - Anzeige - |
| |
05.04.07, 15:41
|
#3 (permalink)
| Themenstarter
Registriert seit: 10.01.06 Likes: 0 | 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... |
| |
05.04.07, 15:56
|
#4 (permalink)
|
Registriert seit: 17.03.04 Likes: 2 | 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! - |
| |
05.04.07, 16:32
|
#5 (permalink)
| Themenstarter
Registriert seit: 10.01.06 Likes: 0 | klappt auch nicht  cookies werden auch angenommen also der PHPSESSID-Cookie |
| |
05.04.07, 16:46
|
#6 (permalink)
|
Registriert seit: 25.06.06 Likes: 0 | 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>' }
|
| |
05.04.07, 21:40
|
#7 (permalink)
| Themenstarter
Registriert seit: 10.01.06 Likes: 0 | 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> '.$_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>";}} ?> |
| |
06.04.07, 00:24
|
#8 (permalink)
|
Registriert seit: 17.03.04 Likes: 2 | 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> '.$_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! - |
| |
06.04.07, 08:42
|
#9 (permalink)
|
Registriert seit: 14.04.06 Likes: 4 | Warum nicht so: PHP-Code: "... WHERE Name='%s' AND PW='%s'", mysql_real_escape_string($_POST['User']), md5($_POST['password'])
|
| |
06.04.07, 13:28
|
#10 (permalink)
| Themenstarter
Registriert seit: 10.01.06 Likes: 0 | 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?! |
| |
06.04.07, 13:47
|
#11 (permalink)
|
Registriert seit: 25.06.06 Likes: 0 | 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 |
| |
06.04.07, 14:42
|
#12 (permalink)
| Themenstarter
Registriert seit: 10.01.06 Likes: 0 | 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) |
| |
06.04.07, 16:30
|
#13 (permalink)
|
Registriert seit: 25.06.06 Likes: 0 | 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. |
| |
06.04.07, 16:56
|
#14 (permalink)
| | Member of Honour
Registriert seit: 02.10.01 Likes: 0 | Dann baut man eine if-schleife ein, welche die alten Sessions aus der DB-Tabelle löscht... |
| |  | | |
| | | - Anzeige - |
| | [HaBo]
» Web, Network & Multimedia Palace
» (Web-) Design und webbasierte Sprachen
»
Loginscript | User bleibt nicht eingeloggt
| Themen-Optionen | | | | Ansicht | Linear-Darstellung |
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. HTML-Code ist aus. | | |
|