Arrayelelemente in String (html-code) einbauen bzw. auslesen
RubiCon
- php
0 Edgar Ehritt0 Tom0 Ruby Con
Hallo,
folgender Ausschnitt ist Teil eines HTML-Codes, mit dem sich eine Seite erzeugen läßt, auf welcher ein Bild mit den dazugehörigen Daten aus einer SQL-Datenbank wiedergegeben werden kann.
echo "....
echo "<tr>";
echo "<td colspan="4"><img src="milbato/img/$row[0]"></td>"; // Photo
echo "</tr>";
echo "<tr>";
echo "<td colspan="4"><div align="center">",$row[1],"</div></td>"; //Bildunterschrift
..."
In dieser "ausgeschriebenen" Form funktioniert das Skript prima.
Sobald ich allerdings diesen als HTML auszugebenden Code in einer Variablen zusammenfasse, um sie Bedingungsabhängig zu verwenden, werden die Arrayelemente nicht mehr ausgelesen. Verschiedene Schreibweisen des Arrays - Punkte, Klammern, etc. - haben nichts genützt. Wer kann helfen?
Danke schon mal.
R.C.
Hallo,
Wer kann helfen?
derjenige, der Ahnung von PHP und Einblick in den Quellcode Deiner Fehlschläge hat.
Gruß aus Berlin!
eddi
Hello,
Sobald ich allerdings diesen als HTML auszugebenden Code in einer Variablen zusammenfasse, um sie Bedingungsabhängig zu verwenden, werden die Arrayelemente nicht mehr ausgelesen. Verschiedene Schreibweisen des Arrays - Punkte, Klammern, etc. - haben nichts genützt. Wer kann helfen?
Wann und wie erzeugst Du diese Variable und wann und wie setzt Du sie dann ein?
Ein harzliches Glückauf
Tom vom Berg
Hello,
Sobald ich allerdings diesen als HTML auszugebenden Code in einer Variablen zusammenfasse, um sie Bedingungsabhängig zu verwenden, werden die Arrayelemente nicht mehr ausgelesen. Verschiedene Schreibweisen des Arrays - Punkte, Klammern, etc. - haben nichts genützt. Wer kann helfen?
Wann und wie erzeugst Du diese Variable und wann und wie setzt Du sie dann ein?
Ein harzliches Glückauf
Tom vom Berg
Hallo,
Der o.g. Ausschnitt ist Teil einer Bedingung (if...), die vom
Vorhandensein ($laenge >= 1) oder Nichtvorhandensein ($laenge == 0) verschiedener Formulareingaben abhängt.
Diese werden von dem Skript übernommen, das den Datensatz aus der Datenbank holt und in html-Tabellenform darstellt.
Eine Bedingung lautet also:
if ($[Länge der ersten Eingabe] == 0 && $[Länge der zweiten Eingabe] >= 1)
{
$result = mysql_db_query($dbname, "SELECT img_src_1,img_cpt_1, [etc. etc.]
FROM milbato_0
WHERE name='{$_POST['[Eingabe ins 2. Formularfeld]']}'", $conn);
$row = mysql_fetch_row($result);
echo "<table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0">;
echo "<tr>" usw.
usw.
usw."
}
Die ausgeschriebene Fassung funktioniert nachgewiesenermaßen. Was nicht funktioniert, ist die Kurzform mit einer Variablen ($htm), die den
HTML-Code einschließlich der Arrayelemente (s.o.) enthält.
Die Variable enthält alles nach "<table>..... Setze ich sie ein (echo $htm) , erscheint die Seite mit der HTML-Tabelle völlig korrekt, aber ohne die Elemente aus dem Array.
Ich nehme daher an, daß es sich um einen Syntaxfehler handelt.
Gruß
Ruby Con
Hello,
bitte in diesem Forum keine Fullquotes, wenn es nicht unbedingt notwendig ist. :-)
Wann und wie erzeugst Du diese Variable und wann und wie setzt Du sie dann ein?
Der o.g. Ausschnitt ist Teil einer Bedingung (if...), die vom
Vorhandensein ($laenge >= 1) oder Nichtvorhandensein ($laenge == 0) verschiedener Formulareingaben abhängt.
Diese werden von dem Skript übernommen, das den Datensatz aus der Datenbank holt und in html-Tabellenform darstellt.Eine Bedingung lautet also:
if ($[Länge der ersten Eingabe] == 0 && $[Länge der zweiten Eingabe] >= 1)
{
$out = hole_daten("SELECT img_src_1,img_cpt_1, [etc. etc.]", $con)
}
function hole_daten($sql)
{
$result = mysql_query($sql, $con)
if (!result) return false;
$row = mysql_fetch_row($result);
$out = "<table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0">;
$out .= "<tr>\r\n" ## usw.
## usw usw
return $out;
}
Das Problem ist vermutlich, dass Du eine Laufzeitbedingung hast. Das bedeutet, dass die Bedingung erst zur Laufzeit des Scriptes eintritt, die Variablen _in_ der von Dir vorbereiteten Variable aber bereits davor ersetzt werden.
Vermutlich bekommst Du Notices, wenn Du die Fehlermeldungen für die Entwicklungszeit vernünftig einstellen würdest.
error_reporting(E_ALL);
ini_set('display_errors',1)
an Anfang eines Scriptes (für die Entwicklungsdauer) oder besser entsprechende Angaben in einer .htaccess-Datei außerhalb des Scriptes (die gelten dann nämlich für alle php-Dateien des Verzeichnisses)
php_value error_reporting 2047
php_value display_errors 1
Ein harzliches Glückauf
Tom vom Berg
Hello,
bitte in diesem Forum keine Fullquotes, wenn es nicht unbedingt notwendig ist. :-)
Wann und wie erzeugst Du diese Variable und wann und wie setzt Du sie dann ein?
Der o.g. Ausschnitt ist Teil einer Bedingung (if...), die vom
Vorhandensein ($laenge >= 1) oder Nichtvorhandensein ($laenge == 0) verschiedener Formulareingaben abhängt.
Diese werden von dem Skript übernommen, das den Datensatz aus der Datenbank holt und in html-Tabellenform darstellt.Eine Bedingung lautet also:
if ($[Länge der ersten Eingabe] == 0 && $[Länge der zweiten Eingabe] >= 1)
{
$out = hole_daten("SELECT img_src_1,img_cpt_1, [etc. etc.]", $con)
}function hole_daten($sql)
{
$result = mysql_query($sql, $con)
if (!result) return false;$row = mysql_fetch_row($result);
$out = "<table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0">;
$out .= "<tr>\r\n" ## usw.## usw usw
return $out;
}
Das Problem ist vermutlich, dass Du eine Laufzeitbedingung hast. Das bedeutet, dass die Bedingung erst zur Laufzeit des Scriptes eintritt, die Variablen _in_ der von Dir vorbereiteten Variable aber bereits davor ersetzt werden.
Vermutlich bekommst Du Notices, wenn Du die Fehlermeldungen für die Entwicklungszeit vernünftig einstellen würdest.
error_reporting(E_ALL);
ini_set('display_errors',1)an Anfang eines Scriptes (für die Entwicklungsdauer) oder besser entsprechende Angaben in einer .htaccess-Datei außerhalb des Scriptes (die gelten dann nämlich für alle php-Dateien des Verzeichnisses)
php_value error_reporting 2047
php_value display_errors 1Ein harzliches Glückauf
Tom vom Berg
Hallo,
die Fehlermeldungeinstellung hatte ich vergessen. Aber obwohl ich jetzt mehr Fehlermeldungen bekomme, führt das auch nicht weiter:
Zuerst bekam ich nämlich
Parse error: syntax error, unexpected ',' in C:\xampp\htdocs\testordner\milbato.php on line 48
für das erste row[1] (row[0] ist die var für ein Bild)
Die Meldung bekam ich vorher schon, woraufhin ich alle , in .
getaucht hatte. Nachdem überall Punkte standen, gab es auch keine
Fehlermeldungen mehr, sondern die Seite, aber eben ohne die
Einträge aus dem db-Array.
Error_reporting gab mir dann "invalid variable" für die .$row[].
zurück, woraufhin ich alle Kommata wieder zurückgesetzt habe (war
halt ein Versuch).
Also alles back to zero... Es scheint doch ein Syntaxfehler zu sein.
Gruß
R.C.
Hello,
Also alles back to zero... Es scheint doch ein Syntaxfehler zu sein.
Mit einem solchen Fragment, in dem dann auch noch die Hälfte durch ... gekürzt wird, kann man Dir leider auch nicht richtig helfen. Das heißt jetzt aber nicht, dass DU Deinen gesamten Code hier reinschreiben sollst. Du musst eben versuchen, die passenden Abschnitte zu treffen und die dann zeichengenau wiedergeben!
Und BITTE keine Fullquotes mehr.
PHP gibt Dir bei eingeschalteten Fehlermeldungen die Chance, Dein Script Schritt für Schritt lauffähig zu bekommen. Der Fehler wird meistens dort angemeckert, wo er sich befindet oder kurz danach, wenn der Parser eben merkt, dass etwas nicht mehr stimmen kann. Dann liegt er oft nur eine Zeile höher, z.B. wenn man ein Semikolon vergessen hat oder eine schließende runde Klammer.
Nur bei den Blockklammern wird es manchmal eklig. Da kann der Fehler im ganzen darüberliegenden Script versteckt sein. Ein gutes Script-Format hilft da immer, die Fehler schnell zu finden.
Ich empfehle Anfängern immer den Allman-Style http://de.wikipedia.org/wiki/Einrückungsstil
Nun also nochmal von vorne...
Ein harzliches Glückauf
Tom vom Berg
Hello,
Also alles back to zero... Es scheint doch ein Syntaxfehler zu sein.
Mit einem solchen Fragment, in dem dann auch noch die Hälfte durch ... gekürzt wird, kann man Dir leider auch nicht richtig helfen. Das heißt jetzt aber nicht, dass DU Deinen gesamten Code hier reinschreiben sollst. Du musst eben versuchen, die passenden Abschnitte zu treffen und die dann zeichengenau wiedergeben!
Und BITTE keine Fullquotes mehr.
PHP gibt Dir bei eingeschalteten Fehlermeldungen die Chance, Dein Script Schritt für Schritt lauffähig zu bekommen. Der Fehler wird meistens dort angemeckert, wo er sich befindet oder kurz danach, wenn der Parser eben merkt, dass etwas nicht mehr stimmen kann. Dann liegt er oft nur eine Zeile höher, z.B. wenn man ein Semikolon vergessen hat oder eine schließende runde Klammer.
Nur bei den Blockklammern wird es manchmal eklig. Da kann der Fehler im ganzen darüberliegenden Script versteckt sein. Ein gutes Script-Format hilft da immer, die Fehler schnell zu finden.
Ich empfehle Anfängern immer den Allman-Style http://de.wikipedia.org/wiki/Einrückungsstil
Nun also nochmal von vorne...
Hallo Tom,
also, jetzt habe ich ja schon fast den ganzen Code in Fragmenten geschickt...
Vergessen wir daher mal eben die Anfängertips und konzentrieren uns auf
den Punkt, bzw. das Komma:
Sicher ist, daß die Verbindung mit der db funktioniert und daß der HTML-Code stimmt, denn die Seite wird - in der ausgeschriebenen Form des HTML-Codes - in der gewünschten Form einschließlich der Arrayelemente dargestellt.
Nach meinem Verständnis bleiben als Fehlerquelle
a) die syntaktische Schnittstelle zwischen HTML und Array innerhalb des zur Variablen verdichteten HTML-Codes , also ...<td>",$row[0],"</td>" oder
b) die Benutzung der Variablen in Verbindung mit echo (echo "$htm";).
Für a) (und gegen b) spricht, daß die Fehlermeldung sich auf die Kommata bezieht, mit denen das Arrayelement vom HTML-string freigestellt wird. Tauscht man die Kommata, wie erwähnt, gegen Punkte aus, bekommt man zwar noch mehr Fehlermeldungen bezüglich des Arrays (keine gültige Variable), erhält aber andererseits eine ordentliche HTML-Tabelle.
Grüße
R.C.
Mahlzeit,
Grüße
R.C.
Was genau hast Du an "bitte in diesem Forum keine Fullquotes, wenn es nicht unbedingt notwendig ist." und "Und BITTE keine Fullquotes mehr." eigentlich nicht verstanden? Du ignorierst gekonnt und konsequent nicht nur übliche Gepflogenheiten, die Netiquette und die Charta des Forums, sondern auch gezielte Bitten.
MfG,
EKKi
Hallo,
im Zweifel ist diese Methode
error_reporting(E_ALL);
ini_set('display_errors',1)
vorzuziehen!
php_value error_reporting 2047
php_value display_errors 1
Die ERROR Konstanten werden gerade neu vergeben (alte ERROR Konstanten [stand Postingdatum]). Und wie das bei PHP so üblich ist, gibts auch noch einen Wuselfaktor: andere Werte für ERROR Konstanten
Alles klar? Mir auch nicht! ;)
Gruß aus Berlin!
eddi
echo $begrüßung;
Die ERROR Konstanten werden gerade neu vergeben (alte ERROR Konstanten [stand Postingdatum]). Und wie das bei PHP so üblich ist, gibts auch noch einen Wuselfaktor: andere Werte für ERROR Konstanten
Alles klar? Mir auch nicht! ;)
So schlimm ist es nun auch wieder nicht. Sicher, man hätte E_ALL von Anfang an auf -1 (alle Bits gesetzt) setzen können. Doch E_ALL war und ist für fast alle Anfängerprobleme ausreichend, egal, welchen Wert es nun hat. Das was da hingekommen ist und noch hinzukommt, ist mehr oder weniger nur für Spezialfälle unter Fortgeschrittenen relevant.
echo "$verabschiedung $name";
Hallo,
Sinn meines postings war darauf hinzuweisen, dass unter den folgenden Verweisen unterschiedliche Werter der Konstanten benannt sind. Der Wert E_ALL ist bereits bei PHP 5.2.6 NICHT MEHR 2047!
Verweis: Wert von E_ALL:
#############################################################
ERROR Konstanten 6143
alte ERROR Konstanten 2047
andere Werte für ERROR Konstanten 8191
Ich hatte schon erwartet, dass dies aus den angegebenen Verweisen so offensichtlich wird, aber nun haben wir es eben nochmals für alle zusammengetragen...
Gruß aus Berlin!
eddi
Hallo,
folgender Ausschnitt ist Teil eines HTML-Codes, mit dem sich eine Seite erzeugen läßt, auf welcher ein Bild mit den dazugehörigen Daten aus einer SQL-Datenbank wiedergegeben werden kann.
echo "....
echo "<tr>";
echo "<td colspan="4"><img src="milbato/img/$row[0]"></td>"; // Photo
echo "</tr>";
echo "<tr>";
echo "<td colspan="4"><div align="center">",$row[1],"</div></td>"; //Bildunterschrift
..."In dieser "ausgeschriebenen" Form funktioniert das Skript prima.
Sobald ich allerdings diesen als HTML auszugebenden Code in einer Variablen zusammenfasse, um sie Bedingungsabhängig zu verwenden, werden die Arrayelemente nicht mehr ausgelesen. Verschiedene Schreibweisen des Arrays - Punkte, Klammern, etc. - haben nichts genützt. Wer kann helfen?
Danke schon mal.
R.C.
Hallo,
... Laufzeitfehler ......
Variable verschoben,
Das Komma war übrigens nicht die Ursache, aber ein Hindernis, um den Laufzeitfehler zu erkennen, denn die Einbettung der Arrayelemente in Kommas funktioniert bei der ausgeschriebenen Version. Man muß also auch die
Kommas in Punkte verwandeln.
Danke jedenfalls und
Gute Nacht
Problem gelöst.
Gute Nacht
R.C.