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

Script übergibt nicht Session :/

Marce31

Neues Mitglied
Hai Leute auf meiner Test-Homepage Frame-Test könnt ihr es mal

Testen: "Username: 1" "Passwort: 1"

so bald man auf "Geschützer Bereich" drückt kommt "Bitte erst einloggen".

Hier ist der Code.

login.php
PHP:
<?php
session_start();
?>

<?php
$verbindung = mysql_connect("****", "*****" , "****")
or die("Verbindung zur Datenbank konnte nicht hergestellt werden");
mysql_select_db("*****") or die ("Datenbank konnte nicht ausgewählt werden");

$username = $_POST["username"];
$passwort = md5($_POST["password"]);

$abfrage = "SELECT username, password FROM *** WHERE username LIKE '$username' LIMIT 1";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis); 


if($row->password == $password)
    {
    $_SESSION["username"] = $username;
    echo "Login erfolgreich. <br> <a href=\"geheim.php\">Geschützer Bereich</a>";
    }
else
    {
    echo "Benutzername und/oder Passwort waren falsch. <a href=\"rechts.html\">Login</a>";
    }

?>
geheim.php
PHP:
<?php
session_start();
?>

<?php
if(!isset($_SESSION["username"]))
   {
   echo "Bitte erst <a href=\"rechts.html\">einloggen</a>";
   exit;
   }
?>
 
Achte auf deine Variablennamen.
Vor session_start() mal das eingeben:
PHP:
error_reporting(E_STRICT);

Außerdem wirst du ein paar andere Fehler haben:
Du überprüfst nicht, ob es den Benutzer in $username auch wirklich gibt.
Du solltest daher
PHP:
$sql = "SELECT username, password FROM *** WHERE username = '$username' LIMIT 1"; // Hier = statt like.
// Wenn du sauber arbeiten würdest, bräuchstest du das limit gar nicht.

$result = mysql_query($sql);
if ($row = mysql_fetch_assoc($result) /* Warum benutzt du object? */) {
  /* HIer kannst du dann mit $row vergleichen. */
} else {
  /* Username gibt es gar nicht. */
}

Außerdem überprüfst du nicht, ob das Formular wirklich gesendet wurde.

Schau dir mal das an:
mysql_fetch_assoc()
isset()
error_reporting()

Ein letzter Tipp:

PHP:
<?php
session_start();
?>

<?php
$verbindung = mysql_connect("****", "*****" , "****")
Geht auch kürzer:
PHP:
<?php
session_start();
$verbindung = mysql_connect("****", "*****" , "****")
 
Zuletzt bearbeitet:
Danke für die Antworten!!

aber ich blick das noch nicht mit
PHP:
$result = mysql_query($sql); 
if ($row = mysql_fetch_assoc($result) /* Warum benutzt du object? */) { 
  /* HIer kannst du dann mit $row vergleichen. */ 
} else { 
  /* Username gibt es gar nicht. */ 
}
PHP:
<?php
error_reporting(E_STRICT);  
session_start();
?>

<?php

 <?php 
session_start(); 
$verbindung = mysql_connect("****", "*****" , "****")
or die("Verbindung zur Datenbank konnte nicht hergestellt werden");
 mysql_select_db("****") or die ("Datenbank konnte nicht ausgewählt werden");

$username = $_POST["username"];
$passwort = md5($_POST["password"]);

$abfrage = "SELECT username, password FROM login WHERE username = '$username' LIMIT 1";
$ergebnis = mysql_query($abfrage);


if($row->password == $password)
    {
    $_SESSION["username"] = $username;
    echo "Login erfolgreich. <br> <a href=\"geheim.php\">Geschützer Bereich</a>";
    }
else
    {
    echo "Benutzername und/oder Passwort waren falsch. <a href=\"rechts.html\">Login</a>";
    }

?>
 
Wenn du
PHP:
$res = mysql_query('select ... where username = \''.$username.'\'');
$row = mysql_fetch_assoc($res);
echo $row['username'];
hast.
Gehst du davon aus, dass es den User aus $username wirklich in der Datenbank gibt.
Aber was wenn es den Benutzernamen nicht gibt? Dann kannst du es nicht ausgeben.

Das if ($row = mysql_fetch_assoc($res)) {} überprüft OB es auch einen Eintrag in der Datenbank gibt. Wenn nicht, dann wird das if() eben nicht ausgeführt.
 
Zurück
Oben