Sascha: Tabelle mit n Einträgen und möchte auf jeder Seite m anzeigen.

Hallo,

ich habe ein Problem, bei dem ich nicht weiterkomme.

Ich möchte sozusagen eine Blätterfunktion (x Einträge pro Seite) gemäss Beispiel der FAQ:

14.16 Ich habe eine Tabelle mit n Einträgen und möchte auf jeder Seite m davon anzeigen.
http://www.koehntopp.de/php/faq-database_mysql.html#database_mysql-16

in meinem Webprojekt realisieren.

Ich habe diese Funktion in meine Configdatei reingeschrieben. Sobald ich diese Funktion in meiner Config drin habe, lässt sich meine Startdatei nicht mehr fehlerfrei ausführen. Der Fehler muß also in dieser Funktion meines Wissen nach drin sein, denn sobald die Funktion draussen ist, funktioniert alles bestens.

Kann mir jemand sagen, was an meiner nachfolgenden Funktion falsch ist? Ich habe mich an das Beispiel aus der FAQ gehalten und es an mein Script entsprechend anzupassen.

//Blätterfunktion Test Beginn

function showonelinktest($id,$schriftfarbe,$schriftart,$h_titel,$h_beschr) {

// Datendefinition für Datenbankverbindung.

$table    = "downloadprogramme";    // Der Name der Datenbanktabelle

// Datendefinition für die Clientausgabe
$start = (isset($start)) ? abs((int)$start) : 0;
$limit = 5;                     // Datensätze pro Ausgabeseite

// Feststellen der Anzahl der verfügbaren Datensätze.
$resultID = @mysql_query("SELECT COUNT(ID) FROM ".$table);
$total    = @mysql_result($resultID,0);

// Ggf. $start korrigieren (falls Parameter in
// der URL manipuliert wurde)
$start    = ($start >= $total) ? $total - $limit : $start;

// Datenbankabfrage ausführen.
$abfrage    = "SELECT ID,* FROM ".$table
           ." LIMIT ".$start.",".$limit;
$resultID = @mysql_query($abfrage);

list($id,$titel,$beschreibung,$preis,$braucht,$hits,$bb,$neu,$datum,$bereich
,$hplink,$programmlink,$screenshotlink,$emaillink,$sprache,$lizenz,$gross,$m
asseinheit,$kurzbeschreibung) = mysql_fetch_row($abfrage);
        if ($neu=='5') {
        $dead = "#C67878";
        } else {
        $dead = "#CDCDCD";
        }
                $hplink = urlencode($hplink);
                $programmlink = urlencode($programmlink);
                $screenshotlink = urlencode($screenshotlink);
                $datum_array = split("-","$datum");

$datum = "$datum_array[2].$datum_array[1].$datum_array[0] ";
                if ($bb=='') {
                $bb = "-";
                }

// Ergebnisse lesen und an den Client ausgeben
while ($data = mysql_fetch_array($resultID))
{

echo "
 <table border rules=groups width="500" border="1" cellpadding="2"
cellspacing="1">
  <tr>
     <td colspan="2" align="left" nowrap bgcolor="$h_titel">

<font face="$schriftart" size="2"> <b>";

echo '<a href="index.php4?session=dl&id='. urlencode ($id) . '">' .
htmlspecialchars ($titel) . '</a>';

echo "</b></font>

</td>
  </tr>
  <tr>
     <td bgcolor="$h_beschr">
        <div align="left"><font face="$schriftart"
size="1">Aufgenommen am: $datum </font></div>
      </td>
   </tr>
   <tr>
      <td bgcolor="#FFFFFF" valign="top">
        <div align=justify><font face="$schriftart"
size="2">Kurzbeschreibung:<br><br>$kurzbeschreibung</font></div>
      </td>
    </tr>
    <tr>
      <td bgcolor="$h_beschr" height="20">
        <div align="left"> <img src="$sprache" alt="Sprache"
border="0">    <font face="$schriftart"
size="1">Lizenz: $lizenz </font>      
<font face="$schriftart" size="1">System-Voraussetzung:
$braucht</font></div>
        </td>
     </tr>

<tr>
        <td bgcolor="$h_titel">
      <!--<div align="left"><font face="$schriftart" size="2"> <a
href="deadlink.php4?id=$id&bereich=$bereich"><font
color="#FF0000">[Defekter Link?]</font></a> </font></div>-->
<div align="left"><font face="$schriftart" size="2"> Dateigröße:
$gross $masseinheit </font>  |  <font face="$schriftart"
size="2">Hits: $hits   |   Vote: $bb </font></div>
        </td>
     </tr>
  </table>  <br><br> ";
  }

// Zurück- und Vorblättern
if ($start > 0)
{
  $newStart = ($start - $limit < 0) ? 0 : ($start-$limit);
  echo "<a href=".$PHP_SELF."?start=".$newStart
      ."><< zurück</a>";
}

if ($start + $limit < $total)
{
  $newStart = $start + $limit;
  echo " <a href=".$PHP_SELF."?start=".$newStart
      .">vor >></a>";

}
//Blätterfunktion Test Ende

Über eine Hilfe wäre ich sehr dankbar. Im voraus besten Dank.

Mfg.

Sascha

  1. Hi Sascha,

    Ich habe diese Funktion in meine Configdatei reingeschrieben. Sobald ich diese Funktion in meiner Config drin habe, lässt sich meine Startdatei nicht mehr fehlerfrei ausführen. Der Fehler muß also in dieser Funktion meines Wissen nach drin sein, denn sobald die Funktion draussen ist, funktioniert alles bestens.

    Es wäre hilfreich zu wissen welche Fehler ausgetreten sind - dann wird die Fehlersuche gleich um einiges einfacher, aber mal von kurz drüberfliegen:

    // Datenbankabfrage ausführen.
    $abfrage    = "SELECT ID,* FROM ".$table
               ." LIMIT ".$start.",".$limit;
    $resultID = @mysql_query($abfrage);

    $abfrage enthält nur den String für die eigenliche Abfrage, erst $resultID führt diese dann durch, daher kann

    list($id,$titel,$beschreibung,$preis,$braucht,$hits,$bb,$neu,$datum,$bereich
    ,$hplink,$programmlink,$screenshotlink,$emaillink,$sprache,$lizenz,$gross,$m
    asseinheit,$kurzbeschreibung) = mysql_fetch_row($abfrage);

    auf keinen Fall funktionieren, da wie gesagt $abfrage nur den String deiner Abfrage enthält.

    // Ergebnisse lesen und an den Client ausgeben
    while ($data = mysql_fetch_array($resultID))
    {

    erst hier werden die Ergebnisse wirklich ausgelesen ($resultID)

    htmlspecialchars ($titel) . '</a>';

    daher können deine Ausgaben in dieser Form auch nicht funktionieren - richtiger wäre hier statt $titel -> $data[Titel] (falls die Spalte in der Datenbank wirklich _Titel_ heisst)

    Wie gesagt, am besten mal die Fehlermeldung oder das Problem schildern, dann wirds einfacher.

    liebe gruesse aus oesterreich
     Martin

    1. Hallo Martin,

      erstmal besten Dank für deine Antwort im Forum von SELFHTML.
      Nun habe ich mal mein Script verändert aufgrund deiner Antwort und es sieht
      nun so aus:

      //Blätterfunktion Test Beginn
      //diese Funktion ist eingebunden in config.php4

      function showonelinktest($id,$schriftfarbe,$schriftart,$h_titel,$h_beschr) {

      // Datendefinition für Datenbankverbindung.

      $table    = "downloadprogramme";    // Der Name der Datenbanktabelle

      // Datendefinition für die Clientausgabe
      $start = (isset($start)) ? abs((int)$start) : 0;
      $limit = 5;                     // Datensätze pro Ausgabeseite

      // Feststellen der Anzahl der verfügbaren Datensätze.
      $resultID = @mysql_query("SELECT COUNT(ID) FROM ".$table);
      $total    = @mysql_result($resultID,0);

      // Ggf. $start korrigieren (falls Parameter in
      // der URL manipuliert wurde)
      $start    = ($start >= $total) ? $total - $limit : $start;

      // Datenbankabfrage ausführen.
      $abfrage    = "SELECT ID,* FROM ".$table
                 ." LIMIT ".$start.",".$limit;
      $resultID = @mysql_query($abfrage);

      if ($neu=='5') {
              $dead = "#C67878";
              } else {
              $dead = "#CDCDCD";
              }
                      $hplink = urlencode($hplink);
                      $programmlink = urlencode($programmlink);
                      $screenshotlink = urlencode($screenshotlink);
                      $datum_array = split("-","$datum");

      $datum = "$datum_array[2].$datum_array[1].$datum_array[0] ";
                      if ($bb=='') {
                      $bb = "-";
                      }

      // Ergebnisse lesen und an den Client ausgeben
      while ($data = mysql_fetch_array($resultID))
      {

      echo "
       <table border rules=groups width="500" border="1" cellpadding="2"
      cellspacing="1">
        <tr>
           <td colspan="2" align="left" nowrap bgcolor="$h_titel">

      <font face="$schriftart" size="2"> <b>";

      echo '<a href="index.php4?session=dl&id='. urlencode $data[id] . '">' .
      htmlspecialchars $data[titel] . '</a>';

      echo "</b></font>

      </td>
        </tr>
        <tr>
           <td bgcolor="$h_beschr">
              <div align="left"><font face="$schriftart"
      size="1">Aufgenommen am: $data[datum] </font></div>
            </td>
         </tr>
         <tr>
            <td bgcolor="#FFFFFF" valign="top">
              <div align=justify><font face="$schriftart"
      size="2">Kurzbeschreibung:<br><br>$data[kurzbeschreibung]</font></div>
            </td>
          </tr>
          <tr>
            <td bgcolor="$h_beschr" height="20">
              <div align="left"> <img src="$data[sprache]"
      alt="Sprache" border="0">    <font
      face="$schriftart" size="1">Lizenz: $data[lizenz] </font>
           
      <font face="$schriftart" size="1">System-Voraussetzung:
      $data[braucht]</font></div>
              </td>
           </tr>

      <tr>
              <td bgcolor="$h_titel">
            <!--<div align="left"><font face="$schriftart" size="2"> <a
      href="deadlink.php4?id=$id&bereich=$bereich"><font
      color="#FF0000">[Defekter Link?]</font></a> </font></div>-->
      <div align="left"><font face="$schriftart" size="2"> Dateigröße:
      $data[gross] $data[masseinheit] </font>  |  <font
      face="$schriftart" size="2">Hits: $data[hits]   |   Vote:
      $data[bb] </font></div>
              </td>
           </tr>
        </table>  <br><br> ";
        }

      // Zurück- und Vorblättern
      if ($start > 0)
      {
        $newStart = ($start - $limit < 0) ? 0 : ($start-$limit);
        echo "<a href=".$PHP_SELF."?start=".$newStart
            ."><< zurück</a>";
      }

      if ($start + $limit < $total)
      {
        $newStart = $start + $limit;
        echo " <a href=".$PHP_SELF."?start=".$newStart
            .">vor >></a>";

      }
      //Blätterfunktion Test Ende

      Nur ich bekomme nach wie vor nach Einbindung von dieser Funktion in meiner
      config.php4 einen Haufen an Fehlermeldungen, wenn ich die index.php4
      aufrufe, obwohl in der index.php4 die Funktion noch nicht mal eingefügt bzw.
      aufgerufen wird per Funktionsnamen.

      Hier die Fehlermeldungen:

      Warning: Can't connect to local MySQL server through socket
      '/tmp/mysql.sock' (111) in /homepages/beta-version/index.php4 on line 262

      Warning: MySQL Connection Failed: Can't connect to local MySQL server
      through socket '/tmp/mysql.sock' (111) in /homepages/beta-version/index.php4
      on line 262

      Warning: MySQL: A link to the server could not be established in
      /homepages/beta-version/index.php4 on line 262

      Warning: Supplied argument is not a valid MySQL result resource in
      /homepages/beta-version/index.php4 on line 264

      Warning: Can't connect to local MySQL server through socket
      '/tmp/mysql.sock' (111) in /homepages/beta-version/config.php4 on line 78

      Warning: MySQL Connection Failed: Can't connect to local MySQL server
      through socket '/tmp/mysql.sock' (111) in
      /homepages/beta-version/config.php4 on line 78

      Warning: MySQL: A link to the server could not be established in
      /homepages/beta-version/config.php4 on line 78

      Warning: Supplied argument is not a valid MySQL result resource in
      /homepages/beta-version/config.php4 on line 79

      Warning: Can't connect to local MySQL server through socket
      '/tmp/mysql.sock' (111) in /homepages/beta-version/config.php4 on line 78

      Warning: MySQL Connection Failed: Can't connect to local MySQL server
      through socket '/tmp/mysql.sock' (111) in
      /homepages/beta-version/config.php4 on line 78

      Warning: MySQL: A link to the server could not be established in
      /homepages/beta-version/config.php4 on line 78

      Warning: Supplied argument is not a valid MySQL result resource in
      /homepages/beta-version/config.php4 on line 79

      Ich frage mich echt, warum da in der index.php4 diese Fehler auftauchen,
      zumal diese Funktion dort noch nicht eingebunden ist!?

      Hast du darauf vielleicht eine Erklärung bzw. eine Lösung, wie ich das
      funktionsfähig bekommen könnte?

      Besten Dank im voraus.

      Mfg.

      Sascha

      Hi Sascha,

      Ich habe diese Funktion in meine Configdatei reingeschrieben. Sobald ich diese Funktion in meiner Config drin habe, lässt sich meine Startdatei nicht mehr fehlerfrei ausführen. Der Fehler muß also in dieser Funktion meines Wissen nach drin sein, denn sobald die Funktion draussen ist, funktioniert alles bestens.

      Es wäre hilfreich zu wissen welche Fehler ausgetreten sind - dann wird die Fehlersuche gleich um einiges einfacher, aber mal von kurz drüberfliegen:

      // Datenbankabfrage ausführen.
      $abfrage    = "SELECT ID,* FROM ".$table
                 ." LIMIT ".$start.",".$limit;
      $resultID = @mysql_query($abfrage);

      $abfrage enthält nur den String für die eigenliche Abfrage, erst $resultID führt diese dann durch, daher kann

      list($id,$titel,$beschreibung,$preis,$braucht,$hits,$bb,$neu,$datum,$bereich
      ,$hplink,$programmlink,$screenshotlink,$emaillink,$sprache,$lizenz,$gross,$m
      asseinheit,$kurzbeschreibung) = mysql_fetch_row($abfrage);

      auf keinen Fall funktionieren, da wie gesagt $abfrage nur den String deiner Abfrage enthält.

      // Ergebnisse lesen und an den Client ausgeben
      while ($data = mysql_fetch_array($resultID))
      {

      erst hier werden die Ergebnisse wirklich ausgelesen ($resultID)

      htmlspecialchars ($titel) . '</a>';

      daher können deine Ausgaben in dieser Form auch nicht funktionieren - richtiger wäre hier statt $titel -> $data[Titel] (falls die Spalte in der Datenbank wirklich _Titel_ heisst)

      Wie gesagt, am besten mal die Fehlermeldung oder das Problem schildern, dann wirds einfacher.

      liebe gruesse aus oesterreich
      Martin

      1. Hallo Sascha,

        zuerst mal zu deinen Fehlermeldungen:

        Warning: Can't connect to local MySQL server through socket
        '/tmp/mysql.sock' (111) in /homepages/beta-version/index.php4 on line 262

        Das ist wohl die wichtigste - da dürfte was mit deinen Verbindungsdaten zum MySQL-Server nicht stimmen - überprüf mal die Einträge in den Zeilen, wo diese Fehlermeldung ausgeworfen wird.

        Zum Script:

        // Feststellen der Anzahl der verfügbaren Datensätze.
        $resultID = @mysql_query("SELECT COUNT(ID) FROM ".$table);

        Hast du zu diesem Zeitpunkt eine Datenbankverbindung offen ? - sonst müsstest du als zweiten Paramter in mysql_query die Verbindungskennung definieren.

        // Datenbankabfrage ausführen.
        $abfrage    = "SELECT ID,* FROM ".$table
                   ." LIMIT ".$start.",".$limit;
        $resultID = @mysql_query($abfrage);

        siehe oben

        $hplink = urlencode($hplink);
                        $programmlink = urlencode($programmlink);
                        $screenshotlink = urlencode($screenshotlink);
                        $datum_array = split("-","$datum");

        In der ersten Version hattest du die Variblen $hplink, ... zuvor definiert - nun durch den Umbau des Scripts gibts diese Variablen zu diesem Zeitpunkt noch nicht.

        Es scheint so, als ob du dein Script einfach um ein weiters erweiterst - das ist meist nicht so einfach. Entweder du nimmst das zweite Script als Vorlage und bindest dann deinen gewünschten Code ein, oder du nimmst deinen Code als Vorlage und nimmst den zweiten nur zum Verständnis und schreibst an deinem Programm mit den neu gewonnenen Kenntissen weiter.

        liebe gruesse aus oesterreich
         Martin