Whileschleife innerhalb MySql Abfrage

teboras

Grünschnabel
Hallo zusammen,

hoffe es kann mir Jemand weiterhelfen, ich möchte folgendes realisieren, per übergabe der parameter Reihen und Zeilen soll eine HTML-Tabelle erstellt werden z.B. 5 Reihen und 5 Zeilen welche per Whileschleife anhand der beiden Parameter erstellt wird, was auch keinerlei Probleme darstellt.

Nun sollen die Tabellen mit per Random ausgewählten Daten gefüllt werden so das sich in jeder Zelle ein einmal vorkommender Datensatz befindet in diesem Fall handelt es sich um Bildanzeigen.

Mein Problem nun, soweit funktioniert alles bis auf die Ausgabe der Datensätze diese sind nicht zufälling sondern in jeder Tabellenzelle der gleiche Datensatz und bei erneutem Aufruf ein anderer Datensatz allerdings wieder in jeder Tabellenzelle der Gleiche.

Wäre super wenn von Euch Jemand eine Idee hätte wo der Fehler liegt bzw. sogar einen Lösungsansatz.

Nachfolgend der verwendete Code, besten Dank schonmal für die Hilfe

PHP:
$max = "100";
$c1 = "0";
$c2 = "0";
$rows = "5";
$cols = "2";
$ic = "1";

IF($scriptname == "popup") $target = "target=\"_blank\"";

$sqlc = "SELECT * FROM ".$tables->prefix.$tables->ads." WHERE AdsID AND pending = '0'  AND img1 NOT LIKE ''  
ORDER BY RAND() asc limit 0, ".$max."";
$rc = mysql_query($sqlc);
$c = mysql_num_rows($rc);

echo "<table cellpadding=\"0\" cellspacing=\"0\">";


$i = 0;

while ($r = mysql_fetch_array($rc)) 
{

$alt = $r[ad_field1];

/*Spaltengenerierung*/
while ($cols > $c2) 
{
$c2++;

$spalten .= "<td><a href=\"single_ads.php?AdsID=$r[AdsID]&KatID=$r[KatID]&MainID=$r[MainID]&SubKatID=$r[SubKatID]\" $target>
".$imagesize = getimagesize("".abpath."/thumbs/t$r[img1]")."
<img src=\"".userpic_path."thumbs/t$r[img1]\" $imagesize[3] border=\"0\" alt=\"$alt\">
<br><a href=\"single_ads.php?AdsID=$r[AdsID]&KatID=$r[KatID]&MainID=$r[MainID]&SubKatID=$r[SubKatID]\" $target>$r[ad_field1]</a>
</td>";
}


echo "<table>\n";
/*Reihengenerierung*/
while ($rows > $c1) 
{
$c1++;

echo "<tr>\n";
echo "".$spalten."\n";
echo "</tr>\n";
}
}
 
Zuletzt bearbeitet:
Hi,

setze erstmal Deine Limit-Klausel in der Abfrage auf $rows * $cols. Ein fester Wert ergibt da doch gar keinen Sinn.
Dann schmeißt Du die beiden inneren while-Schleifen weg, die sind Quatsch (so erstellst Du ja aus jedem Datensatz eine $rows x $cols Tabelle).
Prüfe einfach anhand von $cols und einem Zähler, ob Du eine neue Zeile anfangen musst.

Beispiel:
PHP:
echo "<table>\n";
$i = 0;

while ($r = mysql_fetch_array($rc))  {
   if($cols % $i == 0) {
      echo "<tr>\n";
   }

   echo "<td>" . $r['feld'] . "</td>\n";
   $i++;

   if($cols % $i == 0) {
      echo "</tr>\n";
   }
}

echo "</table>\n";

LG
 
hi,

vielen Dank für die schnelle Antwort, ich denke ich habe mich vielleicht falsch ausgedrückt.

Der User soll ja per Formular festlegen können wieviele Tabellenzellen er wünscht, deshalb
die parameter rows und cols ich habe die Werte nur zum Test oben festgelegt diese werden später zu einem Iframe Code hinzu gefügt den der User in seine Webseite einbaut um somit die Anzeigen dort zu platzieren, nach seinen Vorgaben sprich die Tabelle wird dann im Iframe z.B. mit 5 Reihen und 3 Zeilen erstellt.

Wenn ich die Tabelle nach Einträgen in der DB erstellen lassen wollte hätte ich das so nicht gemacht, denn dann wäre es in der Tat quatsch :)

Danke nochmal
 
Hi,

ich habe Dich schon verstanden, Du mich aber noch nicht.

Wenn ich die Tabelle nach Einträgen in der DB erstellen lassen wollte hätte ich das so nicht gemacht, denn dann wäre es in der Tat quatsch :)

Deshalb sollst Du ja auch genauso viele Datensätze auswählen, wie benötigt werden.

kuddeldaddeldu hat gesagt.:
setze erstmal Deine Limit-Klausel in der Abfrage auf $rows * $cols.

Und schon passt das.

LG
 
hi,

ok ich schau mir das mal genauer an, obwohl ich der Meinung bin das es nicht das problem löst denn der User kann und soll ja das Ausgabeformat über rows und cols steuern, also ob die Tabelle im Hochformat oder im Querformat erscheint.

Das geht eben mit Deinem Lösungsvorschlag nicht, leider.

Bsp. User wählt 5 Reihen und 1 Zeile = Querformat oder er wählt 1 Reihe und 5 Zeilen = Hochformat.

ich füge mal eine Link mit einem Beispiel bei.

http://www.pferdekauf-online.de/mini_generator.html
 
Hi,

Danke nochmal für Deine erneute Hilfe, aber vielleicht bin ich ja zu dämlich dazu ;-)
ich hatte das schon getestet und er spuckt eben nicht das aus was er soll egal welche werte ich für cols und rows angebe, die ausgabe erstellt 1 Zelle Oben und 5 Unten oder umgekehrt aber nie eine gleichförmige Tabelle :-(

Wenn ich es mit meinem Beispiel mache wird eine perfekte Tabelle erstellt genau nach Vorgabe von rows und cols nur eben die Datensätze erscheinen nicht korrekt.

Ich verzweifel echt langsam :-( schau doch bitte nochmal auf den jetzigen Code habe Deinen Vorschlag verwendet.
PHP:
$c1 = "0";
$c2 = "0";
$rows = "1";
$cols = "5";
$max = ($rows*$cols);
$ic = "1";

IF($scriptname == "popup") $target = "target=\"_blank\"";

$sqlc = "SELECT * FROM ".$tables->prefix.$tables->ads." WHERE AdsID AND pending = '0'  AND img1 NOT LIKE ''  
ORDER BY RAND() asc limit 0, ".$max."";
$rc = mysql_query($sqlc);
$c = mysql_num_rows($rc);

echo "<table>\n"; 
$i = 0; 

while ($r = mysql_fetch_array($rc))  { 
   if($cols % $i == 0) { 
      echo "<tr>\n"; 
   } 

   echo "<td><a href=\"single_ads.php?AdsID=$r[AdsID]&KatID=$r[KatID]&MainID=$r[MainID]&SubKatID=$r[SubKatID]\" $target>";
IF(file_exists("".abpath."/$r[img1]"))
{
@$imagesize = getimagesize("".abpath."/thumbs/t$r[img1]");
echo "<img src=\"".userpic_path."thumbs/t$r[img1]\" $imagesize[3] border=\"0\" alt=\"$alt\">";
} else {}
echo "<br><a href=\"single_ads.php?AdsID=$r[AdsID]&KatID=$r[KatID]&MainID=$r[MainID]&SubKatID=$r[SubKatID]\" $target>$r[ad_field1]</a></td>\n"; 
   $i++; 

   if($cols % $i == 0) { 
      echo "</tr>\n"; 
   } 
} 

echo "</table>\n";
 
Zurück