Forum: PC-Programmierung PHP; Mehrzeiliges Echo mit Variablen aus Array


von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


Lesenswert?

Guten Abend ^^
Ich habe eine kleine Anfängerfrage bezüglich des Multiline Echos unter 
PHP. Und zwar möchte ich per Echo meinen HTML Code, und Variablen von 
PHP mit ausgeben lassen. Normalerweise ist das absolut kein Thema, aber 
irgendwie bekomme ich das mit dem Multiline-Echo momentan nicht so 
gebacken, wie ich mir das vorstelle, und wollte daher um einen Tipp 
bitten.
1
$row = [[ARRAY aus einer SQL Tabelle]]
2
echo $row["id"];     //gibt z.B. "1" aus
3
echo $row["type"];   //gibt z.B. "33" aus etc...
4
5
//Problem Beispiel:
6
7
echo <<<ENDE
8
<table border="$row["border"]">
9
  <tr>
10
    <td>$row["foo"]</td>
11
    <td>$row["bar"]</td>
12
    <td>$row["baz"]</td>
13
  </tr>
14
</table>
15
ENDE;

Ich wechsel bei Projekten zwischen einigen Sprachen umeinander, aber 
richtig beherrschen tuhe ich momentan noch keine - Ich gehe mal davon 
aus, dass es nur ein kleines Syntax Problemchen ist, aber ich komme 
leider nicht von selber drauf.
Gruß

von Leo H. (Gast)


Lesenswert?

Moin,

dieses multiline-echo hab ich noch nie gesehen, bis jetzt mache ich das 
immer so:
1
<?php
2
//Datenbankabfrage etc.
3
$data = "Hallo";
4
?>
5
6
<!-- HTML-Quelltext -->
7
<HTML>
8
<?php echo $data; ?>
9
</HTML>
10
11
<?php
12
//noch mehr PHP
13
?>

Das wird zwar nicht schöner oder übersichtlicher, dafür gibt es 
wenigstens keinen Stress mit vergessenen Anführungszeichen.

von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


Lesenswert?

Mit dem gekürztem Code, so wie er im Beispiel aus dem vorherigen Post 
beschrieben ist, bekomme ich folgende Fehlermeldung:

Parse error: syntax error, unexpected '"', expecting identifier 
(T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in FILENAME 
on line XX

von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


Lesenswert?

Hmm so herum könnte ich es auch machen, hast natürlich Recht.

von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


Lesenswert?

Danke ^^

von Markus B. (markusborti)


Lesenswert?

1
<?PHP
2
$row = [[ARRAY aus einer SQL Tabelle]]
3
echo $row["id"];     //gibt z.B. "1" aus
4
echo $row["type"];   //gibt z.B. "33" aus etc...
5
6
//Problem Beispiel:
7
echo '<table border="'.$row["border"].'">';
8
echo   '<tr>';
9
echo    '<td>'.$row["foo"].'</td>';
10
echo    '<td>'.$row["bar"].'</td>';
11
echo    '<td>'.$row["baz"].'</td>';
12
echo  '</tr>';
13
echo '</table>';
14
?>

Hier gäbe es noch viele weitere Wege.
da musst du das für dich ubersichtlichste finden.
Tip: ließ dir mal durch, welche unterscheide ' und " haben. (Single 
quotes vs double quotes)

von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


Lesenswert?

Markus Borti schrieb:
> Tip: ließ dir mal durch, welche unterscheide ' und " haben. (Single
> quotes vs double quotes)

Okay in double Quotes kann man $Variablen einbauen, und sie sind etwas 
langsamer als single Quotes, wolltest du darauf hinaus ???


Markus Borti schrieb:
> echo    '<td>'.$row["baz"].'</td>';

Leo-andres H. schrieb:
> <HTML>
> <?php echo $data; ?>
> </HTML>

Beide Wege wollte ich eigentlich vermeiden, wegen der komplexeren 
Schreibweise und der Übersichtlichkeit halber. Dennoch danke für die 
Tipps. Gibt es nicht eine Multiline-Alternative, wie Print, oder am 
besten einen anderen Syntax fürs Echo, um Multilines zu verwirklichen??? 
Gerne auch über eine Methode oder Class !?? Kann mir da evtl jemand auf 
die Sprünge helfen ??

von TestX .. (xaos)


Lesenswert?

Timmey S. schrieb:
> Beide Wege wollte ich eigentlich vermeiden, wegen der komplexeren
> Schreibweise und der Übersichtlichkeit halber. Dennoch danke für die
> Tipps. Gibt es nicht eine Multiline-Alternative, wie Print, oder am
> besten einen anderen Syntax fürs Echo, um Multilines zu verwirklichen???
> Gerne auch über eine Methode oder Class !?? Kann mir da evtl jemand auf
> die Sprünge helfen ??

der saubere und vernünftige weg es mit php zu machen ist:
1
<table border="<?php echo $row["border"]; ?>">
2
  <tr>
3
    <td><?php echo $row["foo"]; ?></td>
4
    <td><?php echo $row["bar"]; ?></td>
5
    <td><?php echo $row["baz"]; ?></td>
6
  </tr>
7
</table>

evtl suchst du soetwas wie Smarty ... allerdings ist der obere weg 
üblich und durch die verwendung von entwurfsmustern wie MVC sehr sauber 
zu implementieren

von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


Lesenswert?

Andi D. schrieb:
> der saubere und vernünftige weg es mit php zu machen...

Okay dann werde ich das so übernehmen / anpassen.
Dankeschön, und gute Nacht.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Timmey S. schrieb:
1
echo '
2
 <table border="'.$row["border"].'">
3
   <tr>
4
     <td>'.$row["foo"].'</td>
5
     <td>'.$row["bar"].'</td>
6
     <td>'.$row["baz"].'</td>
7
   </tr>
8
</table>
9
';
Sollte funktionieren wie gewünscht, wieso der andere Weg "vernünftiger" 
oder "sauberer" ist kann ja  Andi nochmal erklären ;-)

Wirklich besser wäre, wie vorgeschlagen, etwas wie Smarty zu verwenden 
und nicht PHP direktiven und HTML zu mischen, das macht den Code weitaus 
lesbarer und wartbarer.

von kreis (Gast)


Lesenswert?

An der Stelle lohnt es sich das Symfony Framework für php anzugucken.

von D. I. (Gast)


Lesenswert?

An der Stelle lohnt sichs von PHP Abstand zu nehmen und 
$was_vernuenftiges zu verwenden [Python+Django, RoR, ASP.NET, JSP, ...]

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Das mag ja alles toll und hip sein, hilft dem TE aber nicht wenn sein 
Hoster nur PHP anbietet, oder er es gerne benutzen möchte.
Außerdem kann man in PHP genauso 'vernünftig' Programmieren wie in 
anderen Sprachen.
Ebenso wie man in 'vernünftigen' Sprachen viel Unsinn treiben kann.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Timmey S. schrieb:
> irgendwie bekomme ich das mit dem Multiline-Echo momentan nicht so
> gebacken, wie ich mir das vorstelle

Und wie stellst Du Dir das vor?

"Multiline" lässt ja mehrere Zeilen annehmen; Dein Tabellenausgabecode 
aber erzeugt eine Tabelle mit einer Zeile und drei Spalten.

von Henry S. (masterx) Benutzerseite


Lesenswert?

ich glaube du solltest deine Variablen in den Multilines kapseln mit den 
geschweiften Klammern, da du da Arrays verwendest.
also:
...<table border="{$row["border"]}">...

da du aber bei einer Tabelle in der Regel dynamische Zeilen generierst, 
ist dein Ansatz nicht gut, da du ja nur deine kleine Tabelle damit 
rausschreibst. Weitere Zeilen lassen sich so nicht mehr erzeugen.

Daher ist eine Lösung wie oben empfohlen besser.

Obwohl sich ja hierbei keine Einigkeit herscht.
ob
HTML<?php echo $var ?>HTML
oder
<?php echo 'HTML'.$var.'HTML'; ?>
besser ist, kann sicherlich nur unter Performancebetrachtung bewertet 
werden.

und mal so nebenbei: Lass dich nicht beirren, PHP hat genau so seine 
Berechigung wie auch die anderen Sprachen zur webbasierten Ausgabe :)

lg Henry

von Frank (Gast)


Lesenswert?

Zurück zu PHP: Wenn die Tabellen größer sind, lohnt es sich, das ganze 
in Funktionen aufzusplitten, um HTML dynamisch zu erzeigen und CSS 
dynamisch anzupassen. Ich habe mir das z.B. für eine Messwertanzeige so 
gemacht:

tab_open (m. Parameteren für Breite, Spaltenanteile, Hintergrundfarbe 
etc)
tab_ropen (f. row)
tab_cell (f. Zelle)
tab_rclose (f. row)
tab_close

und einige globale Variablen für Schriftart-, Größe, Farbe usw.

Das sieht am Anfang nach maßlosem Overkill aus, aber spätestens nach der 
vierten Tabelle mit 10 Spalten, weiss man, was man hat - z.B. ein 
übersichtliches und kompaktes Main-Programm ohne ständigen 
Kontextwechsel zwischen PHP und HTML ...

von n.n. (Gast)


Lesenswert?

hallo,

betreffend der ursprünglichen frage:

multiline echos haben ihren reiz, offizell ist das die "here 
document"-Syntax.
arrayzugriffe darin muss man aber mit geschweiften klammern markieren.

so funktioniert es:
1
<?php
2
3
$row["foo"]='hello';
4
$row["bar"]='world';
5
$row["baz"]='again';
6
echo <<<ENDE
7
<table border="1">
8
  <tr>
9
    <td>{$row["foo"]}</td>
10
    <td>{$row["bar"]}</td>
11
    <td>{$row["baz"]}</td>
12
  </tr>
13
</table>
14
ENDE;
15
?>

von anonymous (Gast)


Lesenswert?

da bei einer datenbank-abfrage i.a. für jeden eintrag die gleichen keys 
vorhanden sind würde ich das ganze so (ähnlich) lösen:
1
<?php
2
$keys = array_keys($row);
3
?>
4
<tr>
5
<?php 
6
foreach($keys as $key) {
7
echo '<td>' . (array_key_exists($key, $row) ? $row[$key] : '') . '</td>';
8
}
9
?>
10
</tr>

die keys muss man eimal vorbelegen (Wie auch immer) - danach hat man 
aber immer vollständige ausgaben in einer zeile, egal wieviele spalten 
pro zeile vorgesehen sind

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.