PHP foreach und header:location, Performance gegeben?

volcem

Lieutenant
Registriert
Dez. 2007
Beiträge
1.021
Hey ho,

ich bin mir nicht ganz sicher ob es der Richtige Weg ist den ich hier eingeschlagen habe,
so habe ich die foreach schleife noch nie missbraucht!

Wenn ein User nicht angemeldet ist wird folgender Link generiert ( /home/login&returnto= ) und er wird zum Login Formular geschickt.

Nun meine Frage, kann man dass wirklich einfach so lösen:

PHP:
if(isset($returnto)) {
//array Auszug sonst viel zu lang -.-
$returnto_ = array("/home/logbuch" => "bbb7debd769252855fb35a7758a512c9",
"/home/account" => "2c604a11fe7a67886fdb63b4109c7370",
"/home/account_edit" => "9f0806d5c23f25b80952e01b508d00fa",
"/home/address_book" => "e66abfbcbb7d734f5a3360528f49ebb8",
"/home/account_passedit" => "30db8b1ee7eff7d0564eff95acad652d",
"/home/account_orders" => "4f1c1fb42639d1706d4e87f68f9daf0c",
"/home/cart_option" => "156a831552e9deee523887495b129b15",
"/home/cart_load" => "54276e77519eaae3f712adff9526d20b",
"/home/cart_delete" => "573dddb64c24221f0f7662eaed82b2eb",
"/home/ticket" => "6037ff4a4f11a332dfe02ac502ae0057",
"/home/newsletter" => "b7b299c36b19836e1485b170ad7b45a1"
);

foreach ($returnto_ as $schluessel => $returnto_array) {
             
             if($returnto == $returnto_array) {
             
             header( "Location: $schluessel" );
             
  }  
 }         
} else { 
             header( "Location: /home/account" );
             }

Die Funktionsweise funktioniert, nur ist es auch der richtige Weg?

Wie gesagt, so habe ich foreach und header noch nie zusammen benutzt.

Ich mache mir eigentlich nur Sorgen wenn viele dass System nutzen.

Oder kann ich es so lassen.

Danke im Voraus :)
 
@ pcw

Hmm, da hast Du natürlich Recht, array_serach ist da wohl besser für geeignet. Ich werde es mir mal anschauen.

@achim89

Das liegt an meinen Einstellungen in der .htaccess, sobald ich den Rückgabe Link aufrufe:

PHP:
//Auszug
if(is_file("tpl/" . $datei . ".php")){
include("tpl/" . $datei . ".php");
}else {
include("tpl/404.php");
}

www.domain.de/home/login&returnto=/home/account(ist: www.domain.de/index.php?home=login&returnto=wert) zum beispiel, wird 404 oder nach Modifikation der .htaccess das Design verhauen.
Deswegen hash ich den link ( /home/account ) beim überprüfen ob der User angemeldet ist oder nicht.
Dem zu folge muss ich ja den MD5 hash einen Wert wieder zuordnen, siehe array $returnto_

HTML:
RewriteRule ^home/([^/].*)$ /index.php?home=$1 [L]
#RewriteRule ^home/(.*)$ index.php?home=$1 << auch damit kein Erfolg, wird das Design verhauen bzw nichts mehr an css geladen wenn ich returnto=/home/dati aufrufe
 
Zuletzt bearbeitet:
IMO solltest du deinen Array andersherum aufbauen: nicht "Dateiname => Schlüssel", sondern "Schlüssel => Dateiname". Du willst ja mit dem Schlüssel nach dem passenden Dateinamen suchen und nicht umgekehrt. (Nicht umsonst nennt man die Paare, aus denen u.a. in PHP die assoziativen Arrays aufgebaut sind, auch Key-Value-Paare: Das erste Element ist der Schlüssel, das zweite der dazugehörige Wert.) Das Suchen kannst du dann ohne foreach-Schleife, einfach mit "$returnto_[$schluessel]", machen (vorher prüfen, ob der Schlüssel existiert: siehe array_key_exists()).
 
Hey NullPointer,

natürlich, wieso ist mir dass nicht schon vorher aufgefallen, danke, ist bereits umgesetzt.


Danke für die Antworten.
 
Zurück
Oben