• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Mailfunktion für eingeloggte user

Werbung:
eventuell so ? :
PHP:
<?php session_start();
$verbindung = mysql_connect("localhost", "root" , "") 
or die("Verbindung zur Datenbank konnte nicht hergestellt werden"); 
mysql_select_db("test") or die ("Datenbank konnte nicht ausgewählt werden"); 
$username = $_POST["username"]; 
$password = $_POST["password"]; 
$abfrage = "SELECT username, password FROM test WHERE username = '".mysql_real_escape_string($username)."' AND password = '".mysql_real_escape_string($passwort)."'LIMIT 1"; 
$ergebnis = mysql_query($abfrage) or die("Statement fehlerhaft: ".$sql);
$row = mysql_fetch_object ($ergebnis);
 
if($row->password == $password) 
    {  
$_SESSION['username'] = $_POST['username']; 
echo " Login erfolgreich. <br> <a href=\"Geheim.php\">Gesch&uuml;tzer Bereich</a> eingeloggt als  $username";
    } 
else 
    { 
    echo "Benutzername und/oder Passwort waren falsch. <a href=\"login.html\">Login</a>"; 
 echo "<br />Ihre eingegebenen Daten :   <br />Benutzername : $username<br />Passwort : $password ";
    } 
 
?>
 
hmm da ^^ zeigt er aber immer wenn ich das richtige eingebe das das Falsch war benutzername oder passwort ... aber is gibt keine mysql erros
 
Werbung:
Das, was du da oben machst, macht irgendwie keinen Sinn...

Du lässt dir Username und Passwort des Accounts ausgeben, wo Username und Passwort den eingegebenen Werten entsprechen... Dann überprüfst du, ob das eingegebene Passwort mit dem hinterlegten Passwort übereinstimmt...

Wieso lässt du dir nicht einfach z.B. die ID und den Benutzernamen zurückgeben, die Prüfung, ob der Username und das Passwort stimmen, hast du doch schon IM Query. Wenn das Passwort falsch ist, kommt kein Benutzer zurück, dann kannst du ausgeben, dass die Kombination aus Username und Passwort nicht in der Datenbank gefunden wurden...

Und wieso escapest du im Query? Du kannst die Eingaben doch bei der Variablendeklarierung direkt escapen, nämlich so:

PHP:
$username = mysql_real_escape_string($_POST["username"]);

Und ich persönlich würde bei dem Feld 'Username' noch einen trim() einbauen =)
 
so also ich hab jetzt jedes 18 wort verstanden ... ich will NUR wissen wie ich das machen kann das username UND passwort überprüfd werden ... der andere spezifische kram kommt später :=)
 
Das hab ich dir geschrieben. Im Query ist deine Prüfung. Du suchst nach einem Datensatz, wo der Username mit dem Eingegebenen und das Passwort mit dem Eingegebenen übereinstimmt. Wenn der Username oder das Passwort falsch ist, bekommst du keinen Datensatz zurück, deswegen macht deine Prüfung danach keinen Sinn! Prüfe, wieviele Datensätze du zurückbekommst, wenn du nur einen Datensatz zurückbekommst, war der Login erfolgreich...

Funktion dafür: PHP: mysql_num_rows - Manual
 
Werbung:
gibs dafür auch ein bespiel pls ? das mit mysql_num_rows hab ich schon verstanden und so aber ich bin nicht so gut im sachen aus php bauen ... :(
 
Beispiel anhand deines oben geposteten Codes:

PHP:
<?php session_start();
$verbindung = mysql_connect("localhost", "root" , "") 
or die("Verbindung zur Datenbank konnte nicht hergestellt werden"); 
mysql_select_db("test") or die ("Datenbank konnte nicht ausgewählt werden"); 
$username = mysql_real_escape_string($_POST["username"]); 
$password = mysql_real_escape_string($_POST["password"]); 
$abfrage = "SELECT username, password FROM test WHERE username = '$username' AND password = '$passwort'"; 
$ergebnis = mysql_query($abfrage) or die("Statement fehlerhaft: ".$abfrage);
$anzahl = mysql_num_rows($ergebnis);
if($anzahl = 1){
    $row = mysql_fetch_object ($ergebnis);
    $_SESSION['username'] = $username; 
    echo " Login erfolgreich. <br> <a href=\"Geheim.php\">Gesch&uuml;tzer Bereich</a> eingeloggt als  $username";
} elseif($anzahl > 1){
    echo " Es ist ein Fehler aufgetreten.";
} else {
    echo "Benutzername und/oder Passwort waren falsch. <a href=\"login.html\">Login</a>"; 
    echo "<br />Ihre eingegebenen Daten :   <br />Benutzername : $username<br />Passwort : $password ";
} 
 
?>
 
cool THX :) Nun gehts ... Nur eine Frage habe ich noch : wiso steht ganz oben session_start(); ?
Und muss da dann nicht noch stehen
$_POST["username"] = $_SESSION["username"] ;
$_POST["password"] = $_SESSION["password"] ;


müsste das da nich noch stehen damit ich das auch in den darauf folgenden seiten wider aufrufen kann ?


 
Werbung:
wie man sich denken kann sagt session_start nichts anderes aus, als dass du dem Server sagst: ich brauche auf dieser Seite zugriff auf die Session mit der Session Id xyz (Die Session Id wird in den meisten Fällen im Hintergrund mitgetragen) und wenn noch keine Session existiert, wird Eine angelegt.
Und die Session kannst du dir als datei vorstellen, die auf dem Server liegt und in der du Text zwischenlagern kannst.
Deine Session Id behälst du, solange du den Browser offen hast (manche Seite speichern diese Id für dich und du kriegst sie dann wieder beim erneuten einloggen zugewiesen)
Heisst im Normalfall ist diese "Session-Datei" Solange für dich Verfügbar, solange dein Browser offen ist.
Somit kannst du dir das $_POST["username"] = $_SESSION["username"] sparen, da du direkt auf die Session Daten zugreifen kannst solange am Anfang session_start() steht.
Gilt schreibend als auch lesend.


Und dein Vorgang sieht ja so aus:

* Du kommst von dem Login Formular
* Nun hast du Daten vom Formular in der $_POST Variable
* Du prüfts ob der User eingeloggt werden kann mit seinen Daten ($_POST Daten gegen Datenbank vergleichen)
+ Erfolgsfall: Du setzt die Session (dafür brauchst du session_start)
* Link zum internen Bereich
- Fehlerfall: Zeige Formular an

Diesen Vorgang musst du dir vor Augen holen. Dann weisst du wieso es so ist :)
 
Was mir gerade noch aufgefallen ist: Bei dem Script das du und später dann ich gepostet haben, enthält einen fatalen Fehler. Als Passwort-Variable wird '$password' deklariert, im Query wird aber '$passwort' aufgerufen... Ich hoffe, du hast diesen Fehler behoben? Das wird wahrscheinlich der Auslöser für dein vorheriges Problem gewesen sein...
 
Oh nein !! ?!?!?!?!?! Jetzt bin ich total deprimiert ! Den Fehler hab ich nicht verbsssert aber konnte mich trotzdem einloggen ?! WHYYYY
 
Werbung:
So und das mit den sessions will ich nochmal wissen : Ich kann jetzt einfach ohne weiteres auf die sendmail.html/.php zugreifen und emails versenden ... Und da soll aber erst geprüft werden als wer und ob ich eingeloggt bin ... auserdem will ich wissen wie mein login-name ist weil ich das ja brauche weil wenn der empfanger sich einloggt soll ja dort stehen von wem die mail ist ... Also hier der code für die sendmail.php :
<?php
$empfaenger = $_POST["empfaenger"];
$nachricht = $_POST["nachricht"];
$verbindung = mysql_connect("localhost", "root" , "")
or die("Verbindung zur Datenbank konnte nicht hergestellt werden");
mysql_select_db("user") or die ("Datenbank konnte nicht ausgewählt werden");
$sqlbefehl = "INSERT INTO $empfaenger (absender, nachricht) values ('$empfaenger', '$nachricht')";
$result = mysql_query($sqlbefehl) or die(mysql_error());
?>
 
Den Absender bekommst du mit

PHP:
$absender = $_SESSION["name"];

wenn du ihn beim Login aus der Datenbank geholt hast und dann in die Session gespeichert hast, mit

PHP:
$_SESSION["name"] = $row->username;
 
Werbung:
könnte ich ihn nicht auch so beim login rausholen : ?
$_SESSION["name"] = $_POST["username"];
 
Ja, aber ich würde dann eher

PHP:
$_SESSION["name"] = $username;

verwenden, da hier der Username schon escaped ist ^^
 
und kann mir nochmal jemand pls sagen wie ich mich auslogge ? irgendwas mit session destroy oder so ...
 
Werbung:
hab grad nochmal was getestet und nun bin ich deprimiert (mal wider) wenn ich Falsches passwort angebe kann ich mich trotzdem einloggen !

EDIT : Ich krig gleich die Krise : der loggtsich sogar ein wenn username und passwort Falsch sind !!!

EDIT2: Hier nochmal der code :
PHP:
<?php session_start();
$verbindung = mysql_connect("localhost", "root" , "") 
or die("Verbindung zur Datenbank konnte nicht hergestellt werden"); 
mysql_select_db("test") or die ("Datenbank konnte nicht ausgewählt werden"); 
$username = mysql_real_escape_string($_POST["username"]); 
$password = mysql_real_escape_string($_POST["password"]); 
$abfrage = "SELECT username, password FROM test WHERE username = '$username' AND password = '$password'"; 
$ergebnis = mysql_query($abfrage) or die("Statement fehlerhaft: ".$abfrage);
$anzahl = mysql_num_rows($ergebnis);
if($anzahl = 1){
$row = mysql_fetch_object ($ergebnis);
$_SESSION['username'] = $username; 
echo " Login erfolgreich. <br> <a href=\"Geheim.php\">Gesch&uuml;tzer Bereich</a> eingeloggt als $username";
} elseif($anzahl > 1){
echo " Es ist ein Fehler aufgetreten.";
$_SESSION["name"] = $username; 
} else {
echo "Benutzername und/oder Passwort waren falsch. <a href=\"login.html\">Login</a>"; 
echo "<br />Ihre eingegebenen Daten : <br />Benutzername : $username<br />Passwort : $password ";
} 
 
?>
 
Zuletzt bearbeitet:
Ausloggen kannst du dich ganz einfach. Erstelle eine Datei logout.php und darin machst du ein session_destroy(); und anschließend eine Weiterleitung auf die Loginseite.

Warum das nicht funktioniert, kann ich nicht sagen. Lass dir mit echo mal $_POST["username"] und $_POST["password"] ausgeben.
 
Zurück
Oben