durch andere Anordnung nicht mehr richtig dargestellt

Zimtgruen

Erfahrenes Mitglied
ich habe hier folgenden Code:
PHP:
<?php   
$anzeigen=1; //Anzahl der Datensätze, die auf einer Seite angezeigt werden sollen
if($_GET['vor']){$start=$_GET['start']+$anzeigen;}
elseif($_GET['back']){$start=$_GET['start']-$anzeigen;}
else{$start=0;}
//Auslesen der Einträge
$tabellenname="gmensch";
$sql="SELECT ID, Bild, titel FROM $tabellenname LIMIT $start , $anzeigen"; 
                                                // nur bestimmte Einträge anzeigen
// Verbindung zur Datenbank 
$link = mysql_connect("localhost", "benutzername", "passwort");
mysql_select_db("datenbank", $link);
$result = mysql_query($sql, $link);
for($i=0;$i<mysql_num_rows($result);$i++)
{
$row=mysql_fetch_array($result);
echo "<b>".$row['titel']." </b><br><br><img src=\"".$row['Bild']."\"><p><br>";
}              
//Ermitteln, wie viele Einträge vorliegen
$sql1="SELECT COUNT(*) FROM $tabellenname ";
$result1 = mysql_query($sql1, $link);
$max= mysql_result($result1,0,0);
//Ausgeben der Links vor und zurück     
?><table border="0"><tr><td align="left"><?php
if($start>=$anzeigen)
 echo "<a href=\"".$_SERVER['PHP_SELF']."?start=".$start."&back=1\">Zurück</a>";
echo "</td><td align=\"right\">";
if($start<$max)
 echo "<a href=\"".$SERVER['PHP_SELF']."?start=".$start."&vor=1\">Weiter</a>";
?> </tr></table>

Den wollte ich jetzt so umstellen, dass die beiden Links "Zurück" und "Weiter" links und rechts vom Titel des Bildes erscheinen, das sieht im Code jetzt so aus:
PHP:
<?php   
$anzeigen=1; //Anzahl der Datensätze, die auf einer Seite angezeigt werden sollen
if($_GET['vor']){$start=$_GET['start']+$anzeigen;}
elseif($_GET['back']){$start=$_GET['start']-$anzeigen;}
else{$start=0;}
//Auslesen der Einträge
$tabellenname="gholland";
$sql="SELECT ID, Bild, titel FROM $tabellenname LIMIT $start , $anzeigen"; 
                                                // nur bestimmte Einträge anzeigen
// Verbindung zur Datenbank 
$link = mysql_connect("localhost", "benutzername", "passwort");
mysql_select_db("datenbank", $link);
$result = mysql_query($sql, $link);
for($i=0;$i<mysql_num_rows($result);$i++)
//Ermitteln, wie viele Einträge vorliegen
$sql1="SELECT COUNT(*) FROM $tabellenname ";
$result1 = mysql_query($sql1, $link);
$max= mysql_result($result1,0,0);
//Ausgeben der Links vor und zurück     
?><table border="0"><tr><td align="left"><?php
if($start>=$anzeigen)
 echo "<a href=\"".$_SERVER['PHP_SELF']."?start=".$start."&back=1\">Zurück</a>";
echo "</td><td align=\"center\">";
{
$row=mysql_fetch_array($result);
echo "<b>".$row['titel']." </b></td><td align=\"right\">";
} 
if($start<$max)
 echo "<a href=\"".$SERVER['PHP_SELF']."?start=".$start."&vor=1\">Weiter</a></td></tr></table>";
{
$row=mysql_fetch_array($result);
echo "<br><br><img src=\"".$row['Bild']."\"><p><br>"; 
}            
?>

Jetzt wird das Bild aber nicht mehr angezeigt, kann mir jemand evtl. sagen warum?
Danke schonmal
 
Vielen Dank, allerdings erscheint jetzt folgende Warnung, wenn man beim letzten Bild auf Weiter klickt: Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /var/www/web87/html/gsonst.php on line 36

betreffende Zeile ist folgende:
PHP:
$max= mysql_result($result1,0,0);

kann man das nicht irgendwie so machen, dass beim letzten Bild gar kein weiter mehr erscheint, so wie es beim ersten Bild auch kein Zurück gibt?
 
Hi,

das liegt daran, dass Du den Code durch das Umstellen ziemlich verstümmelt hast. Du musst da mal etwas genauer hinschauen, was Du da machst, bzw. mal ein wenig PHP-Grundlagen lernen.
Du hast offensichtlich einfach den Rumpf der for-Schleife mitsamt der Klammern ausgeschnipselt und woanders hingeklatscht (und zwar da, wo die Klammern schonmal keinen Sinn mehr machen, aber egal). Den Schleifenkopf hast Du einfach stehenlassen, obwohl Du, da Du ja immer nur einen Datensatz liest, gar keine Schleife brauchst. Fehlt die Klammerung, heisst das, der Schleifenrumpf besteht genau aus der nächsten Anweisung, also der Zuweisung an $sql1, die vorher überhaupt nicht in der Schleife stand und da auch nichts verloren hatte. Weil es aber gar kein Bild mehr gibt, wird der Schleifenrumpf gar nicht ausgeführt, heisst: Du schickst einen leeren String an den MySQL-Server. Klar gibt das keine gültige Resource.
Den "Weiter"-Link kannst Du unterdrücken, indem Du die Bedingung anpasst. Da das LIMIT-Offset bei z.B. 15 Datensätzen von 0-14 geht, SELECT COUNT(*) aber 15 liefert, muss das natürlich so aussehen:

PHP:
if($start < $max - 1)
Es wäre wirklich besser, wenn Du erstmal so weit die Grundlagen lernst, dass Du so ein kleines Script alleine schreiben kannst, bevor Du Dir andere Scripte ziehst und versuchst anzupassen.

LG
 
Das löst jetzt vielleicht nicht gerade ein Problem, du solltest dir jedoch unbedingt das PHP-Manuel v5 als CHM-Datei besorgen. Da kannst du dir dann ein paar simple Beispiele anschauen wie man es "richtiger" macht.

z.B. sollte man, wenn man eine Datenbank abgefragt hat, optimalerweise mit
PHP:
while ($row = mysql_fetch_array($result, $link)) {
    echo "Spalte 1:".$row["ueberschrift"]."<br>\n";  
}
die Ergebnisse wiedergeben. Und zwar aus folgendem Grund: Sollte der Pointer (also der Fokus auf ein Element) deiner Abfrage in $result nicht mehr auf dem ersten Element liegen, wirst du am Ende deiner zählergesteuerten Schleife Fehlermeldungen bekommen. While ist eine kopfgesteuerte Schleife welche bei jedem Durchlauf dein Resultat prüft ob noch Elemente vorhanden sind.

Und dann solltest du die Anzahl von Einträgen in einer Datenbank (bzw. einer Abfrage) mit
PHP:
echo "Alzahl der Datensätze ".mysql_num_rows($result)."!<br>\n";
abfragen. Dies ist keine weitere Datenbankabfrage sondern bezieht sich auf dein Resultat!
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück