PHP XAMPP Login mit MySQL Datenbank

Bullz

Commander
Registriert
Okt. 2008
Beiträge
2.128
Habe ein kleines PHP Programm geschrieben was anfangs nur mit fixen Logindaten funktionierte...

//if($_POST["vn"] == "Hans" && $_POST["pw"] == "bingo")

nun versuche ich das gleiche aber mit einer mysql Datenbank im Hintergrund. Habe eine Datenbank erstellt, leider klappt es nicht . Wer ne Idee an was es liegen könnte ?

Code:
<?php    session_start();
    session_destroy();
    $_SESSION = array();
?>
<html>
<body>
<form action ="sc_schutz_b.php" method = "post">
    <p><input name="vn" /> Vorname</p>
    <p><input type ="password" name = "pw" />Passwort</p>
    <p><input type = "submit" /><input type = "reset" /></p>
</form>
</body>
</html>

Code:
<?php       session_start();
    if(isset($_POST["vn"]))
        mysql_connect("", "root");
        mysql_select_db("firma");
        $res = mysql_query("select * from Logindaten");
        $dsatz = mysql_fetch_assoc($res);
            if($_POST["vn"] == $dsatz["Benutzername"] && $_POST["pw"] == $dsatz["Kennwort"]
            //if($_POST["vn"] == "Hans" && $_POST["pw"] == "bingo")
            $_SESSION["vn"] = $_POST["vn"];
        if(!isset($_SESSION["vn"]))
            exit("Kein Zugang <br /><a href='sc_schutz_a.php'>zum Login</a>");


?>        
<html>
<body>
<h3>Start-Seite</h3>
<?php
    echo "<p>Hallo " . $_SESSION["vn"] . "</p>";
?>


<p><a href="sc_schutz_c.php">Zur beliebigen Seite</a></p>
<p><a href="sc_schutz_a.php">Logoff</a></p>
</body>
</html>

Parse error: syntax error, unexpected '$_SESSION' (T_VARIABLE) in /Applications/XAMPP/xamppfiles/htdocs/sc_schutz_b.php on line 11
 
Hallo,

wieso machst Du "$_SESSION" als Array und nicht als normale Variable?

Lösche "$_SESSION = array();" und "$_SESSION["vn"] = $_POST["vn"];" veränderst Du zu "$_SESSION = $_POST["vn"];". Außerdem ist der "_" wirklich nötig?


Gruß
Frog33r
 
Hallo,

@SymA: ich meine bei "$_SESSION". ($session)


Gruß
Frog33r
 
Frog33r schrieb:
Hallo,

wieso machst Du "$_SESSION" als Array und nicht als normale Variable?

Lösche "$_SESSION = array();" und "$_SESSION["vn"] = $_POST["vn"];" veränderst Du zu "$_SESSION = $_POST["vn"];". Außerdem ist der "_" wirklich nötig?

$_SESSION ist, genau wie $_POST oder $_GET, eine Systemvariable... und immer ein Array.


Was das eigentliche Problem angeht:
PHP:
if($_POST["vn"] == $dsatz["Benutzername"] && $_POST["pw"] == $dsatz["Kennwort"]
Da fehlt ne schließende Klammer.

PHP-Fehler sind oftmals in der Zeile über dem, was die Fehleranalyse ausspuckt, zu finden.
 
Man MUSS den _ machen, dann die Superglobal $_SESSION heißt nun einmal $_SESSION... du schreibst ja auch nicht $POST sondern $_POST.
 
Und noch eine Frage:

session_start();
session_destroy();

Warum steht destroy hinter dem Startbefehl? Wäre es nicht logischer dies am Ende eines Scripts zu nutzen?

http://php.net/manual/de/function.session-destroy.php

Mit der Session zusammenhängende globale Variablen und das Session-Cookie werden nicht gelöscht. Um wieder Session-Variablen verwenden zu können, muss session_start() aufgerufen werden.

Funktioniert deine Session trotzdem? Wenn php.net nicht die Unwahrheit schreibt, dann sollte die Session danach kaputt sein und müsste neu gestartet werden.
 
Suxxess schrieb:
Und noch eine Frage:

session_start();
session_destroy();

Warum steht destroy hinter dem Startbefehl? Wäre es nicht logischer dies am Ende eines Scripts zu nutzen?

laut meinen quellen kann nur eine angefangen Session wieder zerstört werden. Deswegen stellt man so sicher das das Ding sicher versenkt wird ;) bin aber php Neuling.


1.) thx es funktioniert. Ich fresse einen Besen das das klappt ... leider gibst noch einen Hacken... wenn ich von sc_schutz_c.php wieder zur sc_schutz_b.php zurück klicke bekomme ich folgende Fehlermeldung

Code:
<?php   
    session_start();
    if(!isset($_SESSION["vn"]))
        exit("Kein Zugang<br /><a hef='sc_schutz_a.php'>zum Login</a>");
?>        
<html>
<body>
<h3>Start-Seite</h3>
<?php
    echo "<p>Hallo " . $_SESSION["vn"] . "</p>";
?>
<p><a href="sc_schutz_b.php">Zur Start-Seite</a></p>
<p><a href="sc_schutz_a.php">Logoff</a></p>
</body>
</html>

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in /Applications/XAMPP/xamppfiles/htdocs/sc_schutz_b.php on line 7

2.) Was auch komisch ist. Nur der erste Benutzername Passwort aus meiner MYSQL Datenbank funktionieren. Dachte mir sowieso das ich da eine while Schleife draufpacken muss. Wenn ich aber so mache funktioniert leider überhaupt kein login mehr

Code:
    while($dsatz = mysql_fetch_assoc($res));
            {
                if($_POST["vn"] == $dsatz["Benutzername"] && $_POST["pw"] == $dsatz["Kennwort"])
                //if($_POST["vn"] == "Hans" && $_POST["pw"] == "bingo")
                $_SESSION["vn"] = $_POST["vn"];
            }
                if(!isset($_SESSION["vn"]))
                exit("Kein Zugang <br /><a href='sc_schutz_a.php'>zum Login</a>");
 
Zuletzt bearbeitet:
Ich gebe dir einen Tipp: Du solltest dir zuerst die Daten besorgen und dann schauen, ob die so in der Datenbank stehen. Nicht einfach die Datenbank einlesen und dann vergleichen, das ist der falsche Ansatz.

Außerdem kann dir mysql_num_rows weiterhelfen.

Code:
$vn = mysql_real_escape_string($_POST["vn"]);
$pw = mysql_real_escape_string($_POST["pw"]);

$q = "SELECT vn FROM Logindaten WHERE Benutzername = '$vn' AND Kennwort = '$pw'";
$r = mysql_query($q);

if(mysql_num_rows($r) == 1) {
   [LOGIN]
} else {
   [FEHLER]
}
 
Zuletzt bearbeitet:
Nächster Tip: Mach es gleich richtig.
Speichere Passwörter grundsätzlich gehasht in der Datenbank und vergleiche den Hash der Usereingabe mit dem Hash in der DB. Speichere NIE NIE NIE Klartext.
Nutze nie ungeprüfte POST- oder GET-Werte in Datenbank-Abfragen. Sonst endest du wie Sony, ein Hack nach dem anderen. Nennt sich SQL Injection, ist peinlich.
 
Zurück
Oben