PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP oder MySql Spezialisten?


Werbung

Ysla
09-08-2007, 08:39
Hallo! Ich habe ein (wie ich hoffe kleines) Problem.

Ich möchte in den title-tag Angaben aus der Datenbank übernehemn. Das funktioniert auch mit 1 Angabe wie folgt:


<title>Ferienhaus <? echo $hausnr?> von Ferienhausvermittlung XY </title>

Ganz prima so weit .. nur wenn ich jetzt versuche mit dem selben Befehl eine weitere Information auszulesen wie den Ort oder die Bettenzahl, dann passiert da gar nichts. Wo ist mein Denkfehler?

Kann man eigentlich auch den Description-Metatag aus einer Datenbank auslesen?

benne
09-08-2007, 09:13
Ähm, da wären jetzt weitere Informationen nützlich.

Wichtig wäre vor allem zu wissen wie das SQL-Statement aussieht, mit dem du die Datensätze aus der Datenbank ausliest.

Misel
09-08-2007, 09:30
Erstmal würde ich an Deiner Stelle das <? durch <?php ersetzen, damit wirklich nur der PHP-Parser anspringt.

Dann darfst Du natürlich nicht vergessen die Befehle duch Semikola zu separieren. Für weiteres ist es natürlich wichtig, den Befehl zu kennen. Außerdem sollte im Error-log schon drin stehen, was schief lief.

silverfreak
09-08-2007, 10:59
Wichtig wäre vor allem zu wissen wie das SQL-Statement aussieht, mit dem du die Datensätze aus der Datenbank ausliest.

Yep, mehr Info büdde. :) Irgendwoher muss ja der "Inhalt" der Variablen kommen, ne. :D

Ysla
10-08-2007, 10:07
ähm . OK ... ich bin in Sachen MySql noch etwas schwerfällig ... meint Ihr das hier:

<?php

// Connecting, selecting database
$link = @mysql_connect($db_server, $db_user, $db_passwort)
or die("Die Datenbank ist zur Zeit überlastet, bitte versuchen Sie noch einmal die Seite aufzurufen.");
mysql_select_db($db_name)
or die("Die Datenbank wird gerade gewartet, einen Augenblick Geduld bitte.");

$query = "SELECT * FROM hausdb WHERE hausname LIKE '$hausnr' LIMIT 1";
//echo "query: ".$query2;
$result=mysql_query($query)
or die("Query failed");

// Closing connection
mysql_close($link);
if($line = mysql_fetch_object($result)){
?>

... und er meldet keinen Fehler, sondern es passiert einfach nichts. Ich habe es auch mit z.B.
<? echo $line->personenanzahl ?> versucht. Während der Befehl au dem Rest der Seite zum Auslesen einwandfrei funktioniert, bekomme ich kein Ergebnis im Title-Tag.

Spacefrog
10-08-2007, 11:17
Bin leider aus der Übung, aber was passiert, wenn Du statt


if($line = mysql_fetch_object($result)){


if($line = mysql_fetch_array($result)){

verwendest?

Den Zugriff auf das Array kannst Du dann so lösen:


<title>Ferienhaus <? echo $line[hausnr]?> von Ferienhausvermittlung XY </title>

Ysla
10-08-2007, 12:00
Vielen Dank, ich hab es gleich mal getestet. Grundsätzlich funktioniiert das auch für die Abfragen im Content - bis auf die Abrage für die hausnummer, die muss ich weiterhin mit
<? echo $hausnr?> machen, sonst kommt da gar nichts.

Für die Abfrage im Title-Tag funktioniert das allerdins auch nicht - die Stellen, an denen ich das einfüge, bleiben einfach leer ...

*seufz* .. ich bin da einfach zu doof für. :heul:

Spacefrog
10-08-2007, 12:12
Benenn mal die Variable $hausnr um. Der Inhalt kommt doch aus einem Formular, richtig? Wenn die DB-Spalte genauso heißt, gibt's da eventuell ein Problem.
Und was passiert, wenn Du die Ausgabe mal irgendwo in den <body> packst, um sie zu checken (ohne <title>-Tags)?

Ysla
10-08-2007, 12:49
Benenn mal die Variable $hausnr um. Der Inhalt kommt doch aus einem Formular, richtig? Wenn die DB-Spalte genauso heißt, gibt's da eventuell ein Problem.
Was für ein Formular? :dummguck: Ich dachte der Inhalt kommt aus der Datenbank. ... und die Hausnummer ist ja problemlos, DIE wird ja in jeder variante angezeigt - ob jetzt body oder titel.



Und was passiert, wenn Du die Ausgabe mal irgendwo in den <body> packst, um sie zu checken (ohne <title>-Tags)?
Hab ich doch probiert. Im body geht es, im seitentitel nicht.

Hier: http://www.bretagne.li/suche/haus.php?hausnr=FIN512
Die Hausnummer wird im Titeltag angezeigt - was ich machen wollte war noch weitere Informationen Hinzufügen, also "Ferienhaus FIN512 für 5 Personen in Loquierec" - diese Informationen werden im Body ja bereits abgefragt und dargestellt, darum war ich verwundert, das es im Titel nicht geht.

Hier habe ich Deinen Vorschlag getestet:
http://www.bretagne.li/suche/haus-test.php?hausnr=fin512
Die Überschrift habe ich mit Deiner Abfrage gemacht, funktioniert also (den Rest habe ich nicht weiter umgeschrieben, war ja nur ein Test) - nur im Titel funktioniert es eben auch nicht .....:mauer:

Jowra
10-08-2007, 12:52
Vielen Dank, ich hab es gleich mal getestet. Grundsätzlich funktioniiert das auch für die Abfragen im Content - bis auf die Abrage für die hausnummer, die muss ich weiterhin mit
<? echo $hausnr?> machen, sonst kommt da gar nichts.

Ich welchem Feld der Tabelle steht denn die Hausnummer? In hausname oder? Fragst Du also:

<? echo $line[hausname]?>

ab? oder hast Du fälschlicher Weise

<? echo $line[hausnr]?>

geschrieben?


Für die Abfrage im Title-Tag funktioniert das allerdins auch nicht - die Stellen, an denen ich das einfüge, bleiben einfach leer ...

Klingt, als würde die Datenbankabfrage erst nach Ausgabe des Titels erfolgen.

Das PHP-Template wäre mal interessant.

Ysla
10-08-2007, 13:02
Klingt, als würde die Datenbankabfrage erst nach Ausgabe des Titels erfolgen.

Das PHP-Template wäre mal interessant.
Das verstehe ich nicht, die Hausnummer wird doch auch abgefragt und ins Title-Tag geschrieben - warum dann der Rest nicht?

... das Template poste ich hier nicht, da bekommt Ihr sicher nur einen Lachkrampf und redet dann nicht mehr mit mir ... ;)

andreas'76
10-08-2007, 13:06
Woher kommt die Variable $hausnr hier überhaupt:


$query = "SELECT * FROM hausdb WHERE hausname LIKE '$hausnr' LIMIT 1";

Via GET/POST? * Edit, scheint wohl über GET zu kommen

Überprüfe besser erst einmal die variable in deinem Script bevor du sie weiterverwendest. Bei Hausnummern z.b. erst einmal überprüfen ob es eine Nummer ist, sonst könnte man ja alles mögliche da reinschreiben.

Fürs erste ändere mal dein Script so ab, damit 'unsichere' Zeichen escaped werden:

$query = "SELECT * FROM hausdb WHERE hausname LIKE '".mysql_real_escape_string($_GET['hausnr'], $link)."' LIMIT 1"; // $_GET nach $_POST ändern wenn die Daten via POST kommen

"$hausnr" wird bei dir wahrscheinlich nur angezeigt weil es über die globale GET Variable kommt, nicht aber über die MySQL Abfrage!

Versuchs mal so:

<?php

// Connecting, selecting database
$link = @mysql_connect($db_server, $db_user, $db_passwort)
or die("Die Datenbank ist zur Zeit überlastet, bitte versuchen Sie noch einmal die Seite aufzurufen.");
mysql_select_db($db_name)
or die("Die Datenbank wird gerade gewartet, einen Augenblick Geduld bitte.");

$query = "SELECT * FROM hausdb WHERE hausname LIKE '".mysql_real_escape_string($_GET['hausnr'], $link)."' LIMIT 1"; // $_GET nach $_POST ändern wenn die Daten via POST kommen
//echo "query: ".$query2;
$result=mysql_query($query)
or die("Query failed");

$line=mysql_fetch_object($result);

// Closing connection
mysql_close($link);
?>
Ich hab jetzt leider keine Zeit das durchzutesten...

Jowra
10-08-2007, 13:10
Das verstehe ich nicht, die Hausnummer wird doch auch abgefragt und ins Title-Tag geschrieben - warum dann der Rest nicht?

Woher kommt denn die Variable $hausnr? Die hast Du doch schon vorher, also vor der Datenbankabfrage. Und im title gibst Du sie auch direkt wieder als Variable aus, nicht als Datenbank-Inhalt per $line[xxx], sondern als Variable <?php echo $hausnr ?>


... das Template poste ich hier nicht, da bekommt Ihr sicher nur einen Lachkrampf und redet dann nicht mehr mit mir ... ;)

Das wäre aber zur Problemfindung hilfreich. :D Wie gesagt, mir scheint, daß die Datenbankabfrage erst später erfolgt, so daß im Body die DB-Inhalte vorhanden sind, im Title aber (noch) nicht. Die Hausnummer im Title ist kein Argument, denn die gibts Du ja mit <?php echo $hausnr ?> aus und die resultiert imho nicht aus der o.g. Datenbankabfrage, höchstens aus einer Abfrage die schon früher erfolgt.

andreas'76
10-08-2007, 13:22
Übrigens, ist das hier wirklich der letzte Teil deines Scripts?


if($line = mysql_fetch_object($result)){

Das macht nämlich keinen Sinn, kommt da nicht noch mehr?

Ysla
10-08-2007, 13:34
*kopfkratz* .... OK - vielen Dank erstmal für Eure Hilfe. :anbet: Das muss ich jetzt zunächst mal verarbeiten / testen / umschreiben .. wie auch immer. ... und wie Ihr sicher bereits vermutet, dauert das bei mir etwas länger.

Das mit den "unsicheren Zeichen" habe ich nicht verstanden und den Unterschied zwischen GET und POST auch nicht *seufz* aber heute kann ich mich damit ohnehin nicht aufhalten.

Ich nerve sicher bald wieder mit dummen Fragen ;)

Ysla
10-08-2007, 13:37
Übrigens, ist das hier wirklich der letzte Teil deines Scripts?


if($line = mysql_fetch_object($result)){

Das macht nämlich keinen Sinn, kommt da nicht noch mehr?

Danach kommt der Contentbereich mit den jeweiligen Inhalten über die Ferienhäuser. ... äh und das Script ist nicht von mir!

andreas'76
10-08-2007, 13:49
Ok, :) mit 'unsichen Zeichen' meinte ich, dass es besser ist, mögliche unsichere Zeichen - z.b. \x00, \n, \r, \, ', " und \x1a - zu escapen, also ein forward Slash anzufügen. So wie es jetzt bei dir ist kann man einfach alles mögliche (anstatt der Hausnummer) eingeben.

Siehst du?

haus.php?hausnr=Das geht direkt in die MySQL Query
Das kann möglicherweise Sicherheitsprobleme geben, kommt aber auch darauf an wie die das Script oder die DB aufgebaut ist. Besser ist man macht es! Und mysql_real_escape_string macht das automatisch.

POST bedeutet, dass die Formulardaten 'versteckt' versendet werden. Aber bei dir geht es via GET, also über die URL (hausnr=X).

andreas'76
10-08-2007, 14:04
Danach kommt der Contentbereich mit den jeweiligen Inhalten über die Ferienhäuser. ... äh und das Script ist nicht von mir!
Achso, dann wird dir mein Lösungsvorschlag auf der ersten Seite nicht weiterhelfen, da ich einfach die if Abfrage gelöscht habe. Poste doch mal das ganze Script - nur so können die Leute hier den Fehler suchen. :)

Ysla
10-08-2007, 14:45
blubb

andreas'76
10-08-2007, 15:14
Also, um das ganze zusammenzufassen: Alles läuft so wie es soll, bis auf die Angaben die im Titel fehlen? :D

Wie Jowra schon vermutete, es liegt an deinem Template/Script. Die Datenbankabfrage findet nämlich erst statt, nachdem der Titel schon ausgegeben wurde.

Du hast wahrscheinlich noch eine zweite Datei die nur für den HTML Anfang/Titel verantwortlich ist?

Ysla
10-08-2007, 15:59
Also, um das ganze zusammenzufassen: Alles läuft so wie es soll, bis auf die Angaben die im Titel fehlen? :D

Wie Jowra schon vermutete, es liegt an deinem Template/Script. Die Datenbankabfrage findet nämlich erst statt, nachdem der Titel schon ausgegeben wurde.

Du hast wahrscheinlich noch eine zweite Datei die nur für den HTML Anfang/Titel verantwortlich ist?

Genau .. den header habe ich noch aber da ist keine Datenbankabfrage drin.

Ysla
10-08-2007, 16:06
juhu ich könnte Euch knutschen! Ich habs hingekriegt! :)