Hallo!
Habe folgendes Problem:
Webhoster hat PHP Register_globals = Off
Eine Änderung auf on funktioniert aber per htaccess nicht.
Folgendes Script will ich laufen lassen:
<?php if(empty($action)) { require\_once('home.php');
}
if($action=='search') {
$Result=$proxy-\>searchProducts($arr\_search);
if ($Result['searchProductsResult']['Records'] \> "0") {
echo search($Result['searchProductsResult']['Items']['Item'],$Keywords,$PriceMin,$PriceMax,$OrderBy,$OrderDirection,$Page,$PageSize);
} else {
echo nofounds($Keywords,$PriceMin,$PriceMax,$OrderBy,$OrderDirection);
}
}
if($action=='csearch') {
$Result=$proxy-\>searchProductsInCategory($arr\_categoryproducts);
if ($Result['searchProductsInCategoryResult']['Records'] \> "0") {
echo search($Result['searchProductsInCategoryResult']['Items']['Item'],$Keywords,$PriceMin,$PriceMax,$OrderBy,$OrderDirection,$Page,$PageSize);
} else {
echo nofounds($Keywords,$PriceMin,$PriceMax,$OrderBy,$OrderDirection);
}
}
if($action=='impressum') {
require\_once('impressum.php');
}
if($action=='haftung') {
require\_once('haftung.php');
}
?\>
Habe nun folgendes gemacht:
<?php switch($_GET['action']) {
case "impressum":
include ("impressum.php");
break;
case "haftung":
include ("haftung.php");
break;
default:
include ("home.php"); #startseite laden
break;
case "search":
include ("$Result=$proxy-\>searchProductsInCategory($arr\_categoryproducts);");
break;
}
Leider funktioniert hier die Produktabfrage aber nicht.
habe auch schon form action=GET gemacht---hat aber nichts gebracht.
Wie kann ich dies ändern?
Register_globals = Off heißt doch nur, dass das ausführende Script den Inhalt eines Eingabefeldes nicht direkt als Variable bekommt (input name=„feldname“) wird nicht zu $feldname. Aber trotzdem musst du über $_POST[‚feldname‘] (bzw. $_GET…) auf den Inhalt zugreifen müssen.
Ich würde testweise ein Script aufrufen, das den Inhalt dieser Arrays anzeigt:
echo „$_GET:
\n“;
echo "
\n";
print\_r($\_GET);
echo "
\n";
echo „$_POST:
\n“;
echo "
\n";
print\_r($\_POST);
echo "
\n";
Wenn da nichts ankommt, dann würde ich zuerst mal die aufrufende Seite analysieren. Vielleicht wird gar nichts übergeben ?
Damit die Variablen bzw. Post Werte überhaupt in das script kommen, müssen in dem vorherigen Formular (script) alle Formularfelder ein Attribut name=„feldname“ haben. Die Werte dieser Formularfelder werden dann in das Array $_POST (bzw. $_GET) übernommen und zwar in der Form $_POST[‚feldname‘]. Die Namen müssen selbstverständlich alle unterschiedlich sein. Deswegen kann man am verarbeitenden Script nicht sehen, warum die Werte dort nicht ankommen.
Daher mein Vorschlag am Anfang des Scriptes zu prüfen, ob überhaupt Werte ankommen und ggf. das aufrufende Formular / Script zu überprüfen.
Leider habe ich bei der Formatierung beim Kopieren nicht aufgepasst, also nochmal der Codeschnipsel:
Kenne gerade den Codeschnipsel Trick nicht, die Anzeige verschluckt einiges. Also bitte die runden Klammern durch spitze Klammern, wie bei HTML Tags üblich, ersetzen:
Ich machs immer so …
… indem ich einfach eine selbst geschriebene Funktion dazu benutze:
function formulardaten_einlesen(
// Einlesen der Formulardaten ohne Vorgabe Variablennamen
// Vorgabe, ob POST oder GET; Auslistung, wenn angefordert
$typ=‚post‘,
$lst=false)
{
global $crlf;
$typ = strtolower($typ);
if ($typ == ‚post‘) $mx = $_POST;
if ($typ == ‚get‘) $mx = $_GET;
if ($lst) echo ‚‘ .$crlf;
foreach ($mx as $key => $value) {
global $$key;
$$key = $mx[$key];
if ($lst) {
$x = $$key;
echo „$key $x$crlf“;
}
}
if ($lst) echo ‚‘ .$crlf;
}
Diese Funktion liest entweder die GET- oder POST-Daten ein, gibt sie, wenn $lst auf TRUE gesetzt ist, in der Seite als Tabelle aus (Entwicklerhilfe). Die Daten stehen dann global zur Verfügung. Vielleicht hilft es Dir bei Deinem Problem …