Rolf B: Mit foreach-Schleife in Tabelle ein Bild anzeigen

Beitrag lesen

Hallo Manu3l,

unabhängig vom Problem würde ich Dir diese Vorschläge machen wollen:

  1. Es ist sinnvoll, bei SQL Abfragen aus Programmen heraus die gewünschten Spalten einzeln aufzulisten. Dieses Vorgehen ist robuster als ein SELECT *.

  2. Nach query() ist eine Prüfung gegen FALSE notwendig, falls die Query fehlschlägt. Man sollte dem Anwender dann zeigen, dass die Liste nicht verfügbar ist, und die Fehlerursache ins interne Log schreiben. Es ist dann entweder ein Programmierfehler, oder die DB ist nicht in Ordnung.

  3. Statt <?php echo ... ?> bietet sich die <?= ?> Kurzschreibweise an

  4. Texte aus deiner Datenbank müssen bei der Ausgabe in HTML mit htmlspecialchars() kontextgerecht codiert werden-

  5. Den Rumpf eines foreach, in den HTML eingebettet ist, sollte man nicht mit { } kennzeichnen, sondern mit der alternativen Syntax foreach (...): ... endforeach; Man findet das Schleifenende dann besser wieder. Noch besser ist es, Darstellung und Logik zu trennen und die Ausgabe einer Row in eine Funktion auszulagern.

  6. Ein Image braucht einen alt-Text, hast Du daran gedacht?

  7. Zwischen </td> und <td> brauchst Du kein <?php ?> zu setzen

  8. Du hast <tr> vergessen (bzw. in deinem Posting nicht mitkopiert)

  9. Ob es sinnvoll ist, "heute" in die DB zu schreiben, würde ich bezweifeln wollen. Dort sollte ein Datum stehen, und wenn Du für Angebote von heute "heute" ausgeben willst, sollte das auf Grund eines Vergleichs von DB-Wert mit Tagesdatum erfolgen.

<?php 
      $sql = "SELECT bild, verkaeufer, name, kosten, kleidungsstueck, size, grade, firma, ort, erstellt_am FROM stores";
      $angebote = $db->query($sql)
      if ($angebote === FALSE)
      {
         // Errorhandling
      }
      else 
      {
         foreach ($db->query($sql) as $row) 
         {
            RenderStoreRow($row);
         }
      }

// Anderswo im Script:
// Für *** muss ein sinnvoller alternativ-Text generiert werden.

function RenderStoreRow($row)
{
?> <tr>
    <td><img alt='***' src='<?= $row['bild'] ?>'></td>
    <td><?= htmlspecialchars($row['verkaeufer']) ?></td>
    <td><?= htmlspecialchars($row['name']) ?></td>
    <td><?= $row['kosten'] ?></td>
    <td><?= htmlspecialchars($row['kleidungsstueck']) ?></td>
    <td><?= $row['size'] ?></td>
    <td><?= $row['grade'] ?></td>
    <td><?= htmlspecialchars($row['firma']) ?></td>
    <td><?= htmlspecialchars($row['ort']) ?></td>
    <td><?= $row['erstellt_am'] ?></td>
   </tr>
<?php
}

Rolf

--
sumpsi - posui - clusi