Ik maak al geruime tijd tot tevredenheid gebruik van een scriptje voor het
genereren van server-side foto-albums. In het kort komt er op neer dat er
een array gevuld wordt met bestandsnamen, in eerste instantie wordt er een
verzameling thumbnails getoond (bestandjes die altijd met een bepaald
voorvoegsel beginnen), en elke thumbnail is een link naar de eigenlijke
foto. Op die pagina staan verwijzingen naar de voorgaande foto (indien van
toepassing) het totaaloverzicht en de volgende foto (indien van toepassing).
Beide pagina's zijn een en hetzelfde php-bestand, als er een get-variabele
"plaatje" aanwezig is en de bestandsnaam "plaatje" bestaat dan wordt die
foto getoond, anders verschijnt het hele overzicht.
Sinds kort ben ik bezig de foto's in een database onder te brengen en dan
gaat het mis. In beide gevallen verschijnt nog keurig de lijst met
thumbnails maar de database-variant kan niet "onthouden" de hoeveelste foto
getoond wordt.
De functie met de array vind je onder meer op
http://www.parochiebeekendonk.nl/fconinck.php en daar gaat het goed, de
functie is als volgt.
function addThumbnails($tn)
{
if (is_array($tn))
{
foreach($tn as $t)
{
$this->foto_array[]= $t;
}
}
else
{
$this->foto_array[] = $tn;
}
}
De functie met de database staat op
http://www.parochiebeekendonk.nl/ceci2k6.php en deze is als volgt:
function getFromMySql($bestandspatroon)
{
$db = mysql_connect("server", "inlognaam","wachtwoord");
mysql_select_db("database",$db) or die ("FOUT: OPENEN
DATABASE MISLUKT");
$query = mysql_query("SELECT bestandsnaam from fotos where
bestandsnaam LIKE '{$bestandspatroon}%' order by bestandsnaam ASC",
$db);
while (list($bestandsnaam) = mysql_fetch_row($query))
{
$this->foto_array[] = $bestandsnaam;
}
mysql_close($db);
}
Om de vraag te beantwoorden "de hoeveelste positie neemt deze foto in binnen
de array" maak ik gebruik van het volgende(ik heb in php geen
standaardfunctie kunnen vinden en via een aantal forums kreeg ik deze
oplossing aangereikt):
function arrayposition($haystack, $needle)
{
$getal = 0;
$lengte = count($haystack);
for ($i = 0; $i < $lengte; $i++)
{
if ($needle == $haystack[$i])
{
return $i;
}
}
return -1;
}
Op het moment dat er één foto wordt getoond is de code onder meer
$hoeveelste = $this->arrayposition($this->foto_array, $foto) + 1;
if ($hoeveelste < $totaalFotos)
{
$volgendeFoto = $this->foto_array[$hoeveelste];
$verwijzing = "<a href = \"$this->dezePagina";
$verwijzing .= "?plaatje=$volgendeFoto\"";
$verwijzing .= "> >> Volgende >> </a>";
echo $verwijzing;
}
//en soortgelijke code voor de vorige foto.
Zoals gezegd, het gaat alleen mis als ik de array vanuit mysql probeer te
vullen en dan nog alleen het bepalen van "de zoveelste positie" van de foto.
Het verbaast me dat het totaal aantal foto's ook in dit laatste geval wel
herkend wordt maar er op de voorbeeldpagina alleen maar "foto 0 van 10"
staat.
Heeft iemand wat ideeën?
Voor de duidelijkheid, ik zat een beetje te dubben hoe ik mijn vraag moet
formuleren zonder een ál te grote "lap" code te schrijven, ik kan het
uiteraard altijd nog wat verder aanvullen.
Bedankt,
Martien.