GET - Variablenübergabe fehlerhaft bei "leeren" Variablen

martin-k

Registered User
Hallo Alle,

trotz intensivster Suche habe ich zu meinem Problem noch keine Lösung gefunden. Vielleicht kann mir hier jemand helfen.

Das Problem:
bei Eingabe von:

- test.php?a=1&b=2&c=3

kann ich die Variablen mit $_GET & _SERVER["QUERY_STRING"] etc auslesen.

bei der Eingabe von

- test.php?a=1&b=2&c=

Also c als "leere" Variable am Ende wird überhaupt nichts mehr übergeben $_GET & _SERVER["QUERY_STRING"] etc sind leer.

Steht die "leere"Variable irgendwo in der Mitte:

- test.php?a=1&c=&b=2

funktioniert es wieder....


Mein System:

- Strato Power-Server
- ViSAS 2.4 professional SE
- SuSE Linux 9.0 (i586)
- PHP Version 4.3.3
- PHP Server API CGI
- Apache/2.0.48 (Linux/SuSE)

Testfile plus phpInfo:

--> http://makodocom.h657449.serverkompetenz.net/test.php?a=1&b=2&c=3


VIELEN DANK

martin
 
Inzwischen sind wir bei Version 4.4.0 ;)
Vielleicht wäre ein Update mal angebracht.
Windows98 Bugs werden auch nicht mehr behandelt ;)
 
server4downs said:
Inzwischen sind wir bei Version 4.4.0 ;)

also ist es ein bekannter php 4.3.3 Bug?

ich versuche das Problem erstmal einzugrenzen, bevor ich wild irgendwelche updates am Server vornehme...
 
Lange her aber ich glaube ich hatte dieses Problem auch mit der alten Version. Kann ich aber nicht mehr genau sagen da diese schon sehr lange her ist.

Updaten würde ich eh Raten da diese Version doch nicht mehr ganz sicher ist.
 
Hy,

also mit der PHP Version hat das meiner Meinung nach weniger was zu tun.
Mit einem kaufmänischen und machst du eine binäre Verundung.

Mir ist sowieso schleierhaft wie das so überhaupt irgendwie funktionieren konnte.

Ich hab mir mal das angeschaut (Link). Poste doch einfach mal deinen Quelltext der PHP Datei, so kann ich dir vielleicht sagen, wo der Bug ist.
 
Der code sieht so aus: (nur dafür da um das Problem zu schildern)

Code:
<?
error_reporting(E_ALL);  
$resultrev = $_SERVER['QUERY_STRING'];
print "QUERY_STRING:".$resultrev;
print "<br><br><pre>".print_r($resultrev, true)."</pre><br><br>";
$resultrev = $HTTP_GET_VARS;
print "HTTP_GET_VARS:<pre>".print_r($resultrev, true)."</pre><br><br>"; 
phpinfo();
?>

"Eine binäre Verundung" - die & sind nur dazu da um die Variablen über GET zu trennen, war meine bisherige Annahme?
 
"Eine binäre Verundung" - die & sind nur dazu da um die Variablen über GET zu trennen, war meine bisherige Annahme?
In einer Url dient das & um Variablen zu trennen, das ist so richtig. Ich bezog meine Aussage auf:

$_GET & _SERVER["QUERY_STRING"]

Anyway, es ist spät und ich kanns nicht testen, aber die Superglobale $_SERVER beim Index QUERY_STRING wird aus irgendwelchen Gründen nicht korrekt gesetzt wenn eine Variable leer ist.

Schreib deinen Code um, und lasse es so ausgeben

Code:
<?php print_r($_GET); ?>

Wenn du testen willst ob eine Variable leer ist, benutze die Funktion empty()


Regards

Sandmann
 
Sandmann said:
$_SERVER beim Index QUERY_STRING wird aus irgendwelchen Gründen nicht korrekt gesetzt wenn eine Variable leer ist.
Um diesen irgendwelchen Grund geht es ja gerade und nicht um das Skript. Das Skript ist nur dazu da um den Fehler zu beschreiben. In Wirklichkeit funktioniert eine ganze Webapplikation aus diesem Grunde nicht, die vorher auf einem anderen Server funktionierte.
Das Skript sieht jetzt so aus:
Code:
<?
error_reporting(E_ALL);  
$resultrev = $_SERVER['QUERY_STRING'];
print "QUERY_STRING:".$resultrev;
print "<br><br><pre>".print_r($resultrev, true)."</pre><br><br>";
$resultrev = $HTTP_GET_VARS;
print "HTTP_GET_VARS:<pre>".print_r($resultrev, true)."</pre><br><br>"; 
print '<br><br>print_r($_GET):'.print_r($_GET);
phpinfo();
?>

Aber danke erstmal.
 
Back
Top