phpbar.de logo

Mailinglisten-Archive

[php] URL mitsamt Parameter ermitteln

[php] URL mitsamt Parameter ermitteln

Nico Haase nico.haase at gmx.de
Don Sep 16 16:34:01 CEST 2004


Moin,

> Aber es folgt schon das nächste Problem: ich habe 3 files: index.php,
> login.php und logout.php (Code das letzten beiden unten). In letzeren 2
> Files steht dann:
> header("Location:". $_SERVER[REQUEST_URI]);
> was dann natürlich die Folge hat, dass das login.php file aufgerufen
> wird. Also sollte ich die login.php und das logout.php in die index.php
> integrieren. Das mache ich mit einem if(login = "yes") oder eben
> if(logout = yes). Dann sagt er aber immer redirectionlimit for URL is
> exceeded...

Dein Problem: Du rufst die login.php immer mit sich selbst auf. Was du willst: login.php schickt zur *vorherigen* Seite zurück. Du musst also eine zusätzliche Variable einbauen, die im *Loginformular* mit $_SERVER['Request_URI'] gefüllt ist (man bedenke auch die Anführungszeichen um Request_URI...). Diese Variable musst du dann anstelle von $_SERVER['Request_URI'] in der login.php benutzen. Derzeit rufst du login.php auf und sagst: Geh zu der Seite, deren Adresse $_SERVER['Request_URI'] ist. In $_SERVER['Request_URI'] steht immer die Adresse der *aktuellen* Seite. Schlussfolgerung: Du rufst immer wieder das Loginscript auf. Und nochmal. Und nochmal. Und nochmal... Die Schleife ergibt sich wahrscheinlich hier:

> $sql = "SELECT ".
>     "Id, Nickname, Nachname, Vorname ".
>   "FROM ".
>     "benutzerdaten ".
>   "WHERE ".
>     "(Nickname like '".$_REQUEST["name"]."') AND ".
>     "(Kennwort = '". ($_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:". $_SERVER['REQUEST_URI']);
> }
> else
> {
>   header ("Location:". $_SERVER['REQUEST_URI'] . "&fehler=1");
> }

Lass mich raten: Du übergibst die Variablen per Post, hast in $_SERVER['Request_URI'] dadurch ausschließlich http://server.example/login.php stehen. Nach dem Setzen der Session geht das auch gut, aber dann passiert folgendes: http://server.example/login.php wird aufgerufen, $_REQUEST['name'] steht nicht zur Verfügung (woher auch?), es erfolgt die Weiterleitung auf http://server.example/login.php&fehler=1. Hier auch: $_REQUEST['name'] nicht verfügbar, Weiterleitung auf http://server.example/login.php&fehler=1&fehler=1 usw.
BTW: Ersetze $_REQUEST soweit das geht durch einen besseren Variablennamen, also $_GET für GET-Formulare oder POST, wenns ein POST-Formular ist.
BTW²: WHERE ( Nickname like '" . $REQUEST['name'] . "' ) macht keinen Sinn, da du keine Suchmuster benutzt. Nimm einen einfachen Zeichenkettenvergleich, der läuft auch ohne Berücksichtigung von Groß- und Kleinschreibung ab.
mfg
Nico

-- 
www.buchtips.net - Rezensionen online

php::bar PHP Wiki   -   Listenarchive