Thread subject: pHpFusion Nederlands (BE|NL) » Ondersteuning, Themas, Infusies, Modificaties en Installatie :: Controleren of afbeelding aanwezig in database

Posted by AvSan on 05 July 2009, 17:24
#1

Ik heb in de fotogalerij een album aangemaakt en hier wat plaatjes ingezet.

Nu heb ik een aantal pagina's waarbij sommige wel een afbeelding moeten hebben en andere dan weer niet, afhankelijk van de naam van de pagina en dus of de afbeelding aanwezig is. Hoe kan ik controleren of de afbeelding (of de link naar de afbeelding, want de afbeelding staat uiteraard gewoon in images/photoalbum/etc. map) in de database aanwezig is?

Ik had al geprobeerd om het zonder de check op de database, met if (file_exists(afbeelding.jpg)) te doen, maar dat werkt alleen als de afbeeldingen in dezelfde map als de pagina staan.

Eventueel een andere oplossing waarbij de aanwezigheidscheck niet via de database hoeft te lopen en de afbeeldingen in een andere map dan de pagina kunnen staan is uiteraard ook goed Smile

Posted by AvSan on 05 July 2009, 22:08
#2

Ik denk dat ik zelf al de oplossing heb gevonden:

[geshi=php]$page = basename($_SERVER["PHP_SELF"]);
$page = explode('.', $page);
$page = $page[0];
$filename = "$page.jpg";

$query = "SELECT * FROM fusion_photos WHERE photo_filename = '$filename'";

$result = mysql_query($query) or die (mysql_error());
$num = mysql_num_rows($result);

if ($num > 0) {
echo "\"picture";
} else {
echo "geen bestand";
} [/geshi]

Echter eventuele suggesties voor verbeteringen zijn altijd welkom, ben nog een redelijke noob wat php betreft.

Posted by Steff on 06 July 2009, 09:36
#3

Eerst een aantal suggesties om je coding wat simpeler te maken.
PHP_SELF wordt al door fusion gefilterd en wordt uiteindelijk FUSION_SELF (constante)
Query's worden uitgevoerd door de dbquery() functie, en de rijen worden geteld mbv de dbrows() functie.

// Als de foto enkel in album 1 mag staan:
[geshi=php]
$page = basename($_SERVER["PHP_SELF"], ".php");
/* Ook een mogelijkheid:
$page = explode(".", FUSION_SELF);
$page = $page[0];
*/
$result = dbquery("SELECT * FROM ".DB_PHOTOS." WHERE (photo_filename = '$page.jpg' OR photo_filename = '$page.gif') AND (album_id = '1') LIMIT 1");
if (dbrows($result)) {
$data = dbarray($result);
echo "\"picture";
} else {
echo "geen bestand";
} [/geshi]


// Als de foto in alle albums mogen stan:
[geshi=php]
$page = basename($_SERVER["PHP_SELF"], ".php");
/* Ook een mogelijkheid:
$page = explode(".", FUSION_SELF);
$page = $page[0];
*/
$result = dbquery("SELECT * FROM ".DB_PHOTOS." WHERE (photo_filename = '$page.jpg' OR photo_filename = '$page.gif')");
if (dbrows($result)) {
$data = dbarray($result);
echo "\"picture";
} else {
echo "geen bestand";
} [/geshi]

Edited by Steff on 06 July 2009, 09:38

Posted by AvSan on 10 July 2009, 20:29
#4

Thanks Jeepers, weer wat php en wat van fusion geleerd.

Alleen 1 vraagje nog wat is die limit 1 die in regel 7 van jouw eerste voorbeeld staat?

Posted by AvSan on 10 July 2009, 20:47
#5

Hmmm... te vroeg geantwoord, ik weet niet hoe het komt, maar met jouw code krijg ik een foutmelding met een onbekende $end op regel 85.

Toch mn eigen code maar gebruikt...

Posted by Steff on 11 July 2009, 16:20
#6

Limit 1 betekent dat hij de 1ste rij neemt. En die error betekent dat je een } vergeten bent te kopieren of er nog een te veel had laten staan.