Bestimmte Anzahl Daten aus .csv Datei mit php anzeigen - Seite blättern

Willi42

Grünschnabel
Hallo ich habe folgendes Problem. Ich habe schon mir die Finger wund gegoogelt aber nichts gefunden was mir weiterhilft.
Überall wo ich lese sind Beispiele mit mysql Datenbanken.

Also mein Problem wie folgt:

Ich möchte eine bestimmte Anzahl von Daten aus einer .csv Datei in php importieren und anzeigen lassen (Anzahl= 3 pro Seite).
Ich habe mir ein script gebastelt was einigermaßen gut funktioniert. Es werden jedoch alle "gewünschten" Daten angezeigt.
Ich möchte jedoch nicht alle daten anzeigen lassen sondern nur 3 pro Seite, wo man alle anderen Seiten blättern kann.

Es werden jedoch alle Daten angezeigt . So sieht das ganze aus:

PHP:
<?php
// Welche Felder ausgegeben werden sollen...
$wantedCells[] = "Hersteller";
$wantedCells[] = "Herst.-Artikelnummer";
$wantedCells[] = "Artikelbeschreibung";
$dataperpage = 3;
	

$cellFormat["Hersteller"] = "<b>##text##</b><br>";
 
$row = 1; // Anzahl der Arrays

$handle = fopen ("produkte.csv","r"); // Datei zum Lesen öffnen

// Die erste Zeile mit den Spaltennamen auslesen
$data = fgetcsv ($handle, 1000, ";");
if(is_array($data)) {
    foreach($data AS $cellNr => $cellName) {
        $cellNamesArray[$cellNr] = $cellName;
    }
 }
 while ( ($data = fgetcsv ($handle, 1000, ";")) !== FALSE ) { // Daten werden aus der Datei
 // in ein Array $data gelesen
 $num = count ($data); // Felder im Array $data
 // werden gezählt

$maxpage = ceil($num / $dataperpage); // Summe aller Seiten berechnen
$itemfrom = ($pagenum-1) * $dataperpage;

print "<hr><br>";
 $row++; // Anzahl der Arrays wird
 // inkrementiert
 for ($c=0; $c < $num; $c++) { // FOR-Schleife, um Felder des Arrays auszugeben
 // Es werden nur die Felder ausgegeben die im Array $wantedCells steht...
if(in_array($cellNamesArray[$c], $wantedCells)) {
    if($cellFormat[$cellNamesArray[$c]]) print str_replace("##text##", $data[$c], $cellFormat[$cellNamesArray[$c]]);
    else print $data[$c] . "<br><br>";
 }
 }
 }
 fclose ($handle);

            if ($_GET['page'] != "") $page = $_GET['page'];
            else $page = 1;  
   
            require_once('numlinkfunctions.php');       
        
            numlinks($page, 25, 11, '', 'demoparam=useless');
?>


numlinkfunctions.php
PHP:
<?php
/* Function numlinks
 * Description: This function displays a page enumeration as you know it from google results 
 *
 * Parameters:   $pagenum        -> Number of the current page
 *               $maxpage        -> Number of all pages
 *               $pages_visible  -> Maximum number of pages to be displayed (usually a odd number)
 *               $scriptname     -> Optional - File to which a number links
 *               $get            -> Optional - to deliver custom GET parameters (e.g. foo=bar&email=bla@hotmail.com)
 * Return Value: NONE
 */
function numlinks($pagenum, $maxpage, $pages_visible, $scriptname="", $get="") {

	echo '<table border="0" cellspacing="0" cellpadding="0" class="t-border"><tr>';
	if ($pagenum > 1) {
		echo '<td class="td-border"><a href="'.page_name(1, $scriptname, $get).'" class="numlinks">&laquo;</a></td>';   // first page
	 	echo '<td class="td-border"><a href="'.page_name(($pagenum-1), $scriptname, $get).'" class="numlinks">Previous</a></td>';   // prev page
	} else {
		echo '<td class="td-border numlinks-inactive">&laquo;</td>';   // first page
	 	echo '<td class="td-border numlinks-inactive">Previous</td>';   // prev page
	}	


	
	$i=1;
	while ($i <= $pages_visible){
		if ($pagenum-ceil($pages_visible/2) < 0) {  //wenn unterer Bereich
			if ($i == $pagenum) echo '<td class="td-border numhighlight">'.($pagenum).'</td>';
			else echo '<td class="td-border"><a href="'.page_name($i, $scriptname, $get).'" class="numlinks">'.($i).'</a></td>';
			
		} else if ($pagenum+floor($pages_visible/2) > $maxpage) {  // wenn oberer bereich
			if($maxpage > $pages_visible) $j = $maxpage-$pages_visible+$i;
			else $j = $i;
			
			if ($j == $pagenum) echo '<td class="td-border numhighlight">'.($pagenum).'</td>';
			else echo '<td class="td-border"><a href="'.page_name($j, $scriptname, $get).'" class="numlinks">'.$j.'</a></td>';

			
		} else {  // wenn mittlerer bereich
		    if ($i == ceil($pages_visible/2)) echo '<td class="td-border numhighlight">'.($pagenum).'</td>';
			else {
				$j = $pagenum-ceil($pages_visible/2)+$i;
				echo '<td class="td-border"><a href="'.page_name($j, $scriptname, $get).'" class="numlinks">'.$j.'</a></td>';
			}
		}
		if ($i == $maxpage) break;
		$i++;
	}
	

	
	
	if ($pagenum < $maxpage){
		echo '<td class="td-border"><a href="'.page_name(($pagenum+1), $scriptname, $get).'" class="numlinks">Next</a></td>';  // next page
		echo '<td class="td-border"><a href="'.page_name($maxpage, $scriptname, $get).'" class="numlinks">&raquo;</a></td>';   // last page
	} else {
		echo '<td class="td-border numlinks-inactive">Next</td>';   // first page
	 	echo '<td class="td-border numlinks-inactive">&raquo;</td>';   // prev page
	}	
	
	echo '</tr></table>';
}

function page_name($nr, $scriptname, $get="") {
	$scriptname.='?page='.$nr;
	if ($get != '') $scriptname.='&'.$get;
	return $scriptname;
}
?>

Ich würde mich sehr freuen wenn Ihr mir weiterhelfen könnt. :(
 
Ne Idee:

Also ich blick in deinem Skript nicht ganz durch, aber prinzipiell würd ich es mit Hilfe der Schleifenvariable in der Ausgabe-Schleife lösen.

PHP:
<?php

  // [...]

  $dataperpage = 3;
  $firstonpage = trim(htmlspecialchars($_GET['firstonpage'])); // hier kannst du auch etwas sauberer darauf prüfen, ob $firstonpage numerischen Inhalt hat

  for($i = $firstonpage; $i < $firstonpage+$dataperpage; $i++) {

    // Ausgabe
    echo $deinarray[$i];

  }

  echo '<a href="'.$PHP_SELF.'?firstonpage='.$firstonpage+$dataperpage.'">nächste Seite</a>';

  // [...]

?>

Grüße, Frezl
 
Zuletzt bearbeitet:
öhm, du willst nur die ersten 3 Zeilen?
Warum liest du alle ein?

PHP:
while ( ($data = fgetcsv ($handle, 1000, ";")) !== FALSE ){
    ...
}

Wie wäre es mit
PHP:
$data = fgetcsv ($handle, 1000, ";"));
for ($i=0; $i<3; $i++){
    ...
    $data = fgetcsv ($handle, 1000, ";"));
}
 
Nein ich will nicht nur die ersten drei Zeilen .... also nochmal von Anfang ich glaube ich habe mich nicht verständlich genug ausgedrückt :
Mein Ziel ist es zwar alle Zeilen aus der .csv Datei einzulesen jedoch nur 3 Zeilen pro Seite anzeigen zu lassen.
Alle anderen Zeilen sollen auf weiteren Seiten verteilt werden. Also immer wieder 3 pro Seite. Ich möchte diesen "Blättereffekt" haben.
Soll jetzt keine aufwendige Javascript Effekt sein denn dazu habe ich die vorgefertigte numlinkfunctions.php (Eine schöne Pagebar) die ich lediglich in funktion bringen will. Diese wird wie schon im Ausgangsscript zu sehen durch require_once('numlinkfunctions.php'); eingebunden.
Diese Pagebar soll in Verbindung mit meinen Datensätzen aus der .csv Datei funktionieren, das ist alles. Aber ich bekomme es nicht hin. Ich muss allerdings dazu sagen, dass ich ein "fortgeschrittener" Anfänger bin was php angeht. Ich verstehe viele Zusammenhänge und bin fleißig am lernen jedoch versteh ich nicht alles. Kurz gesagt ich bin kein Profi in diesem Gebiet. Deswegen wäre ich euch sehr verbunden wenn mir jemand sagen kann wie ich die numlinkfunctions.php zum laufen bekomme. :confused:
 
Zuletzt bearbeitet:
Ich werde mal schauen wie ich das ganze verknüpfen kann. Danke erstmal für die Hilfe.
 
Zuletzt bearbeitet:
Zurück