PHP; Mehrzeiliges Echo mit Variablen aus Array

(Firma: tsx89) Persönliche Seite #3160580
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ß
Gast #3160586
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.
#3160597
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)
(Firma: tsx89) Persönliche Seite #3160600
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 ??
#3160620
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
Persönliche Seite #3160671
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.
Persönliche Seite #3167813
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
Gast #3167868
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 ...
Gast #3169076
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
?>
Gast #3169120
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren