PHP/SQL und eine Schleife

elathan

Grünschnabel
Hallo,

ich als absoluter Newbi in Sachen PHP habe ein Problem:

ich habe eine SQL-DB, in der neben der ID nur 4 Felder sind
Gruppe
Bild
Link
Begleittext


Ich möchte jetzt eine Schleife (Bedingung: Gruppe=x) programmieren, mit der die Tabelle durchforstet wird und in einer Tabelle ausgegeben wird. In jeder Gruppe können beliebig viele Einträge sein.

Die Tab ist 6 spaltig:
Bild1(x) Text1(x) Bild2(x) Text2(x) Bild3(x) Text(x)
...
d.h. also, nach jeweils 3 Bildern bzw. Texten beginnt die nächste Zeile.

Wie kann ich so was realisieren? Geht das überhaupt mit PHP?

Herzlichen Dank schon einmal.
 
Weiss nicht ob ich dich richtig verstehe oder nicht. Ich würds so in der Art lösen:


PHP:
<?php
 include("dbconnect.php");
$query_string="SELECT * FROM tabelle WHERE gruppe = "x"";
$result=mysql_query($query_string);
while ($datensatz = mysql_fetch_object ($result)) 
{
//hier kannst du die tabellen füllen
echo $datensatz->gruppe;
echo $datensatz->bild;
echo $datensatz->text;
 
}
?>

Das ganze kannst du in der SQL-Abfrage schon mit "WHERE" filtern...
 
Hallo,

1. Ja, das geht!
2. Sowohl für das Connect, als auch das verarbeiten und ausgeben in mehrspaltigen Tabellen gibts hier im Forum genug Threads, die aktuellsten keine 3 Tage alt. Bevor es nun das 10. Beispiel dazu gibt, würd ich vorschlagen erstmal die Suchfunktion zu nutzen. Wie gesagt, das Thema hat nen Bart und wie ich die Sache einschätze kannst mit nem konkreten Script mehr anfangen als mit 3 Bruchstücken und Klassen.
Beispiel:
http://www.tutorials.de/forum/php/271094-datensaetze-aus-db-4-spalten-darstellen.html
 
Sollte es noch zu der Frage kommen, wie du es realisieren kannst, dass immer 3 Bilder in einer Zeile stehen und anschließend eine neue Zeile beginnt, sähe die while Schleife aus der Vorgänger Antwort so aus:

PHP:
<?php
 include("dbconnect.php");
$query_string="SELECT * FROM tabelle WHERE gruppe = "x"";
$result=mysql_query($query_string);

// eine Variable zum Bilder zählen
$x = 1;

while ($datensatz = mysql_fetch_object ($result)) 
{
  // prüfen ob eine neue Zeile beginnt oder nicht
  if($x > 3)
  {
    // neue Zeile anfangen!
    $x = 1;
    echo "<br> oder </tr><tr>";
  }
  
  // Bilder ausgeben
  echo $datensatz->gruppe;
  echo $datensatz->bild;
  echo $datensatz->text;

  // Bild Nummer erhöhen
  $x++;
}
?>
 
Sorry aber ich verstehs nicht. Da sagt jemand das er "absoluter Newbie" in Sachen PHP ist und ihr kommt mit Klassen. Ich zweifel stark an das er damit was anfangen kann, zumal das Connect vollständig fehlt und die Ausgabe nur angedeutet wird.
Ich hab nicht umsonst den Link zum ausführlichen Beispiel gepostet. Nen absoluter Anfänger wollt kompetente Hilfe zu seinem Problem und keine Posthascherei mit der er nix anfangen kann. Wenn ihr solche Beispiel bringt, dann erklärt wenigstens eure Klassen oder fügt wenigstens aussagekräftige Kommentare ein, die erklären was die Klasse macht.
Danke!
 
Hallo an alle die mir geantwortet haben,

Danke für eure Code-Schnipsel bzw. die Kommentare. Die Suchkunktion werde ich künftig stärker bemühen.

@Badboyws: Danke für das ausführliche Beispiel, ich kämpfe mich durch. Und du hast Recht: mit "Klassen" kann ich wenig anfangen.
Ich denke, dass ich mal versuche, dein Beispiel zu adaptieren. Wenn ich Erfolg habe, poste ich hier den Code.

Danke nochmal.
 
Meine Lösung sieht wie folgt aus. Wundert euch nicht, es handelt sich um einen Code, der in Typo3 integriert ist:

PHP:
<?php
$result = mysql_query("SELECT Test_her.*, test_her_tabelle.* FROM Test_her, test_her_tabelle
WHERE Test_her.gruppen_id='20'");
  while($row = mysql_fetch_array($result)) {
  $j = mysql_num_fields($result);
  for($i=0;$i<$j;$i++) {
    $k = mysql_field_name($result,$i);
    $$k = $row[$k];
    }

echo "<table cellpadding='0' cellspacing='1' border='0' style='text-align: left; background-color: rgb(231, 228, 220); height: 38px;' width='720'><tr>";
$i = 1; 
while($rs = mysql_fetch_array($result)){ 
    echo "<td width=130 border=1 bgcolor=#F8F8EA height=20 valign=middle align=left ; vertical-align: middle><a href=index.php?id=422&wert=".$HER_INFO_firmen_id."&zahl=1>
<img src='fileadmin/****/image/Logos_fuer_CHM-Seiten/$rs[bild]'></td><td width=124>$rs[bez1]</td>"; 
    if ($i == 3){ 
    echo "</tr><tr valign=middle>"; 
    $i = 0; 
    } 
$i++;    
} 
echo "</tr></table>"; // Ende der letzten Zeile und der Tabelle 
} 
?>

Alles ist Bestens, bis auf die Tatsache, dass der erste Datensatz nicht ausgegeben wird. Wo ist da mein Fehler? :confused: Könnt ihr mir nochmal auf die Sprünge helfen?

Danke im Voraus.
 
Warum machst du das hier alles:
PHP:
  while($row = mysql_fetch_array($result)) { 
  $j = mysql_num_fields($result); 
  for($i=0;$i<$j;$i++) { 
    $k = mysql_field_name($result,$i); 
    $$k = $row[$k]; 
    }
greifst du da später im Skript noch drauf zu? Er gibt dir das erste nicht aus weil du 2 mal mysql_fetch_array verwendest. Wie soll ich das erklären.

In der Äusseren While-Schleife lässt du dir das 1 Ergebnis geben
PHP:
while($row = mysql_fetch_array($result))
Dann kommst du zu deiner inneren While-Schleife und läßt dir schon das zweite
Ergebnis geben obwohl du das erste nochnichtmal ausgegeben hast.
So klappt es
PHP:
 <?php 
$result = mysql_query("SELECT Test_her.*, test_her_tabelle.* FROM Test_her, test_her_tabelle 
WHERE Test_her.gruppen_id='20'"); 
echo "<table cellpadding='0' cellspacing='1' border='0' style='text-align: left; background-color: rgb(231, 228, 220); height: 38px;' width='720'><tr>"; 
$i = 1;  
while($rs = mysql_fetch_array($result)){  
    echo "<td width=130 border=1 bgcolor=#F8F8EA height=20 valign=middle align=left ; vertical-align: middle><a href=index.php?id=422&wert=".$HER_INFO_firmen_id."&zahl=1> 
<img src='fileadmin/****/image/Logos_fuer_CHM-Seiten/$rs[bild]'></td><td width=124>$rs[bez1]</td>";  
    if ($i == 3){  
    echo "</tr><tr valign=middle>";  
    $i = 0;  
    }  
$i++;     
}  
echo "</tr></table>"; // Ende der letzten Zeile und der Tabelle  
?>

</span></span>
 
Hi,

na das doch mal schön geworden. Genug um die Funktion sicher zu stellen und trotzdem kompakt. Und ich sehe das du das Beispiel grundlegend verstanden hast. Was will man mehr.
Viel Spass noch :)
 
Zurück