Kompletten REQUEST ausgeben
*BLADE*
- php
Hallo,
wie kann ich alle im REQUEST stehenden Daten ausgeben (http://www.123.de/index.php?test_a=123&test_b=456&test_c=789 -->> Array( test_a => 123; test_b => 456; test_c => 789))
Wenn ich folgenden Befehl ausführe...
print $_REQUEST
...kommt:
Alles mösgliche wie z.B. [PHPSESSIONID]. Ich will aber nur das was nach dem ? in der Adresszeile steht.
Gruß
*BLADE*
Ich grüsse den Cosmos,
Alles mösgliche wie z.B. [PHPSESSIONID]. Ich will aber nur das was nach dem ? in der Adresszeile steht.
$SERVER['QUERY_STRING'] dürfte das sein, was du suchst.
Wenn du alle Parameter schon zerlegt haben willst,
print_r($_REQUEST);
Möge das "Self" mit euch sein
Hallo Manuel,
Wenn du alle Parameter schon zerlegt haben willst,
print_r($_REQUEST);
Er will doch nur die Daten, die im Query-String angegeben wurden, also $_GET.
Grüße aus Freiburg,
Marian
Ich grüsse den Cosmos,
Er will doch nur die Daten, die im Query-String angegeben wurden, also $_GET.
Also wenn er den kompletten Request haben will, ist das für mich mehr als $_GET. Aber das ist vermutlich definitionssache.
Wie geschrieben wurde, unterschlägt $_GET wenn ein Parameter doppelt übergeben wurde und nimmt einfach den letzen Wert an.
Möge das "Self" mit euch sein
Hi!
$SERVER['QUERY_STRING'] dürfte das sein, was du suchst.
Kleiner Tippfehler:
Statt $SERVER['QUERY_STRING']
sollte es $_SERVER['QUERY_STRING']
heißen.
Und bei einem korrekten Query-String werden die einzelnen Parameter auch als Variablen im (superglobalen) Array $_GET
gespeichert.
D.h. bei dem Request http://example.com/file.php?a=1&b=2 wird in $_SERVER["QUERY_STRING"]
dann a=1&b=2 enthalten sein und die Variablen $_GET["a"]
mit dem Wert 1 und die Variable $_GET["c"]
mit dem Wert 2 vorbelegt.
Schöner Gruß,
rob
Hi!
Einen Flüchtigkeitsfehler korrigiere ich, einen anderen mache ich selbst...
und die Variable
$_GET["c"]
mit dem Wert 2 vorbelegt.
Natürlich muß es $_GET["b"]
heißen.
Schöner Gruß,
rob
Hi,
Und bei einem korrekten Query-String werden die einzelnen Parameter
unter Umständen
auch als Variablen im (superglobalen) Array
$_GET
gespeichert.
Rufe folgendes Script
<?php
echo "<pre>";
print_r($_GET);
echo $_SERVER["QUERY_STRING"];
echo "</pre>";
?>
mit einem Query-String ?a=1&a=2 auf.
Die Ausgabe ist
Array
(
[a] => c
)
a=b&a=c
Es wird also einer der Parameter von PHP in $_GET unterschlagen, obwohl die letzte Zeile der Ausgabe zeigt, daß PHP durchaus Kenntnis von dem ersten Parameter hat.
cu,
Andreas
Hi!
<?php
echo "<pre>";
print_r($_GET);
echo $_SERVER["QUERY_STRING"];
echo "</pre>";
?>
>
> mit einem Query-String ?a=1&a=2 auf.
>
> Die Ausgabe ist
> Array
> (
> [a] => c
> )
> a=b&a=c
>
> Es wird also einer der Parameter von PHP in $\_GET unterschlagen, obwohl die letzte Zeile der Ausgabe zeigt, daß PHP durchaus Kenntnis von dem ersten Parameter hat.
Nein. Es wird nicht wirklich ein Parameter unterschlagen.
Es tritt genau das ein, was (meines Erachtens nach) auch zu erwarten ist.
Erst wird a der Wert "b" zugewiesen und dieser dann gleich wieder durch die neue Zuweisung (a=c) mit dem Wert "c" überschrieben.
Wenn man dieses Verhalten kennt, dann sollte es keine Probleme geben.
Ich wüßte jetzt auch nicht, welchen Sinn es hätte, zweimal den gleichen Parameter mit unterschiedlichen Werten zu übergeben...
Da muß man dann halt den Query-String selbst zerlegen, wenn man so etwas macht...
Schöner Gruß,
rob
echo $begrüßung;
Ich wüßte jetzt auch nicht, welchen Sinn es hätte, zweimal den gleichen Parameter mit unterschiedlichen Werten zu übergeben...
Mehrfachauswahl in einem Select-Feld, um nur mal einen zu nennen.
echo "$verabschiedung $name";
Hi,
Es wird also einer der Parameter von PHP in $_GET unterschlagen, obwohl die letzte Zeile der Ausgabe zeigt, daß PHP durchaus Kenntnis von dem ersten Parameter hat.
Nein. Es wird nicht wirklich ein Parameter unterschlagen.
Doch. Es wird der erste Parameter namens a unterschlagen.
Wieso sollten verschiedene Parameter nicht denselben Namen haben dürfen?
Worin unterscheidet sich diesbezüglich der Name "a" von "a[]"?
Es tritt genau das ein, was (meines Erachtens nach) auch zu erwarten ist.
Du erwartest, daß bei a=b&a=c die Hälfte unterschlagen wird, bei a[]=b&a[]=c dagegen nicht? Warum?
Erst wird a der Wert "b" zugewiesen und dieser dann gleich wieder durch die neue Zuweisung (a=c) mit dem Wert "c" überschrieben.
Wenn man dieses Verhalten kennt, dann sollte es keine Probleme geben.
Bei Perl stehen alle Werte zur Verfügung über die normalerweise für den Parameterzugriff verwendete CGI::param($name);
In Java-Servlets stehen alle Werte zur Verfügung über die normalerweise für den Parameterzugriff verwendete Klasse HttpServletRequest.
Bei PHP steht nur der letzte Wert zur Verfügung über das normalerweise für den Parameterzugriff verwendete $_GET, es sei denn, der Name endet auf [].
Ich wüßte jetzt auch nicht, welchen Sinn es hätte, zweimal den gleichen Parameter mit unterschiedlichen Werten zu übergeben...
Siehe Antwort von dedlfix, <select multiple="multiple">.
Da muß man dann halt den Query-String selbst zerlegen, wenn man so etwas macht...
Wenn man PHP benutzt, ja.
cu,
Andreas
Hi!
Du erwartest, daß bei a=b&a=c die Hälfte unterschlagen wird, bei a[]=b&a[]=c dagegen nicht? Warum?
Wenn ich einer Variablen einen Wert zuweise und dieser dann nochmal einen Wert zuweise, dann erwarte ich, daß überschrieben wird.
Wenn ich ein Array einsetze, dann erwarte ich, daß das nächste Array-Element angelegt und befüllt wird.
Bei Perl stehen alle Werte zur Verfügung über die normalerweise für den Parameterzugriff verwendete CGI::param($name);
Auch bei PHP stehen alle Werte zur Verfügung, wenn man $_SERVER['QUERY_STRING'] einsetzt. In $_GET wird das entsprechende Element dann überschrieben.
Aus meiner Sicht, ist das aber kein Problem, weil ich die Sache dementsprechend angehe.
Und ja, es stimmt. Den gleichen Namen zu vergeben, ergibt in einigen Fällen einen Sinn. Da hatte ich so gar nicht dran gedacht.
Wenn man nämlich, wie erwähnt, beispielsweise mit Checkboxen (oder anderem) arbeitet, vergibt man den gleichen Namen.
Dann setze ich allerdings ein Array anstelle einer normalen Variable ein.
Wenn man das so macht:
<input type="checkbox" name="irgendwas[]">
gibt es mit PHP auch wieder keine Probleme.
Mit verschiedenen Sprachen muß man einige Dinge halt ein wenig anders angehen. Das muß man natürlich wissen.
Ich finde das Verhalten von PHP in diesem Fall OK und würde mir nicht wünschen, daß es anders wäre.
Bisher hat das für mich noch nie zu einem Problem geführt.
Schöner Gruß,
rob
Hi,
Du erwartest, daß bei a=b&a=c die Hälfte unterschlagen wird, bei a[]=b&a[]=c dagegen nicht? Warum?
Wenn ich einer Variablen einen Wert zuweise und dieser dann nochmal einen Wert zuweise, dann erwarte ich, daß überschrieben wird.
In der URL stehen aber keine Variablen, sondern Parameter.
Bei Perl stehen alle Werte zur Verfügung über die normalerweise für den Parameterzugriff verwendete CGI::param($name);
Auch bei PHP stehen alle Werte zur Verfügung, wenn man $_SERVER['QUERY_STRING'] einsetzt.
Ja, äußerst umständlich.
Und ja, es stimmt. Den gleichen Namen zu vergeben, ergibt in einigen Fällen einen Sinn. Da hatte ich so gar nicht dran gedacht.
Um so weniger sinnvoll ist es, daß man dann für PHP spezielle Namen (mit [] am Ende) verwenden muß, um einfach auf die Parameter-Werte zugreifen zu können.
Ich finde das Verhalten von PHP in diesem Fall OK
Ich nicht, weil es vollkommen unlogisch ist.
cu,
Andreas
Hi!
Wenn ich einer Variablen einen Wert zuweise und dieser dann nochmal einen Wert zuweise, dann erwarte ich, daß überschrieben wird.
In der URL stehen aber keine Variablen, sondern Parameter.
Das ist mir klar.
Ich meinte das so, wie ich es geschrieben habe. Wenn ich einer Variablen zum zweiten Mal einen Wert zuweise, erwarte ich, daß dieser überschrieben wird.
Genau das ist es, was in diesem Fall passiert.
Ich finde das Verhalten von PHP in diesem Fall OK
Ich nicht, weil es vollkommen unlogisch ist.
Ansichtssache.
Ich halte es nicht für unlogisch.
Ich mag das Verhalten von PHP.
Das ist auch der Grund, warum ich lieber mit PHP arbeite als mit Perl.
Schöner Gruß,
rob