Bilder auflisten mit Seitenanzahlen ohne MySQL

Johnnii360

Erfahrenes Mitglied
Servus!

Ich arbeite gerade ein einem Script, dass die Seitenanzahl für die Bilder bildet und ausgibt. Da das Script aber mit MySQL zusammen funktioniert, hab ich es nur teilweise auf No-MySQL umbauen können.

Hier der Sourcecode:

PHP:
<?php
// Setze fest, mit welcher Seite begonnen werden soll
//
if(!isset($start))
{
	$start = "1";
}

// Maximale Bilder pro Seite
//
$limitproseite = "12";

// Maximale Seiten
// leer = unbegrenzt
//
$seiten = "";

// Rundet die Seitenanzahl
//
$seite = ceil($seite);

// Zählen der Dateien in einem Verzeichnis
//
$home_pfad = "".$_SERVER['DOCUMENT_ROOT']."/images/fileupload_public";
$vi = 0;
$dh = opendir($home_pfad);

while ($datei = readdir($dh))
{
	if($datei !== "" && $datei !== "." && $datei !== ".." && !is_dir($datei))
	{
		$vi++;              
	}
}

// Erstelle Seitenscala
//
if ($limitproseite != "0")
{
	for ($i = 0; $i < ceil($vi / $limitproseite) ; $i++)
	{
		$start = ($seite - 1) * $limitproseite;
		$j = $i + 1;
		
		if ($j != $seite)
		{
			$seiten = $seiten." <a href=\"".$_SERVER['PHP_SELF']."?site=public_fileuploads&amp;seite=".$j."\">".$j."</a> ";
		}
		elseif($j == $seite)
		{
			$seiten = $seiten." <strong>".$j."</strong> ";
		}
	}
	
	$res = mysql_query("SELECT * FROM ".$tabname_gallery." WHERE cat='".$_GET['cat']."' AND hide='0' ORDER BY date DESC LIMIT ".$start.", ".$limitproseite."") or die (mysql_error());
}
else
{
	$res = mysql_query("SELECT * FROM ".$tabname_gallery." WHERE cat='".$_GET['cat']."' AND hide='0' ORDER BY date DESC") or die (mysql_error());
}
?>

Ich hänge momentan bei den MySQL-Abfragen die mit "$res =" anfangen.

Dieses Script hier dient zum auslesen der Dateien aus einem Verzeichnis:

PHP:
<?php
   $verz=opendir ('.');
   while ($file = readdir ($verz)) {
      if($file != "." && $file != "..")
         echo '<a href="'.$file.'">'.$file.'</a><br>';
   }
   closedir($verz);
?>

Nun habe ich aber keine Ahnung, wie ich die $res-Teile mit dem Dateiauslesescript ersetze, sodass es dann auch die Dateien auf einer Seite limitiert, wie bei dem ersten $res.

Ich bitte daher um Hilfe, und bedanke mich bereits im Voraus. :)

P.s. Die While-Schleife soll aber nicht da kommen wo das $res jetzt ist. die ausgabe soll ausserhalb stattfinden. :)
 
Warum lässt du nicht einfach eine Zählvariable mitlaufen die du dann benutzt um die Limits zu setzen?

Alternativ kannst du das Gesamte Verzeichnis in ein Array einlesen und dann mit den normalen Array-Funktionen drüber gehen, sofern du auf gleichbleibende Sortierung achtest, ist es auch dort kein Problem die Limitierung einzubauen. Da kann man dann gleich noch so eine Art Pseudocache des Verzeichnisarrays per $_SESSION realisieren, falls nötig.
 
Sir Robin hat gesagt.:
Warum lässt du nicht einfach eine Zählvariable mitlaufen die du dann benutzt um die Limits zu setzen?

Alternativ kannst du das Gesamte Verzeichnis in ein Array einlesen und dann mit den normalen Array-Funktionen drüber gehen, sofern du auf gleichbleibende Sortierung achtest, ist es auch dort kein Problem die Limitierung einzubauen. Da kann man dann gleich noch so eine Art Pseudocache des Verzeichnisarrays per $_SESSION realisieren, falls nötig.
Hat mir aber leider jetzt nicht weiter geholfen.
 
Leider kann ich dir so ganz ohne Informationen auch nicht weiterhelfen, zumal ein wenig Eigenfleiß sicher auch nicht das verkehrteste wäre. Wie weit bist du denn? Was genau hast du nicht verstanden? Wie sieht dein bisheriger Ansatz aus?

Ich werde dir bestimmt nicht den kompletten Code liefern, dann ist der ganze Witz des Begreifens ja weg.
 
Sir Robin hat gesagt.:
...zumal ein wenig Eigenfleiß sicher auch nicht das verkehrteste wäre...

Ich werde dir bestimmt nicht den kompletten Code liefern, dann ist der ganze Witz des Begreifens ja weg.
Ich glaube dazu sag ich jetzt lieber nichts, sonst bekomm ich von den Mod's wieder eine auf den Deckel, weil ich meine ehrliche Meinung geäussert habe.
 
Tja dann wird dir wohl keiner helfen können. Sir Robin hat absolut Recht, wir können weder Hellsehen noch irgendwelchen Usern Support leisten ohne ausreichende Infos :p
 
Online-Skater hat gesagt.:
Tja dann wird dir wohl keiner helfen können. Sir Robin hat absolut Recht, wir können weder Hellsehen noch irgendwelchen Usern Support leisten ohne ausreichende Infos :p
Alle Infos stehen oben, und das was ich benötige ebenfalls.
 
mhm hab mich mal kurz probiert daran , weiss nun nicht ob es Dein Ziel war das Limit zu ersetzen. Das Order by Date da müsste man sehen wie man von einer Datei das letzte ÄnderungsDatum herbekommt.

PHP:
<?php
function getImageFiles(&$image_array,$folder){
    
    $dir_handler = opendir($folder);
    while($file = readdir($dir_handler)){
        if($file != "." && $file != ".." && !is_dir($file) )
            $image_array[] = $file;
    }
    return $image_array;
}

$image_array = array();
$dir = "bilder";
$limit = 12;

//anzahl festlegen , gleichzeitig wir das image_array mit daten befüllt
$image_number = count(getImageFiles($image_array,$dir));
//seitenanzahl 
$page_number = ceil($image_number/$limit);

//aktuelle Seite = $_GET['site']
$aSite = (isset($_GET['site']))?($_GET['site']*$limit-$limit):0;

//bilder aus dem Array holen die wir brauchen 
$actuallyImages = array_slice($image_array,$aSite,$limit);
print_r($image_array);
print_r($actuallyImages);
?>

Ausgabe:

alle Bilder:
Array
(
[0] => 11b.jpg
[1] => 15b.jpg
[2] => 16b.jpg
[3] => 1b.jpg
[4] => 2b.jpg
[5] => 6b.jpg
[6] => 8.jpg
[7] => 8b.jpg
[8] => 9b.jpg
[9] => art1.jpg
[10] => avatar-514.jpg
[11] => chaos_warrior.gif
[12] => CrimsonFist_Marine.jpg
[13] => CSMmarine2004.jpg
[14] => DEwarrior2004.jpg
[15] => imperial-guard-vignette.jpg
[16] => khorne-1024.jpg
[17] => marine1.psd
[18] => marine2.psd
[19] => marineschild.psd
[20] => ork-vignette.jpg
[21] => slaanesh-800.jpg
[22] => taubattle2.jpg
[23] => taucity.jpg
[24] => tzeentch-1024.jpg
[25] => tzeentch-800.jpg
[26] => Unbenannt-1.psd
)

keine Seite übergeben oder quasi Seite 1
Array
(
[0] => 11b.jpg
[1] => 15b.jpg
[2] => 16b.jpg
[3] => 1b.jpg
[4] => 2b.jpg
[5] => 6b.jpg
[6] => 8.jpg
[7] => 8b.jpg
[8] => 9b.jpg
[9] => art1.jpg
[10] => avatar-514.jpg
[11] => chaos_warrior.gif
)

Seite 2
Array
(
[0] => CrimsonFist_Marine.jpg
[1] => CSMmarine2004.jpg
[2] => DEwarrior2004.jpg
[3] => imperial-guard-vignette.jpg
[4] => khorne-1024.jpg
[5] => marine1.psd
[6] => marine2.psd
[7] => marineschild.psd
[8] => ork-vignette.jpg
[9] => slaanesh-800.jpg
[10] => taubattle2.jpg
[11] => taucity.jpg
)

Seite 3:

Array
(
[0] => tzeentch-1024.jpg
[1] => tzeentch-800.jpg
[2] => Unbenannt-1.psd
)

Das Limit wird natürlich so nicht ersetzt, wüsste auch nicht wie man das machen sollte.Sondern eher gefakted , da man sich einfach immer einen gewissen Ausschnitt aus dem Array rausnimmt. Probleme naja , immer nen ganzen Ordner auslesen das wird dann je nach Anzahl der Bilder etwas dauern.
 
FipsTheThief hat gesagt.:
da man sich einfach immer einen gewissen Ausschnitt aus dem Array rausnimmt. Probleme naja , immer nen ganzen Ordner auslesen das wird dann je nach Anzahl der Bilder etwas dauern.


das ist genau das was ich oben beschrieb und irgendwie auf Ablehnung stieß, warum auch immer. Weiß auch wirklich nicht was daran unverständlich war und vor allem wo da eine "ehrliche Meinung" zu finden war. Naja, was die Leute so als Meinung definieren, ist ja auch ein beliebtes "Argument" (das war jetzt Euphemismus das noch Argument zu nennen) zu sagen "Lass mir doch meine Meinung". Aber ist auch nicht wirklich mein Problem, ich wollte an sich nur helfen. Interessant wie so manch einer darauf reagiert. Nun ja, wie dem auch sei, ein weiterer Weg wäre natürlich die Bilder einfach zu nummerieren. Und das mit dem "alle Bilder einlesen" kann man zumindest verkürzen, indem man nach Erreichung des Limits einfach abbricht. Oder man liest das Verzeichnis einmalig ein und speichert es dann für den Verlauf in einer Sessions als Array, sozusagen ein kleinen Cache. Oder als andere Variante kann man auch einfach Unterordner machen, die ersten 10 Bilder in Ordner "1" usw. dann muss man eben nur beim Hochladen aufpassen.

Ansonsten: Sag mir wo dein Problem beim Verständnis ist, und ich kann dir helfen. Code generieren geht auch bis zu einem gewissen Maße, auch wenn ich schon der Meinung bin das ein wenig Eigenelan wahre Wunder wirkt.
 
Ja naja da reisst ein Problem an das man mit einigen hat.Am Ende soll es am besten so sein das man das komplette Script so bereit stellt das es gleich funktioniert.

Deinen Beitrag hab ich nur kurz durchgelesen , mit den Numerieren hab ich auch nicht gleich verstanden wie das gemeint war.So wenn ich mir nun mein Ergebniss nehm und dein 1 und 2 Beitrag mal zusammen fass , kam ich auch dahinter wie es gemeint war.
Ob ich es so machen würde ? Denke nicht , würde dann lieber bei MySQL bleiben oder halt die fertigen Bildnamen in eine Art Textdatei schreiben meinetwegen die mit in den Ordner liegt.Das erspart einen das komplette auslesen des Ordners und man muss sich nur um die Textdatei kümmern.Nachteil wäre , das wenn man grosse Bildschübe hat , auch die Namen dann alle in die Datei schreiben muss oder man lässt nochmal seperat ein Script drüber laufen.

Wegen der "eigenen Meinung" naja , im Endeffekt muss man sich auch mal die Tatsache vor die Augen führen , das die die hier helfen das freiwillig tun , von daher würde ich auf sowas gar nicht erst anspringen.Und wenn man es noch verstehen will , dann ist es wie du schon sagtest "Learning by doing".
 
Zurück