Ik heb hier ergens al een script vandaan, zelf een beetje aangepast als amateur PHP. Ik moet nu iets voor school maken he, daarbij moet ik een foto uit een map halen (wat ik nu al heb dankzij dit mooie script), maar ook nog eens een text bestand die moet worden uitgelezen en de descriptie die bij de bestandsnaam hoort als <img alt="descriptie" neerzetten. Kan iemand mij helpen?

Dit is wat ik nu heb in gallerij.php:

<?php

$pad = '../gallerij/';
$dir = opendir($pad);

// lees die jpgies uit dir

while (false !== ($file = readdir($dir)))
{
if (($file !== ".") and ($file !== ".."))
{
list($filename, $ext) = explode(".", $file);
list($main, $sub, $include) = explode("/", $PHP_SELF);
if ($ext == "jpg") {
if ($file == $foto) {
echo "<a href=\"$pad$file\" target='foto'><img width='280' height='230' border='0' src=\"$pad$file\"></a>";
}
}
}
}
?>

dit is wat ik zelf heb geprobeerd maar werkt alleen bij de eerste foto:

<?php

$bestand=array_reverse(file("descripties.txt"));

foreach($bestand as $i)
{
$i=explode("::",$i);
$foto = $i[0];
$naam = $i[1];
$naam = htmlspecialchars($naam);
$foto = htmlspecialchars($foto);
}

$pad = '../gallerij/';
$dir = opendir($pad);

// lees die jpgies uit dir

while (false !== ($file = readdir($dir)))
{
if (($file !== ".") and ($file !== ".."))
{
list($filename, $ext) = explode(".", $file);
list($main, $sub, $include) = explode("/", $PHP_SELF);
if ($ext == "jpg") {
if ($file == $foto) {
echo "<a href=\"$pad$file\" target='foto'><img alt=\"$naam\" width='280' height='230' border='0' src=\"$pad$file\"></a>";
}
else {
echo "<a href=\"$pad$file\" target='foto'><img alt=\"geen naam\" width='280' height='230' border='0' src=\"$pad$file\"></a>";
}
}
}
}
?>

descripties.txt:

foto1.jpg::lol::
foto2.jpg::super::
dit is wat ik zelf heb geprobeerd maar werkt alleen bij de eerste foto


Dat heeft waarschijnlijk te maken met dit:

foreach($bestand as $i)
{
$i=explode("::",$i);
$foto = $i[0];
$naam = $i[1];
$naam = htmlspecialchars($naam);
$foto = htmlspecialchars($foto);
}

je kent elke keer een nieuwe waarde toe aan $naam en $foto, zodat ze uiteindelijk allebei maar 1 waarde hebben. Ik denk dat je beter een associatieve array kunt maken:

<?php
$fotos = array ();
foreach($bestand as $value)
{
$i = explode ('::', $value);
$fotos[$i[0]] = $i[1];
}
?>

je test wordt dan:
<?php
if (isset ($fotos[$file])) {
echo '<a href="' . $pad . $file . '" target="foto"><img alt="' . $fotos[$file] . '" width="280" height="230" border="0" src="' . $pad . $file . '"></a>';
}
else {
echo '<a href="' . $pad . $file . '" target="foto"><img alt="geen naam" width="280" height="230" border="0" src="' . $pad . $file . '"></a>';
}
?>
Beste Jan Koehoorn,

Hartstikke bedankt voor jouw reactie. Alles werkt nu perfect. Voor mensen die gebruik willen maken van dit script, hieronder staat het werkend.

gallerij.php:

<?php

$bestand=array_reverse(file("descripties.txt"));

$fotos = array ();
foreach($bestand as $value)
{
$i = explode ('::', $value);
$fotos[$i[0]] = $i[1];
}


$pad = '../gallerij/';
$dir = opendir($pad);

// lees die jpgies uit dir

while (false !== ($file = readdir($dir)))
{
if (($file !== ".") and ($file !== ".."))
{
list($filename, $ext) = explode(".", $file);
list($main, $sub, $include) = explode("/", $PHP_SELF);
if ($ext == "jpg")
{
if (isset ($fotos[$file]))
{
echo '<a href="' . $pad . $file . '" target="foto"><img alt="' . $fotos[$file] . '" width="280" height="230" border="0" src="' . $pad . $file . '"></a>';
}
else
{
echo '<a href="' . $pad . $file . '" target="foto"><img alt="geen naam" width="280" height="230" border="0" src="' . $pad . $file . '"></a>';
}
}
}
}
?>
By the way, hoe zorg ik ervoor dat mijn foto's DESCENDING sorteren. De laatst toegevoegde foto moet vooraan komen te staan.

b.v.d.

Reageren