Tabellen in reihe 5mal auslesen

Deadfish

Mitglied
Hallo,
mein Problem ist das bei meiner Bilder abfrage (An sich geht alles ) die in einer TD Tabelle dargestellt wir das wenn der php code die Bilder aus der DB ausließt das er immer mehre Bilder nebeneinander macht.

Also meine Frage ist nun ob jemand weis wie ich das so darstellen kann das er erkennt wenn es c.a 5 Bilder sind in einer reihe aber noch welche ausgelesen werden müssen das er dann eine neue reihe anfängt und wider c.a 5 in einer reihe macht

Mein momentaner PHP Code

PHP:
<script type="text/javascript" src="script/lightbox.js"></script>
<table  width="106" border="1">

<?

$albumget = $_GET['albumname'];

$abfrage = 
"SELECT
album.albumname,
album.foto,
album.bildid
FROM
album
Inner Join benutzerdaten
WHERE
album.Id =  '".$_SESSION['user_id']."' AND
album.albumname =  '$albumget' 
 GROUP BY album.bildid DESC
";

$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
$fotoid = "$row->bildid";
$album = "$row->albumname";
$fotolink = "$row->foto";


?>


    <td><a href="<? echo "$fotolink"; ?>" rel="lightbox" title="<? echo "$album"; ?>"><img name="" src="<? echo "$fotolink"; ?>" width="149" height="181"></a></td>




<?
}
 mysql_close();
 ?>
 
</table>
 
Hi,

ich würde noch eine Variable definieren, die sich in der While-Schleife hochzählt.

Hier habe ich mal ein ähnliches Beispiel:
PHP:
<?php

function get()
{
  return rand(0, 1000);
}

echo "<table><tr>";
$counter = 0;

while ($counter<20)
{
  $row = get();
  if ($counter%5==0 && $counter!=0)
  {
    echo "</tr>";
    echo "<tr>";
  }
  echo "    <td>".$row."</td>";
  $counter++;
}
echo "</tr></table>";

?>
Statt dieser Bedingung schreibst du eben dein [phpf]mysql_fetch_object[/phpf] wie oben. Und den Teil mit $row=get(); musst du natürlich auch weglassen.


Übrigens ist es gefährlich, einfach Variablen aus $_GET im MySQL-Query zu benutzen.
Siehe auch mein Tutorial Sicherheit in PHP-Codes schaffen, Punkt 3.
(Im Prinzip einfach [phpf]mysql_real_escape_string[/phpf] auf die Variable anwenden.)
 
Zuletzt bearbeitet:
So das geht jetzt soweit Harper nur bei der Variablen abfrage hab schon einige Probiert aber nichts geht

PHP:
   echo "<table>\n"; 
    
   $count = 0; 
    
   while ($count < 5) 
   { 
      if (! ($count %5)) 
        echo " <tr>"; 
         
      $count++; 
       
      echo '<td><a href="$row->foto" rel="lightbox" title=".$album."><img name=" src="$row->foto" width="149" height="181"></a></td>'; 
       
      if (! ($count %5)) 
        echo " </tr>"; 
   } 
   
   echo "</table>";
 
Du belegst ja auch nicht $row mit einem Wert.

Ich habe es auch mal für dich umgebaut ;)

PHP:
<script type="text/javascript" src="script/lightbox.js"></script> 
<table  width="106" border="1">
<tr> 

<? 

$albumget = mysql_real_escape_string($_GET['albumname']); 

$abfrage =  
"SELECT 
album.albumname, 
album.foto, 
album.bildid 
FROM 
album 
Inner Join benutzerdaten 
WHERE 
album.Id =  '".$_SESSION['user_id']."' AND 
album.albumname =  '$albumget'  
 GROUP BY album.bildid DESC 
"; 

$ergebnis = mysql_query($abfrage); 

$count = 0;

while($row = mysql_fetch_object($ergebnis)) 
{ 
  $fotoid = "$row->bildid"; 
  $album = "$row->albumname"; 
  $fotolink = "$row->foto"; 
  
  if ($count%5==0 && $count!=0)
  {
    echo "</tr>";
    echo "<tr>";
  }
?> 


    <td><a href="<? echo "$fotolink"; ?>" rel="lightbox" title="<? echo "$album"; ?>"><img name="" src="<? echo "$fotolink"; ?>" width="149" height="181"></a></td> 





<? 
  $count++;
} 
 mysql_close(); 
?>
</tr></table>
Müsste klappen!
 
Zuletzt bearbeitet:
Ja, sowas geht auch.
Ich würde dann noch eine zusätzliche Variable ("startImg") per GET übertragen, die den Start-Datensatz beschreibt.
Hier der erweiterte Code:
PHP:
<script type="text/javascript" src="script/lightbox.js"></script> 
<table  width="106" border="1">
<tr> 

<? 

$albumget = mysql_real_escape_string($_GET['albumname']); 
$startImg = intval($_GET['startImg']); /* hier kein Escapen nötig, da intval() _nur_ Zahlen zurückgibt! */

$abfrage =  
"SELECT 
  album.albumname, 
  album.foto, 
  album.bildid 
FROM 
  album 
Inner Join benutzerdaten 
WHERE 
  album.Id =  '".$_SESSION['user_id']."' AND 
  album.albumname =  '$albumget'  
GROUP BY album.bildid DESC
LIMIT $startImg, 18446744073709551615"; 

$ergebnis = mysql_query($abfrage); 

$count = 0;

while(($row = mysql_fetch_object($ergebnis)) && $count<25) 
{ 
  $fotoid = "$row->bildid"; 
  $album = "$row->albumname"; 
  $fotolink = "$row->foto"; 
  
  if ($count%5==0 && $count!=0)
  {
    echo "</tr>";
    echo "<tr>";
  }
?> 
    <td><a href="<? echo "$fotolink"; ?>" rel="lightbox" title="<? echo "$album"; ?>"><img name="" src="<? echo "$fotolink"; ?>" width="149" height="181"></a></td> 
<? 
  $count++;
} 
 mysql_close(); 
?>
</tr></table>


<?
  if ($count == 24)
  {
    echo '<a href="<? echo __FILE__; ?>?startImg=<? echo ($startImg+25); ?>">N&auml;chste Seite</a>';
  }
  else
  {
    echo "Dies war die letzte Seite.";
  }
?>
Zuerst wird eben die GET-Variable "startImg" in eine gleichnamige Variable abgelegt. Danach wird diese im MySQL-Statement mit LIMIT benutzt.
Siehe auch http://dev.mysql.com/doc/refman/5.0/en/select.html#id737478.

In der While-Schleife habe ich zusätzlich noch die Bedingung $count < 25 hinzugefügt, somit werden nur maximal 25 Elemente ausgegeben (->$count fängt bei 0 an zu zählen!).

Schließlich noch ein Link zur nächsten Seite, dabei habe ich startImg wiederum mit 25 inkrementiert. Allerdings wird dieser nur angezeigt, wenn $count=24, denn wenn der Wert unter 24 liegen würde, dann wüsste man bereits, dass es nicht mehr Bilder gibt.
 
Ja, sorry, dieser Fehler kommt - wie du richtig vermutet hast - dadurch, das beim ersten Aufruf diese GET-Variable undefiniert ist.

Ersetze die Zeile, in der die Variable aus GET geholt wird, durch diese:
PHP:
$startImg = isset( $_GET['startImg'] ) ? intval($_GET['startImg']) : 0 /* hier kein Escapen nötig, da intval() _nur_ Zahlen zurückgibt! */
Somit wird, wenn die Variable gesetzt ist, die Integer-Version zurückgegeben oder andernfalls Null.

Allerdings ist dein zweiter Link falsch!
Code:
intern.php?albumname=Albumname?startImg=1
Ab dem ersten Parameter werden die Parameter durch ein '&' getrennt, siehe auch Wikipedia - URL.

was meinst du denn mit <? echo __FILE__; ?>
__FILE__ beinhaltet den (absoluten) Pfad des aktuellen Skriptes, also z.B. http://localhost/intern.php. Daran hängen wir dann einfach doch ein Fragezeichen mit dem Parameter startImg
Siehe auch Magische Konstanten - PHP Doku

// Bitte beachte doch die Groß- und Kleinschreibung (durchgehend) ;) Dann kann man das besser lesen.
 
Zurück