Afbeeldingen laden uit map met dezelfde naam als link.
Ik ben bezig met een website en ik kom er even niet meer uit met een PHP en MySQL deel.
Wat heb ik tot nu toe:
Het is een kleinschalige fotografie website. Ik heb de website zo opgebouwd dat de gebruiker d.m.v. een klein admin panel menu items kan toevoegen. Deze menu items worden opgehaald met een query en worden getoond in een <div> op de website. Query ziet er als volgt uit:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$query = "SELECT item FROM menu";
$items = mysql_query($query);
while($resultaat = mysql_fetch_array($items))
{
echo ("".$resultaat[item]." <br />");
}
?>
$query = "SELECT item FROM menu";
$items = mysql_query($query);
while($resultaat = mysql_fetch_array($items))
{
echo ("".$resultaat[item]." <br />");
}
?>
Prima. Het werkt zoals het moet.
Waar kom ik niet uit:
Ik wil dat de menu items (opgehaald met query) automatisch links worden. Wanneer erop geklikt wordt, moet er in een andere <div> afbeeldingen worden geladen uit een map met een gelijknamige map als het menu item.
Kortom: Wanneer geklikt op menu item --> Afbeeldingen laden uit map met dezelfde naam als het menu item.
mijn vraag:
Hoe kan ik dit het beste aanpakken en welke functies moet ik hiervoor gebruiken?
Alvast bedankt!
<a href="pagina.php?map=mapnaam">Mapnaam</a>
Vervolgens in je script controleren de variabele $_GET['map'] bestaat en zo ja een <div> met de afbeeldingen uit die map weergeven...
- Negen van de tien keer is het slim om enkele quotes te gebruiken om strings heen, enkel bij SQL-queries is het handig om dubbele quotes te gebruiken. Jij zou dus op regel acht ook het beste enkele quotes kunnen gebruiken.
- Bij het echo-en is het gebruik van haakjes niet nodig, deze mag je dus weghalen op regel acht. Verder heb je na het openingshaakje een lege string (""), die kan ook best weg.
- Als je een bepaalde waarde uit een array wilt weten, moet je gewoon quotes om de key heen zetten. $resultaat[item] op regel acht moet dus eigenlijk $resultaat['item'] zijn.
- Vergeet je de foutafhandeling voor al je database-activiteiten niet?
Dan weer inhoudelijk, terug naar je vraag. Ik weet niet precies hoe jouw datamodel in elkaar zit, het lijkt me in ieder geval handig om met ID's te werken. Die kan je ook handig gebruiken in je URL's om aan te geven welk item aangeklikt is.
Een klein voorbeeld van hoe een link eruit kan zien:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
echo '<a href="?item=' . $resultaat['item'] . '">' . $resultaat['item'] . '</a><br />';
// Je URL komt er dan bijvoorbeeld zo uit te zien:
// ?item=home
?>
echo '<a href="?item=' . $resultaat['item'] . '">' . $resultaat['item'] . '</a><br />';
// Je URL komt er dan bijvoorbeeld zo uit te zien:
// ?item=home
?>
In je code kan je nu met $_GET['item'] de waarde ophalen, in het voorbeeldje zou de waarde dus "home" zijn. Met de PHP-functie scandir kan je vervolgens een map doorlopen en alle bestanden (of submappen) erin ophalen.
Met wat verder zoeken ben ik de glob() functie tegen gekomen. Dit in combinatie met de $_GET['item'] kan nu afbeeldingen laden uit de map met de zelfde naam als het menu item waarop geklikt is. Ik ga het geheel flink fine tunen!
en Jonathan bedankt voor je tips over mijn code, PHP is echt nieuw voor me dus alle tips zijn welkom!
Gewijzigd op 05/07/2010 15:18:07 door Justin K
Hoe kan ik een map met afbeeldingen standaard openen? Dus een standaard map die altijd als eerst geopend wordt wanneer een gebruiker op de site komt?
Ik heb het geprobeerd met:
Waarbij ik dus probeerde standaard de map 'start' te openen. Alleen wanneer ik dit doe beland het mn site in een soort loop. Hij opent wel in m'n adresbalk het juiste adres, maar de browser zegt: "Deze webpagina bevat een omleidingslus."
Enig idee hoe ik dit kan oplossen?
Alvast bedankt!
@Peter Wat is het nut van is_string? $_POST en $_GET waardes zijn altijd strings als ik me niet vergis.
In de <div> waar de afbeeldingen in geladen worden heb ik nu de volgende code:
Code (php)
Er gebeurt niks wanneer ik de pagina refreshed. De map 'start' wordt niet geopend in de <div>. Ook in de adresbalk is er geen ?item=start te zien. Heb de de
if(!isset($_GET['item']))
{
$item = 'start';
}
Op de verkeerde plek staan? of mis ik nu nog een cruciale stap?
Alvast bedankt!
Gewijzigd op 08/07/2010 11:37:33 door Justin K
Code (php)
En gebruik dan voor de rest van je script gewoon de variabele $item...
Bedankt voor de reactie!
Mark Coenen op 06/07/2010 21:45:00:
@Peter Wat is het nut van is_string? $_POST en $_GET waardes zijn altijd strings als ik me niet vergis.
url.php?ditiseenarray[]=inhoud&ditiseenarray[metDezeKey]=nogMeerInhoud bijvoorbeeld.
Altijd even opletten, hier houden weinig mensen rekening mee.
@Peter Daar had ik dus inderdaad niet aan gedacht.