[HTML/PHP] request variable wird nicht benutzt?

TheTricker

Cadet 3rd Year
Registriert
Mai 2006
Beiträge
36
Hallo Leute,

ich habe ein ganz komisches Problem:
Ich schreibe gerade an einer Seite, und das erste mal so richtig mit php, also nicht böse sein für Anfänger-Fehler:rolleyes:
Ich arbeite mit request variablen um meine content div-box anzusprechen sozusagen.
Die sieht schonmal so aus:
PHP:
<?
	if(isset($_REQUEST['content'])){
	include $_REQUEST['content'].".php";
	echo "$_REQUEST[content]".".php";
	}
	else echo "Herzlich Willkommen";
		
?>
Das funktioniert auch alles wunderbar. Bestimmte Sachen werden angezeigt. Jetzt aber das komisch:
Ich habe eine neue Datei angelegt: news.php (übrigens die einzige Datei, die ich mit Linux geschrieben habe, Rest mit Windows, falls das was zur Sache tun könnte).
Diese Datei will ich dann per index.php?content=news aufrufen. Das funktioniert auch, wenn ich die URL im Browser-Fenster eingebe. Wenn ich das ganze allerdings über einen submit-button mache, der in folgender Datei die news.php aufrufen soll, dann funktioniert es nicht:
PHP:
<p align="center">
<form  method="POST" action="?content=news">
<input type="text" name="title" id="createTitle" />
<input type="text" name="content" id="createContent" />
<input type="submit" value="Eintragen" />
</form>
Die angezeigten URLs sind bei beiden Fällen sie gleichen, aber mit dem Button bekomme ich folgende Fehlermeldung:
Code:
Warning: main(.php): failed to open stream: No such file or directory in /hp/ac/aa/jv/www/test2/content/content.php on line 3

Warning: main(.php): failed to open stream: No such file or directory in /hp/ac/aa/jv/www/test2/content/content.php on line 3

Warning: main(): Failed opening '.php' for inclusion (include_path='.:/etc/php:/usr/local/share/php4.4:/usr/local/share/php4:/usr/local/share/php:/usr/share/php4.4:/usr/share/php4:/usr/share/php') in /hp/ac/aa/jv/www/test2/content/content.php on line 3
.php
Das komische daran ist, dass er versucht ".php" aufzurufen und nicht news.php. Das kommt wohl irgendwie daher, dass angeblich die Request-Variable nicht gesetzt wird oder so?

Es ist bestimmt ein einfaches problem ,aber ich verzweifle gerade daran, Please help!:)

Ach ja, ihr könnt es auch gerne einsehen: hier

Danke schonmal für alle Antworten
 
Hallo TheTricker,

der Fehler liegt daran das du in der Form method="Post" stehen hast. Da muss anstatt Post GET stehen. Das sind zwei verschiedene Globale Variablen.

Und du solltest nicht einfach das einbinden was hinter der Index.php steht. damit kann jeder beliebige PHP Code ausgeführt werden.

Grüße

tewes

//Edit: etwas schnell gelesen. Würde mal probieren die Request Variablen zu ersetzen. Finde es Persönlich schöner wenn die Varibalen getrennt bleiben und nicht alle in einen Topf geworfen werden.
 
Zuletzt bearbeitet:
Also ehrlich gesagt weiß ich nicht so genau, was du damit meinst.
Soll ich für jede Aktion eine extra Variable anlegen, oder wie? Ich habe halt eine für den content, eine für die news, etc.

Ist das nicht der richtige ansatz, ist mir so erklärt worden!
 
Etwas unglücklich in Deinem HTML-Code ist die Wahl der Variablennamen. Du benutzt ein <input>-Element mit dem Namen "content" und übergibst aber auch im action-Attribut des Formulars eine GET-Variable namens "content". Wenn Du nun in einem PHP-Skript $_REQUEST['content'] verwendest, ist mir nicht klar, welche der beiden Variablen ausgegeben wird. Anscheinend funktioniert es gar nicht, was an der Meldung Warning: main(): Failed opening '.php' for inclusion... ersichtlich ist.
Wie bereits von Backslash richtig dargestellt, solltest Du $_POST zum Abfragen der <input>-Elemente verwenden (maßgeblich ist das name-Attribut) und für die GET-Variablen, wie etwa im action-Attribut, $_GET verwenden. So behältst Du auch besser den Überblick, welche Werte Du wo verwendest.
 
Ich meinte das du das einbinden der Datei ändern solltest.
Wenn du nicht zu viele Dateien hast kannst du es einfach mit IF Abfragen machen.
PHP:
if(isset($_GET['content']) && $_GET['content'] == 'news'){
include 'news-php';
elseif(isset($_GET['content']) && $_GET['content'] == 'bilder'){
include 'bilder.php'
}......
Wenn es zu viel ist, solltest du es eventuell über eine Datenbank machen.

Grüße

tewes
 
Wenn ich das jetzt richtig verstanden habe, dann kann ich die Request-Variablen mit $_GET abfragen oder nicht? Und action sendet auch ein $_GET -Varibale oder wie?
Also die haben doch unterschiedliche Funktionen meiner Meinung. Mit GET und POST mache ich Sachen wir Formulare, mit REQUEST eher sowas wie die content Seite?

Die Namen habe ich geändert, ist mir auch shcon aufgefallen! Das geht jetzt auch!

Und wie soll bitte Seiten über die Datenbank einbinden. FAlls das wichtig ist zu wissen, wäre ein kleine Erlärung super, bzw. ein Link! Der Inhalt wird ja schon über die DB gemacht, aber halt nicht die verschiedenen DAteien, die die DB ansteuern!
 
Es kommt darauf an, WIE du die Variablen sendest. Machst du es über die URL, solltest du sie mit $_GET abfragen. Das kann allerdings ein Sicherheitsleck sein, weil diese jeder Manipulieren kann.

Verschickst du Variablen über ein Formular mit method="post", kannst du diese mit $_POST erreichen und sie sind schwerer manipulierbar.

$_REQUEST schnappt sich eine Variable von "überall" her (POST, GET, SESSION und COOKIE). Ist keine sehr saubere und auch wieder eine unsichere Methode.
 
Also.

Es gibt GET, POST und REQUEST (und noch viele andere). Alle sind Arrays aus "reserved variables".
GET Variablen werden mit der URL übergeben zB index.php?page=main dann ist $_GET['page'] = main
POST Variablen werden mit übertragen und sind nicht in der URL sichtbar. Zum beispiel bei Formularen sinnvoll.
Im REQUEST Array sind sowohl die POST als auch die GET Arrays enthalten (auch COOKIE, aber das ist hier nicht wichtig).

Alles auch schön nachzulesen auf: http://www.dynamicwebpages.de/php/reserved.variables.php

mfg

/edit da war wohl jemand schneller :(
 
Zuletzt bearbeitet:
Die drei Variablen sind super Golabl und du kannst im prinzip in jede das reinpacken was du willst. Der unterschied ist das die GET Variable über die Browser Zeile Manipuliert werden kann. Die Post Variable kannst du nur über eine Form erstellen. Und die Request Variable fügt diese beiden Array's noch zusammen.

Wenn du das über eine DB machen willst müssetest du dir eine Admin Oberfläche schreiben in der du die Verwalten kannst. Am einfachsten wäre in dem Fall die Seiten über datein zu Regeln in dennen du dann PHP Code Schreibst und als Namen ein eine ID nimmst die in der Datenbank steht.

Grüße

tewes

//Edit da waren zwei schneller
 
Wenn es zu viel ist, solltest du es eventuell über eine Datenbank machen.

Oder mit einem Array - was meiner Meinung nach sinnervoller wäre als direkt ne Datenbank.

EDIT: mom, hab scheiße geschrieben, beispiel wird korrigiert
EDIT2: siehe Post #16
 
Zuletzt bearbeitet:
Hm, das habe ich nicht gewusst, dass REQUEST beides vereint. Demnach ist es egal ob ich dann GET oder REQUEST verwende oder, ist ja beides unsicher.
Wenn ich das allerdings über ein Array oder die Datenbank mache, dann ändert sich ja am Code nicht viel, nur dass es ein bisschen unflexibler wird, da ich das Array erweitern muss oder die Datenbank, sehe ich das richtig?
Und in der Datenbank ist dann lediglich eine Id und der Name der Seite? Das ist doch auch ein bisschen umständlich? Ich verstehe nicht so ganz was an folgendem schlecht ist:

PHP:
include $_REQUEST['content'].".php";

Das macht doch genau das gleich, nur nicht den Umweg über DB oder Array?
 
und was machst du, wenn der benutzer www.domain.tld/index.php?content=hundalacuf eingibt?
Dann bekommt der User ne Fehlermeldung, weil die Datei hundalacuf.php nicht existiert.
Also musst du vorm einbinden content immer überprüfen.

Wenn du jetzt für jede seite ne eigene if-abfrage machst, dann ist der code aufgebläht und unflexibel. mit der array-lösung bleibt alles schon aufgeräumt und flexibel, da du neue seiten nur grad dam array hinzufügen musst.



Demnach ist es egal ob ich dann GET oder REQUEST verwende oder, ist ja beides unsicher.

Nein. Eben nicht, aber das wurd doch alles schonma gepostet. Du hast eine content-POST- und eine content-GET-Variable.
Woher soll php bei REQUESTcontent wissen, ob du POSTcontent oder GETcontent meinst?
 
Zuletzt bearbeitet:
@Computer Freak: Dein Code ergibt für mich aber gar keinen Sinn den du in #12 geschrieben hast...

Aber egal...

Ich würde eher den Weg gehen

statt der x?y:z-Syntax kann man auch if-else benutzen...
PHP:
$targetsite = (isset($_GET["content"]) ? $_GET["content"] : "home";  // als beispiel halt die home-seite

// Ich vermute, dass durch Voranstellen von "./" vor die Zielseite ein Entführen unmöglich gemacht wird,
// aber gibt  bestimmt auch bessere Varianten, sollte man aber unbedingt machen, denn traue keinem
// Wert, den du vom Browser bekommen hast...

$targetsite = "./" + $targetsite;

if (!file_exists($targetsite + ".php")) $targetsite = "err404";  // man muss natürlich eine eigene Fehlerseite machen

include($targetsite + ".php");

Edit:
Also ich bin der Meinung, die möglichen Ziele sollten nicht fest im Quellcode verankert sein, eine Abfrage, ob es die Zielseite gibt via file_exists und eben einer ausreichenden Prüfung, dass nicht versucht wird, einem eine falsche Seite unterzujubeln, die in Wahrheit auf einem anderen Server liegt, sind dann halt Pflicht.
 
Zuletzt bearbeitet:
ups, war in eile..
hier der code so wie ich ihn meinte:

PHP:
$pages = array('news', 'bilder', 'wasweißich');


    if (isset($_GET['content']) && in_array($_GET['content'], $pages))
    {
        include $_GET['content'].'.php';
    }
    else
    {
        // irgend ne standardseite, startseite oder sowas
    }

die foreach schleife war irgendwie... ka wie ich die da rein hauen konnte... :rolleyes:
 
Zuletzt bearbeitet:
so sieht's schon logischer aus :-)

Edit: Auch wenn in "in_array" bestimmt noch fehlt, in welchem Array den gesucht werden soll, also müsste sowas in der Art wie
in_array($pages, $_GET["content"])
heißen, vielleicht aber sind die Parameter auch umgekehrt...
 
die parameter sind umgekehrt, habs aber sogar noch vor deinem post bemerkt, eine leistung! ^^
vllt sollt ich ma mehr schlafen, dann wäre ich auch net am nachmittag schon so unkonzentriert. :D
 
Naja am besten programmiert man doch nachts, kein Wunder bekommt man tags über nix auf die Reihe ^^
 
Ist jetzt zwar vollkommen off topic, aber ich muss dir Recht geben! :)
So ab 22.oo uhr geht das irgendwie besser. vllt weil dann alles dunkel ist und keine sachen einen ablenken, ka, aber ich finds ja witzig, dass es noch einem so ergeht. :)
 
Zurück
Oben