Bitte bewerten

cd_brenner

Aktives Mitglied
Ich glaub da is no wo a fehler drinnen, können sich das mal die PHP Profis anschaun??

index.php:
<html>
<head>
<title></title>
<meta name="author" content="Markus">
<meta name="generator" content="Ulli Meybohms HTML EDITOR">
</head>
<body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">


<form action="checkuser.php" method="post">
Benutzername: <input type="text" name="name" size="30">


Kennwort: <input type="password" name="pwd" size="30">


<input type="submit" value="Absenden">
</form>
</body>
</html>
(einfaches Formular zum eingeben der Benutzerdaten)

checkuser.php:
<?php
// Session starten
session_start ();

$connectionid = mysql_connect ("localhost", "username", "passwort");
if (!mysql_select_db ("xrayserver", $connectionid))
{
die ("Keine Verbindung zur Datenbank");
}

$sql = "SELECT name, passwort, email, status FROM forum_users WHERE name = '".$_POST["name"]."' AND (passwort = '".$_POST["pwd"]."')";
$result = mysql_query ($sql);

if (mysql_num_rows ($result) > 0)
{
$data = mysql_fetch_array ($result);

// Sessionvariablen erstellen und registrieren
$_SESSION["name"] = $data[0];
$_SESSION["email"] = $data[2];
$_SESSION["status"] = $data[3];


header ("Location: intern.php");
}
else
{
header ("Location: fehler.php");
}
?>
(Prüft ob es in der DB eine passende Kombination aus eingegebenen Benutzernamn und Passwort gibt. Wenn ja wirst du auf die geheime seite weitergeleitet, wenn nein zur fehlerseite. Nebenbei werden noch sessionvariablen erstellt, damit man in den geheimen seiten z.B den usernamen ausgeben kann)

logout.php:
<?php

session_start (); // Session starten.

$user_eingeloggt = false;
session_register ("user_eingeloggt");

?>

<html>
<head>
<meta http-equiv="Refresh" content="1; url=index.php">
</head>

<body>
Sie werden zur Startseite weitergeleitet…
</body>
</html>
(Die Session wird zerstört und man wird zur startseite weitergeleitet)

code für alle geheimen seiten:
<?php

session_start (); // Session starten.

if ((session_is_registered ("user_eingeloggt")) AND ($user_eingeloggt)) {
// Code, wenn der Benutzer eingeloggt ist.
// z.B. Ausgabe der Webseite (echo „<html>...“)

echo "Das ist die geheime Seite";
echo "Registriert als:", $_SESSION["name"];
echo "<a href=\"logout.php\">Ausloggen</a>";

} else {
// Code, wenn der Benutzer nicht eingeloggt ist.
// z.B. Fehlermeldung
}

?>

( Dieser Code kommt auf alle geheimen Seiten. Er gibt den seiteninhalt aus wenn man eingeloggt ist, wenn man ausgeloggt ist gibt er eine Fehlermeldung aus.

Vielen Dank, markus
 
Es sieht gut aus, ich habe dein script nicht getestet aber ich sehe ein logisches fehler.

In dein checkuser.php werden 3 sessions erstellt.
- das ist gut -- für mich wäre es genug die UID aber jeder seine eigene methode.
$_SESSION["name"] = $data[0];
$_SESSION["email"] = $data[2];
$_SESSION["status"] = $data[3];

Danach in dein code für geheimen seiten

if ((session_is_registered ("user_eingeloggt")) AND ($user_eingeloggt)) {
session_is_registered("user_eingeloggt") gibt false weil die user_eingeloggt session wurde in checkuser.php nicht erstellt.

checkuser.php
....
$_SESSION["status"] = $data[3];
$_SESSION["user_eingeloggt"] = true;

In dein code für geheimen seiten ist genug
if ($_SESSION["user_eingeloggt"]) {
//logged in
} else {
//not logged in
}

Übrigens, als tipp, würde ich dich empfehlen http://adodb.sourceforge.net/ ADODB für PHP damit bist du nicht von MySQL abhängig und kannst du deine seiten einfacher zu andere datenbanken portieren.

Gruss
Steven
 
Danke für deine Antwort.
Mir ist sowiso aufgefallen, dass du echt genial bist.

Der Fehler ist mir auch schon aufgefallen.
Das Login klappt ja, nur werde ich dann sofort wieder ausgeloogt, weils die Session nicht gibt.
Werd deinen Vorschlag jetzt ausprobieren.

Was mir nicht einleuchtet:
if ($_SESSION["user_eingeloggt"])

Könnte das nicht so heissen:
if ($_SESSION["user_eingeloggt"]==true)

Aber ich werds so lassen, denn du wirst es sicher besser wissen!!

THX Markus
 
QUOTE Was mir nicht einleuchtet:
if ($_SESSION["user_eingeloggt"])

Könnte das nicht so heissen:
if ($_SESSION["user_eingeloggt"]==true)


Beide sind richtig
Das ist ein boolean constructor wenn true dann, das kannst du nur mit boolean variablen machen.
Mit der zeit wirst du als programmierer faul und willst weniger eintippen
wink.gif


Gruss
Steven
 
Wenn du die Formulardaten wie du 1:1 in ein SQL-Query einbettest, öffnest du Tür und Tor für SQL-Injections. Das soll heissen, jeder kann beliebigen SQL-Code einschleusen. Was dadurch passieren kann, sollte klar sein..

Benutze z.B. mysql_escape_string um das Risiko zu umgehen.
 
Zurück
Oben