$_GET mit der Switch-Anweisung
habe ich eine Menge Werte, die definieren, welche Seite der Benutzer sehen werde , zum Beispiel für "Profil" zeige ich die Profil-Seite und so weiter..
finden Sie heraus, welche Seite für die Anzeige habe ich versucht, etwas zu tun:
switch ($_GET) {
case 'profile':
require_once('function/profile.php');
break;
case 'team':
require_once('function/team.php');
break;
aber es zeigt kein Ergebnis..
ich senden der GET-Anforderung so aus : index.php?Profil , zum Beispiel..
was ist hier das problem und wie kann ich verwalten können, etwas ähnliches zu tun, dass die Arbeit als gut. vielen Dank im Voraus!
- können Sie tun, rufen Sie print_r($_GET) und zeigen, was gedruckt wird?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Machen, dein Beispiel funktioniert, können Sie ersetzen Sie
$_GET
mitkey($_GET)
sich aber bewusst sein, dass
key()
zurück ersten Schlüssel eines Arrays, so dass, wenn Sie ändern Ihre URLs variable, um diese Linie werden aufhören zu funktionieren.$_GET ist ein array von Schlüssel-Wert-Paare gefunden, die in den query-string (der Teil der url nach der Skript-name und ein Fragezeichen).
Beispielsweise den query-string
test=1&foo=bar
wird übersetzen:In den OP-Beispiel
index.php?profile
Sie werden am Ende mit einem $_GET-array wie:Problem mit urls ist, dass es nicht dem standard entspricht. Wenn Sie Dinge tun, die in einem nicht-standard-Weg, Sie haben zu kommen mit nicht-standard-Lösungen um die Probleme zu beheben.
Hier sind ein paar Möglichkeiten zusammen mit Problemen, die jeder hat:
Können Sie
$_SERVER['QUERY_STRING']
die bekommen Sie alles, was nach dem?
in der url. Das ist in Ordnung, wenn das einzige, was an die url übergeben wird nurprofile
(oder einige andere einzelne Wert). In diesem Fall$_SERVER['QUERY_STRING']
haben nichts, aberprofile
in es. Aber Sie auch dann die Fähigkeit verlieren, zu übergeben, weitere Parameter in den get-string.Kann man mit der beschriebenen Methode von @stewe. Die php Schlüssel Funktion gibt die Schlüssel aus, die die aktuelle position im array übergeben. Wenn Sie noch nicht Schleifen, die aktuelle position ist das erste element. Dies funktioniert gut, mit mehreren get-Parameter als gut. Ihre Abfrage-string wird genau so Aussehen wie
index.php?profile&test=1&foo=bar
. Das problem ist, dassprofile
(oder was auch immer Seite) hat und der erste sein oder sonst Schlüssel zurück, was der Schlüssel ist für den ersten parameter übergeben.Andere option ist, gehen Sie einfach mit der standard-Methode mit einem Schlüssel und einem Wert. Unabhängig von der Seite, Sie den gleichen Schlüssel verwenden und nur den Wert ändert. Sie haben dann die urls, die so Aussehen wie
index.php?page=profile
und Sie können immer auf die Seite mit$_GET['page']
.Können Sie mod_rewrite. Es ist einfach zu setup, die meisten hosts unterstützt (oder andere ähnliche), und es gibt Millionen von tutorials und Beispiele auf, wie man es an die Arbeit. Beenden Sie mit der saubersten urls und es funktioniert mit query-string-Parameter. Zum Beispiel
/profile/
kann umgeschrieben werden, um auf/index.php?page=profile
. Der Benutzer sieht/profile/
und php sieht der standard. Dies ermöglicht die Verwendung$_GET['page']
zu bekommen, die angeforderte Seite und nicht extra parsing man andere Werte in php.switch(true) {case in_array('profile', array_keys($_GET)):...;break;}
zu lösen, die "immer in der ersten position" - problemif (isset($_GET['profile'])) {...}
. Die Reihenfolge spielt keine Rolle in diesem Fall.if
Anweisung haben das gleiche problem wieswitch
beide Konstrukte sind praktisch das gleiche. Mit mehreren Seiten an die url übergeben, Sie würde immer noch das gleiche problem, fällt in die erste if - /elseif, das true zurückgibt. In jedem Fall ist die Reihenfolge der Parameter im query-string wäre kein Problem, aber die Reihenfolge in code behandelt würde. Ich sage nur, dass es nicht narrensicher und wenn eine Webseite zu erstellen, müssen Sie prüfen, die Narren. IMHO, die sich auf die Reihenfolge der Parameter oder die url, die strukturiert ist, eine bestimmte Art und Weise ist nicht akzeptabel.switch
undif
tests funktionieren auf die gleiche 😉 ich habe versucht ein Beispiel zu geben, wenn die "- Taste nur" nützlich ist, dass ist, wenn bei der Prüfung einer einzelnen Anweisung. Natürlich spreche ich nicht über die Verwendung von mehreren ifs.$_GET
ist ein array oder in Variablen, die gefüllt werden basierend auf der URL-query-string. Müssen Sie etwas tun, wie:wo deine URL würde wie folgt Aussehen:
Weitere Informationen finden Sie in der PHP-Handbuch $_GET.
$_GET selbst ist nicht sehr nützlich für Sie. Ich nehme an, Sie sind auf der Suche nach einem Schlüssel, wie "page", richtig ? Denken Sie daran, zu erklären ein default-Wert als auch.
so..
index.php?page->home
vor der Produktion. boss glaube nicht, es war sehr lustig.$_GET ist ein super-Globale variable, wo die Daten gesendet werden, gespeichert als array. So haben Sie
Zugriff auf Index
Vorausgesetzt, Sie Seite, die Sie versuchen, um eine Seite, wenn die Daten gesendet werden, wie diese:
Dann verwenden Sie die Schalter, wie dieser
Hinweis: Kann ich nicht haben, um Sie daran zu erinnern, wie verletzlich Sie diesen code in Richtung Einspritzung.
Es ist ein array, also musst du eine Schleife zur Iteration über die Werte:
key => value
mit foreach können Sie die Schlüssel-Wert-paar
ich eigentlich verwenden Sie die folgenden nach einem normalen get-was in lfi/rfi-Schwachstellen. die folgende Lösung wurde eingereicht, um mich über einen bug-bounty-Programm und funktioniert Super. beachten Sie die Einbeziehung der
default
Attribut. sehr wichtig. im folgenden sollte die einzige akzeptable Antwort. Gutschrift für das flying spaghetti monster(His Noodly Appendage)Wie bereits erwähnt, ist die erste Sache, die kommt sich zu kümmern, ist die nicht standardisierte Art und Weise der Weitergabe der Informationen. die erzeugen einige Schwierigkeiten beim analysieren der Werte. Obwohl, für mich, das Hauptproblem ist nicht die überprüfung/sanitazing/Reinigung die Daten über $_GET. Kann sein das es zu offensichtlich und da fast alle Antworten gegeben worden von Menschen, die scheinen zu wissen, was Sie tun, nehme ich an, dass Sie nur nicht erwähnt, weil der, dass
Aber denken Sie daran, dass, wenn Sie nicht überprüfen, Sie sind anfällig für Angriffe und Fehlfunktionen des Skripts. Das Ausmaß der Schäden hängt von Ihrer eigenen Anwendung, es ist also nicht leicht vorherzusagen.
In jedem Fall, dieses ist es, was ich tun werde, einschließlich des html -
Natürlich können Sie tun, ein paar mehr Dinge, aber wenn Sie bereiten Ihre form richtig, einschließlich die Zeichen gesetzt, Sie haben weniger sorgen, oder zumindest ein paar mehr bekannte Elemente. Es ist nicht failproof, aber es hilft.
Auch, die mechanik, die ich oben erwähnt arbeiten auf einer "weißen Liste" der Denkweise, das ist die Idee, die foreach-Schleife, um zu überprüfen, dass Sie bekommen, was Sie erwarten, und entsorgen Sie die Ruhe, nach anmelden.
Sie versuchen, zu archivieren SEO urls in die falsche Richtung.
Sehe ich, dass
index.php?profile
besser ist, dannindex.php?page=profile
aber es ist der falsche Weg, handeln in diesem Fall.Sollten Sie verwenden
index.php?page=profile
und dann eine rewrite-Regel zu erstellen, die SEO-urls wie diese:In dieser Weise Ihre Benutzer verwenden:
und die Seite angezeigt wird:
statt der Umstellung auf die keys (wie vorgeschlagen von key($_GET)) definieren Sie eine variable in $_GET (url) mit dem Namen z.B. "Aktion", die den containt 'Profil', oder 'team' oder was auch immer Sie es wünschen in die Zukunft. dann ist Ihr Schalter, einfach wird :
also, was auch immer Aktion, die Sie zuweisen dieser Schlüssel, die Sie verwenden können, wie ein Fall in den switch