PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : login system .. fehler!!!



johnpatcher
02-01-2004, 15:42
also ich bin gerade dabei ein login system zu machen und bin noch ein ziemlicher n00b in sachen php und mysql! also ich hab eine datenbank mit folgendem befehl erstellt!


CREATE TABLE benutzerdaten (
Id Int(11) NOT NULL auto_increment,
Nickname VarChar(50) NOT NULL default '',
Kennwort VarChar(50) NOT NULL default '',
Nachname VarChar(50) NOT NULL default '',
Vorname VarChar(50) NOT NULL default '',
EMail VarChar(50) NOT NULL default '',
PRIMARY KEY (Id)
)



das hat auch ohne probz funktioniert und auch mit daten füllen, ging ohne probleme!

jetzt habe ich eine html datei folgendes eingebaut!

in die erste zeile :


<?php session_start (); ?>
dann in den body bereich, dass hier

<?php
if (isset ($_REQUEST["fehler"]))
{
echo "Die Zugangsdaten waren ungültig.";
}
?>
und da wo das formular hinkommen soll das hier:


<form name="loginform" method="post" action="login.php" >
<div align="center">
Benutzername:<br>
<input type="text" name="name" size="12" maxlength="20" tabindex="1" border="0"><br>Password:<br>
<input type="password" name="pwd" size="12" maxlength="20" tabindex="2" border="0"><br>
<br>
<input type="submit" name="loginsubmit" value="Login!" tabindex="3" border="0">

</form>
so und die "login.php" schaut so aus:


<?php
// Session starten
session_start ();

// Datenbankverbindung aufbauen
$connectionid = mysql_connect ("127.0.0.1", "XXX", "XXX");
if (!mysql_select_db ("XXX", $connectionid))
{
die ("Keine Verbindung zur Datenbank");
}

$sql = "SELECT ".
"Id, Nickname, Nachname, Vorname ".
"FROM ".
"benutzerdaten ".
"WHERE ".
"(Nickname LIKE '".$_REQUEST["name"]."') AND ".
"(Kennwort = '".md5 ($_REQUEST["pwd"])."')";
$result = mysql_query ($sql);

if (mysql_num_rows ($result) > 0)
{
// Benutzerdaten in ein Array auslesen.
$data = mysql_fetch_array ($result);

// Sessionvariablen erstellen und registrieren
$_SESSION["user_id"] = $data["Id"];
$_SESSION["user_nickname"] = $data["Nickname"];
$_SESSION["user_nachname"] = $data["Nachname"];
$_SESSION["user_vorname"] = $data["Vorname"];

header ("Location: intern.php");
}
else
{
header ("Location: index.php?page=fehler");
}
?>
so das ganze habe ich irgendwo aus dem internet gezogen, aber es kommt folgender fehler:


Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /home/www/web51/html/cod/login.php:4) in /home/www/web51/html/cod/login.php on line 6

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/www/web51/html/cod/login.php:4) in /home/www/web51/html/cod/login.php on line 6

Warning: Cannot modify header information - headers already sent by (output started at /home/www/web51/html/cod/login.php:4) in /home/www/web51/html/cod/login.php on line 39
also weil bei mir noch mehr drinsteht (in den datein), kann es sein, dass die zeilennummern nicht übereinstimmen, deswegen schreib ich hier nochmal die betroffenen zeilen auf:

zeile 6:
session_start ();zeile 39:
header ("Location: index.php"); wo liegt hier der fehler? ich seh leider keinen ...

danke im voraus

johnpatcher

peterschen
02-01-2004, 15:46
Hallo,

ich steig zwar nicht ganz durch,
ABER der Fehler "headers already sent by"
ist typisch dafür, das du schon irgendeine
Ausgabe an den Client gesendet hast.

Und sei es nur ein leerzeichen.
Der Aufruf
session_start();
_muss_ als aller erstes an den Browser gesendet werden
_bevor_ irgenetwas anderes gesendet wird.

Grüße
Christoph

magpie
02-01-2004, 16:23
Hi

Es ist möglich dass du bei header("Location: blabla") die absolute URL angeben musst.
Bei php.net steht noch folgendes:

Anmerkung: HTTP/1.1 verlangt einen absoluten URI inkl. dem Schema, Hostnamen und absoluten Pfad als Argument von Location:, aber manche Clients akzeptieren auch relative URIs. ...

Noch eine weitere Frage. Was ist $_REQUEST[]?

"(Nickname LIKE '".$_REQUEST["name"]."') AND ".
"(Kennwort = '".md5 ($_REQUEST["pwd"])."')";
Du sendest dein Formular ja mit POST. Um auf die Werte zugreiffen zu können müsstest du dann $_POST['name'] nehmen.


magpie

johnpatcher
02-01-2004, 19:19
ich habe es scho gelöst! es stand noch vor "session_start ();" ein include befehl, wahrscheinlich geht es so nicht! naja trotzdem danke!

jonpatcher

Stanislaus
02-01-2004, 21:29
Es ist hundertprozentig kein Problem vor dem session_start() ein include() oder require() aufzurufen. Du musst nur drauf achten, daß in der includierten Datei keine Leerzeichen außerhalb der php Tags stehen (passiert mir immer wieder gerne) und auch echos, prints o.ä. dürfen natürlich nicht durch das include aufgerufen werden.

Bis neulich ...

mehlvogel
03-01-2004, 20:33
Original geschrieben von magpie

Noch eine weitere Frage. Was ist $_REQUEST[]?

"(Nickname LIKE '".$_REQUEST["name"]."') AND ".
"(Kennwort = '".md5 ($_REQUEST["pwd"])."')";
Du sendest dein Formular ja mit POST. Um auf die Werte zugreiffen zu können müsstest du dann $_POST['name'] nehmen.


$_REQUEST ist sozusagen die Mischung aus $_GET und $_POST, also alles was in $_GET und in $_POST steht, steht auch in $_REQUEST, ich vermute das $_POST dort höherpriorisiert wird als $_GET, so das man $_POST Vars dort nicht mit $_GET Vars überschreiben kann.

magpie
04-01-2004, 11:37
Es wäre aber trotzdem sinnvoller und warscheinlich sicherer direkt mit $_POST und $_GET zu arbeiten denk ich mir. Ich hab mich noch etwas schlau gemacht. Die $_COOKIES werden auch noch abgefragt.

gruss magpie

Gaert
04-01-2004, 13:28
Hallo!

Wie schon richtig gesagt wurde: $_REQUEST enthält alles was von "Aussen" kommt, also $_GET + $_POST + $_COOKIES.
Die Priorität wird in der php.ini unter dem Punkt variables_order festgelegt.
Der Standardwert ist "EGPCS", also Environment --> GET --> POST --> COOKIE --> System.

Gruß,

Gaert