Hilfe bei der Blätterfunktion

vb20131988

Grünschnabel
Hey Leute ich bin erst seid einigen Tagen an einer seite dran und brauch dringend hilfe.
Und zwar habe ich ein art downloadbereich indem sich mehrere Dateien befinden , zur besseren übersicht möchte ich die Dateien in einer Blätterfunktion einbinden,
Bis dahin ist auch alles klar:
Mir wird die Anzahl der Seiten angezeigt und die anzahl der dateien auf der seite, aber nur auf seite eins
Klicke ich auf seite zwei bekomme ich die selben dateien angezeigt.

wie bekomme ich es hin das die dokumente fortlaufend angezeigt werden, und nicht immer die gleliche dokumente wie auf seite eins????

HIer mein PHP-Code

PHP:
$eintraege_pro_seite = 20;
$path = 'daten/' . $_POST[year] . '/' . $_GET[bericht];


if ($_POST[year]<>""){
$alledateien = scandir($path, 1);
   foreach ($daten as $datei) {
     if(($datei <> "..") and ($datei <> ".")){
       $tmp = explode("-", $datei);
       if(($tmp[1] == $_POST[time]) or ($_GET[bericht] == 'special') or ($_GET[bericht]=='evaluation')){
       }
     }
   }
}

//HIER BEGINNT MEINE BLÄTTERFUNKTION

  $seitenzahl = ((isset($_GET["seitenzahl"])) ? $_GET["seitenzahl"] : 1);
// echo gibt immer eins aus? 
echo "test:".$seitenzahl;  
     $nr = 0;
     echo '<p>Seite: ';
     for ($zaehler = 0; $zaehler < count($alledateien); $zaehler = $zaehler + $eintraege_pro_seite) {
       $nr++;
       echo (($zaehler == $seitenzahl) ? ' <b>' . $nr . '</b>' :

       ' <a href="index.php?'. $_SERVER[QUERY_STRING] .'?seitenzahl='. $zaehler .'">'. $nr .'</a>') .
       ' &nbsp;';
      
     }
  
   for ($zaehler = ($seitenzahl*$eintraege_pro_seite)-$eintraege_pro_seite; $zaehler < ($seitenzahl*$eintraege_pro_seite); $zaehler++) {
    
       echo $farbe = ($farbe == '<tr class="weiss">') ? '<tr class="grau">' : '<tr class="weiss">';
       echo "  \n";
       echo '  <td align="center" width="">' . ++$i . '</td>' . "\n";
       echo "  <td colspan=\"2\" align=\"left\" ><a href=\"download.php?bericht=$_GET[bericht]&year=$_POST[year]&time=$_POST[time]&file=$$alledateien[$zaehler]\" target=\"_blank\"  id=\"a_link\" >" .$alledateien[$zaehler]. "</a><br /></td>". "\n";
       echo "  <td colspan=\"2\" align=\"right\" >" . FileSizeConvert(filesize($path . "/" . "$alledateien[$zaehler]")) . "</td>"."\n";
       echo "  </tr>". "\n" ;  
}
 
Du hast es eigentlich fast.
Dein einziger Fehler liegt in der Generierung der Links.

Bei der Erstellung der Links setzt du als erste Seite den Index 0 fest.
Vorher sagst du allerdings, dass die Seitenzahl 1 ist, wenn das $_GET["seitenzahl"] nicht gesetzt ist.
Damit rufst du also 2x die gleichen auf.
Du hast also die Möglichkeit die Seitenzahl auf 0 zu setzen, wenn $_GET["seitenzahl"] nicht gesetzt ist
oder du setzt die ermittelung der Dateien so um, dass die erste Seite wirklich den Index 0 hat.

Variante 1:
PHP:
 ...
     for ($zaehler = 1; $zaehler <= count($alledateien); $zaehler = $zaehler + $eintraege_pro_seite) {
       $nr++;
       echo (($zaehler == $seitenzahl) ? ' <b>' . $nr . '</b>' :

       ' <a href="index.php?'. $_SERVER[QUERY_STRING] .'?seitenzahl='. $zaehler .'">'. $nr .'</a>') .
       ' &nbsp;';
     
     }

Variante 2:
PHP:
...
  $seitenzahl = isset($_GET["seitenzahl"]) ? $_GET["seitenzahl"] : 0;
...

   for ($zaehler = ($seitenzahl*$eintraege_pro_seite); $zaehler <= ($seitenzahl*$eintraege_pro_seite)+$eintraege_pro_seite; $zaehler++) {
   
       echo $farbe = ($farbe == '<tr class="weiss">') ? '<tr class="grau">' : '<tr class="weiss">';
       echo "  \n";
       echo '  <td align="center" width="">' . ++$i . '</td>' . "\n";
       echo "  <td colspan=\"2\" align=\"left\" ><a href=\"download.php?bericht=$_GET[bericht]&year=$_POST[year]&time=$_POST[time]&file=$$alledateien[$zaehler]\" target=\"_blank\"  id=\"a_link\" >" .$alledateien[$zaehler]. "</a><br /></td>". "\n";
       echo "  <td colspan=\"2\" align=\"right\" >" . FileSizeConvert(filesize($path . "/" . "$alledateien[$zaehler]")) . "</td>"."\n";
       echo "  </tr>". "\n" ; 
}

Des weiteren werden so auch Unterumständen auf der letzten Seite Fehler generiert, da er dann Probieren würde eine Array Adresse anzusprechen, die nicht existiert.
Deswegen würde ich an deiner Stelle das so erweitern (mal gezeigt an Variante 2)
PHP:
...
  $seitenzahl = isset($_GET["seitenzahl"]) ? $_GET["seitenzahl"] : 0;
...

   for ($zaehler = ($seitenzahl*$eintraege_pro_seite); $zaehler <= ($seitenzahl*$eintraege_pro_seite)+$eintraege_pro_seite; $zaehler++) {
       if( $zaehler == count( $alledateien ) ) break;

       echo $farbe = ($farbe == '<tr class="weiss">') ? '<tr class="grau">' : '<tr class="weiss">';
       echo "  \n";
       echo '  <td align="center" width="">' . ++$i . '</td>' . "\n";
       echo "  <td colspan=\"2\" align=\"left\" ><a href=\"download.php?bericht=$_GET[bericht]&year=$_POST[year]&time=$_POST[time]&file=$$alledateien[$zaehler]\" target=\"_blank\"  id=\"a_link\" >" .$alledateien[$zaehler]. "</a><br /></td>". "\n";
       echo "  <td colspan=\"2\" align=\"right\" >" . FileSizeConvert(filesize($path . "/" . "$alledateien[$zaehler]")) . "</td>"."\n";
       echo "  </tr>". "\n" ; 
}


Als kleine Tips:
Die vielen Klammer in der Zeile, in der $seitenzahl gesetzt sind unnötig (siehe Variante 2).

Mit diesen Code willst du ja einen Wechsel der Zeilenhintergründe realisieren.
PHP:
echo $farbe = ($farbe == '<tr class="weiss">') ? '<tr class="grau">' : '<tr class="weiss">';

Das lässt sicht mit CSS etwas Eleganter realisieren.

Die kleinen Zauberworte heißen da even und odd.
Als kleines Beispiel:
CSS:
tr:nth-child(even) { background: white }
tr:nth-child(odd) { background: grey }

Damit würde sich die Zeile für die tr auf folgendes zusammenkürzen:
PHP:
echo '<tr>';

Damit dürfte dann alles so Funktionieren, wie du es dir Vorstellst.

PS: Ich würde an deiner Stelle die Variante 2 Nutzen, da scandir ein 0-Based Array erstellt.
Sonst könntest du die erste Datei so nicht anbieten.
 
Hallo,
habe die blätterfunktion hinbekommen und bin soweit auch zufrieden.
jedoch stehe ich jetzt vor dem nächsten problem...

undzwar lade ich die Datei aus einen ordner und es werden die dateien auch ausgelesen, jedoch wird mir in der ersten und zweiten zeile leere zeilen angezeigt...
könnt ihr ir da helfen?

Code:
// Wieviele Einträge sollen pro Seite angezeigt werden
$eintraege_pro_seite = 20;
//echo "test:".$eintraege_pro_seite;
$path = 'daten/' . $_POST[year] . '/' . $_GET[bericht];
//Selektion der Datein nach Zeitangabe
if ($_POST[year]<>""){
    $alledateien = scandir($path, 0);
    foreach ($daten as $datei) {
        if(($datei <> "..") and ($datei <> ".")){
            $tmp = explode("-", $datei);
            if(($tmp[1] == $_POST[time]) or ($_GET[bericht] == 'special'));{
            }// end if
        }// end if
    }//end foreach
} //end if


// Überprüfen ob über $_GET["seitenzahl"] eine Seitenzahl gesendet wurde
$seitenzahl = ((isset($_GET["seitenzahl"])) ? $_GET["seitenzahl"] : 1);
//Nummer auf Null setzen
$nr = 0;
echo '<p>Site: ';   
// Die Schleife zeigt jeden X-ten ($eintraege_pro_seite) Datensatz mit einem Link an
    for ($zaehler = 0; $zaehler < count($alledateien); $zaehler = $zaehler + $eintraege_pro_seite) {
        $nr++;// Nummer erhöhen
         // Mit dem Link wird seitenzahl=$zaehler als $_GET["seitenzahl"] übergeben
            echo (($zaehler == $seitenzahl) ? ' <b>' . $nr . '</b>' :
                ' <a href="index.php?'. $_SERVER[QUERY_STRING] . '&seitenzahl=' . $zaehler .'">'. $nr .'</a>') .
                ' &nbsp;';
    }
           
    // Die ausgewählten Datensätze in einer Schleife ausgeben       
    for ($zaehler = $seitenzahl; $zaehler < ($seitenzahl + $eintraege_pro_seite); $zaehler++) {
        if( $zaehler == count( $alledateien ) ) break;
        echo $farbe = ($farbe == '<tr class="weiss">') ? '<tr class="grau">' : '<tr class="weiss">';
            echo "  \n";
            echo '    <td align="center" width="">' . ++$i . '</td>' ;
            echo "    <td colspan=\"2\" align=\"left\" ><a href=\"download.php?bericht=$_GET[bericht]&year=$_POST[year]&time=$_POST[time]&file=$alledateien[$zaehler]\" target=\"_blank\"  id=\"a_link\" >" .$alledateien[$zaehler]. "</a><br/></td>";
            echo "    <td colspan=\"2\" align=\"right\" >" . FileSizeConvert(filesize($path . "/" . "$alledateien[$zaehler]")) . "</td>";
            echo "  </tr>" ;   
       
    }       
?>
 
Das dürften die "."- und ".."-Einträge in $alledateien sein. Schau in den generierten HTML-Source.

Das ist ziemlich kraut-und-rübig, was du da machst, wenn ich das sagen darf. Es gibt Codezeilen, die überhaupt gar nichts tun.

Mindestens die foreach-Schleife hier:

PHP:
//Selektion der Datein nach Zeitangabe
if ($_POST[year]<>""){
    $alledateien = scandir($path, 0);
    foreach ($daten as $datei) {
        if(($datei <> "..") and ($datei <> ".")){
            $tmp = explode("-", $datei);
            if(($tmp[1] == $_POST[time]) or ($_GET[bericht] == 'special'));{
            }// end if
        }// end if
    }//end foreach
} //end if
 
Zurück