layout.php als Vorlage nur wie?
Christopher
- php
0 Stefan Muenz0 Christopher0 Stefan Muenz0 Tom
0 Andreas Korthaus
grüß euch, folgendes problem hab ich,
habe 2 php datein, eine heisst layout.php und die andere main.php
nun layout.php ist die grafische vorlage und main.php ist der inhalt.
so habe ich es gemacht.
<?
$host = "localhost";
$user = "XX";
$password = "XX";
$dbverbindung = mysql_connect ($host, $user, $password);
$dbanfrage = "SELECT * FROM main WHERE kat = $_REQUEST[kat]";
$result = mysql_db_query ($dbname, $dbanfrage, $dbverbindung);
$ausgabe = mysql_fetch_array ($result);
$handle = fopen ("layout.php", "r");
$contents = fread ($handle, filesize ("layout.php"));
fclose ($handle);
$contents=str_replace("%TEXT%",$ausgabe[text],$contents);
$contents=str_replace("%LOCATION%",$ausgabe[location],$contents);
mysql_close ($dbverbindung);
print $contents;
?>
Leider funkt es nicht, aber wenn ich den befehl hinausnehme:
dbanfrage = "SELECT * FROM main WHERE kat = $_REQUEST[kat]";
und dann einfach auf ID umschreibe
dbanfrage = "SELECT * FROM main WHERE id = dbanfrage = "SELECT * FROM main WHERE kat = $_REQUEST[kat]";[id]";
dann funkt es nur ich will es nicht
main.php?id=1
stehen haben sondern
main.php?kat=info
nur irgendwie gehts net wieso?
Was mache ich bei den Code falsch???
Glaube das es mit dem
dbanfrage = "SELECT * FROM main WHERE kat = $_REQUEST[kat]";
zusammenhängt!
Danke in Voraus Christopher
Hallo Christopher,
$dbanfrage = "SELECT * FROM main WHERE kat = $_REQUEST[kat]";
Welchen Datentyp hat das Feld "kat"? Falls es alphanumerisch ist, also in der DB z.B. mit varchar oder dergleichen definiert ist, dann muss der Wert, den du bei der WHERE-Klausel angibst, in Anfuehrungszeichen stehen. Ausserdem hast du eine Array-Variable literal in einem String, was so weit ich weiss problematisch ist. Also besser gleich so:
$dbanfrage = "SELECT * FROM main WHERE kat = '".$_REQUEST[kat]."'";
(vorausgesetzt, "kat" ist alphanumerisch)
viele Gruesse
Stefan Muenz
schau her in der mysql datei stehen folgende tabellen:
Feld Typ Attribute Null Standard Extra Aktion
id int(5) Nein auto_increment
kat varchar(250) Nein
info varchar(250) Nein
location varchar(250) Nein
beschreibung varchar(250) Nein
die mysql tabelle lautet "main"
nun habe ich in layout.php das grafische hineingetan und in main.php sollte es ausgeben werden.
in main.php steht folgendes:
<?
$host = "localhost";
$user = "XX";
$password = "XX";
$dbverbindung = mysql_connect ($host, $user, $password);
$dbanfrage = "SELECT * FROM main WHERE kat = '".$_REQUEST[kat]."'";
$result = mysql_db_query ($dbname, $dbanfrage, $dbverbindung);
$ausgabe = mysql_fetch_array ($result);
$handle = fopen ("layout.php", "r");
$contents = fread ($handle, filesize ("layout.php"));
fclose ($handle);
$contents=str_replace("%TEXT%",$ausgabe[text],$contents);
$contents=str_replace("%LOCATION%",$ausgabe[location],$contents);
mysql_close ($dbverbindung);
print $contents;
?>
Nun rufe ich dann unter: wwww.XXX.at/main.php?kat=news
auf und dann kommt folgende fehlermeldung:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/afis/new/main.php on line 14
Hallo Christopher,
$ausgabe = mysql_fetch_array ($result);
$contents=str_replace("%TEXT%",$ausgabe[text],$contents);
$contents=str_replace("%LOCATION%",$ausgabe[location],$contents);
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/afis/new/main.php on line 14
Die assotiativen Array-Schluessel mit den Feldnamen muessen IMHO in Anfuehrungszeichen: also $ausgabe['text'] und $ausgabe['location']. Ausserdem brauchst du ja nur den Array-Schluessel. Von daher kannst du im Aufruf von mysql_fetch_array auch gleich MYSQL_ASSOC als zweiten Parameter mit angeben.
viele Gruesse
Stefan Muenz
Hello,
Die assotiativen Array-Schluessel mit den Feldnamen muessen IMHO in Anfuehrungszeichen: also $ausgabe['text'] und $ausgabe['location']. Ausserdem brauchst du ja nur den Array-Schluessel. Von daher kannst du im Aufruf von mysql_fetch_array auch gleich MYSQL_ASSOC als zweiten Parameter mit angeben.
... oder gleich mysql_fetch_assoc() benutzen. Das müsste etwas Kraft sparen helfen.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hi Stefan!
$dbanfrage = "SELECT * FROM main WHERE kat = $_REQUEST[kat]";
|
Ausserdem hast du eine Array-Variable literal in einem String, was so weit ich weiss problematisch ist. Also besser gleich so:
|
$dbanfrage = "SELECT * FROM main WHERE kat = '".$_REQUEST[kat]."'";
Kleine Korrektur bezogen auf die PHP-Variable: So ist das nur richtig wenn die Konstante "kat" definiert ist.
folgende Varianten wären korrekt:
$dbanfrage = "SELECT * FROM main WHERE kat = '$_REQUEST[kat]'";
$dbanfrage = "SELECT * FROM main WHERE kat = '".$_REQUEST['kat']."'";
$dbanfrage = "SELECT * FROM main WHERE kat = '{$_REQUEST['kat']}'";
Siehe hierzu: http://de3.php.net/manual/de/language.types.string.php#language.types.string.parsing
btw.: man sollte übrigens keine Variablen die man nicht selber kontrolliert(also sowas wie $_REQUEST, bei register-globals so ziemlich jede Variable) ungeprüft an eine Datenbank-Abfrage, an die Kommandozeile, an include() oder ähnliches übergeben.
Man sollte in diesem Fall also mindestens mysql_escape_string($_REQUEST['kat']) anwenden.
Siehe hierzu: http://de3.php.net/manual/de/security.database.php#security.database.sql-injection
Viele Grüße
Andreas
--
SELFHTML Tipps & Tricks: http://aktuell.de.selfhtml.org/tippstricks/