Met onderstaande code is het me als beginneling (na veel tips van anderen) toch gelukt om via de adresbalk het aantal zichtbare foto's op mijn webpagina te variëren.

<?php

$aantal = 2;
$photos = glob('img/*.jpg');

if (isset($_GET['aantal']))
{
$aantal = (int) $_GET['aantal'];
}

if (!is_int($aantal) || $aantal < 1 || $aantal > count($photos))
{
$aantal = count($photos);
}

for($getal = 1; $getal <= $aantal; $getal++)
{
echo '[ul]';
echo '[li][img src="img/photo' . $getal . '.jpg"][/li]';
echo '[/ul]';
}

?>

De code wordt middels een 'include('photos.php');' binnen een divje van de [main][/main] geplaatst.

In de adesbalk staat nu bijvoorbeeld:
localhost/album.php?aantal=5

En als ik in plaats van ?aantal=5 invul ?aantal=14, dan zie je niet 5 foto's, maar 14 foto's netjes geordend.

Nu wil ik mijn webpagina zowel Nederlandstalig als Franstalig hebben. Dus heb ik dit PHP-bestand bedacht.

<?php

$drapeaux = array
(
array
(
'href' => 'album.php?lang=fr',
'content' => '[img src="images_2/fr.png" title="fran&ccedil;ais"]',
'target' => '_self',
'seq' => 1,
),
array
(
'href' => 'album.php?lang=nl',
'content' => '[img src="images_2/nl.png" title="Nederlands"]',
'target' => '_self',
'seq' => 2,
),
);

echo '<ul>';
foreach ($drapeaux as $key => $value)
{
$class = '';
if ($value['href'] == basename($_SERVER['REQUEST_URI']))
{
$class = 'visited';
}
echo '[li][a class="' .$class. '" href="' .$value['href']. '" target="' .$value['target']. '"]' .$value['content']. '[/a][/li]';
}
echo '[/ul]';

?>

Deze code wordt via 'require_once('drapeaux.php');' binnen de header opgeroepen.

Als ik op een vlaggetje klik, dan komt er in de adresbalk bijvoorbeeld te staan:
localhost/album.php?lang=nl

In de adresbalk rechtstreeks of via het andere vlaggetje kan ik er van maken:
localhost/album.php?lang=fr

In de CSS heb ik volledige opacity gegeven aan het actieve vlaggetje en beduidend verminderde opacity aan het vlaggetje dat even niet meedoet.

Ik weet nog niet hoe ik in mijn code ook kan aangeven dat je effectief naar bijvoorbeeld het volgende adres gaat:
localhost/album/fr.php?lang=fr

Een bestand met de naam 'album/fr.php' wordt als ongeldig gezien wegens het slash-teken.
Dus als iemand een tip heeft om de taalparameter ?lang=... ook echt te koppelen aan een anderstalige pagina... ???

Beide $_GET parameters functioneren apart gebruikt zoals verwacht. Maar als ik ze in de adresbalk combineer, worden de vlaggetjes allebei transparant, terwijl de taal-parameter nog wel in de adresbalk staat:
localhost/album.php?lang=fr&aantal=4
of
localhost/album.php?aantal=4&lang=fr

De volgorde maakt dus niet uit. Alleen de parameter voor het aantal foto's blijft correct het gekozen aantal foto's tonen.

Mijn vraag is nu: hoe kan ik de codes zo aanpassen, dat er geen conflict meer tussen de $_GET parameters blijft bestaan? En dat dus ook bij het actieve vlaggetje de transparantie wegblijft.
Mja, de validator melkt erover ... maar ik vind het raar om voor de scheiding van parameters &amp; te gebruiken. In strings zou ik het inderdaad wel doen:

www.bla.com/?candy=m&amp;m&color=yellow
Het karakter & (de ampersand) dien je te URL-encoden als je deze letterlijk in de hyperlink wilt gebruiken.

Dus het wordt zoiets als:
<a href="http://www.bla.com/?candy=M%28M&amp;color=yellow">om nom</a>

Voornaamste winst wanneer je deze vorm gebruikt is ondubbelzinnigheid: de informatie kan maar op één manier geïnterpreteerd worden.

EDIT: maar als je gewoon een functie hebt voor het opbouwen van de link en een functie hebt voor het escapen van output in een HTML-context wordt dit zoiets simpels als:
<?php
$myLink = createLinkThingy($pageId, $args);
?><a href="<?php echo escapeHtml($myLink) ?>">hello <?php echo escapeHtml($user->name) ?></a>

Wat je overal zonder na te denken kunt gebruiken, en het maakt het geheel nog veiliger ook :p.
Oké ... maar als je direct in de browser intypt hoeft het niet toch? Dan kun je wel gewoon dit typen toch?

http://www.bla.com/?candy=M&M&color=yellow
[sup]Heren ik maak hier even een nieuw topic voor aan.[/sup]
Dat kun je intypen, maar het is wel ambigu. De browser moet hier chocola (heh, zie nu pas de pun hiero) van kunnen maken en zal dus vertaalstappen uitvoeren (die meestal goed gaan, wat zou verklaren waarom je hier niet eerder tegenaan bent gelopen). Het lijkt mij beter om machines ondubbelzinnige informatie te voeren omdat interpretatie meestal niet het sterkste punt is van een "robot".

Het is ons duidelijk waar de "candy" parameter ophoudt en de volgende parameter (color) begint omdat iedereen wel M&M's kent. Voor een machine ligt dat wellicht anders :p.

Mogelijk kan bovenstaande URL als volgt geinterpreteerd worden:
candy, met waarde "M"
M, zonder waarde
color, met waarde "yellow"

Want blijkbaar is het toegestaan om geen waarde op te geven.

Je voorkomt al deze ellende door uit te sluiten dat meerdere interpretaties mogelijk zijn d.m.v. (context specifieke) escaping. De eerdergenoemde autogordel.

EDIT: testje: test.php
<?php
header('Content-Type: text/html; charset=UTF-8');

function dump($a) {
    echo '<pre>'.htmlspecialchars(print_r($a, true), ENT_QUOTES, 'UTF-8').'</pre>';
}

dump($_GET);
?>

Aanroepen met test.php?candy=M&M&color=yellow (in Chrome) levert:
Array
(
    [candy] => M
    [M] => 
    [color] => yellow
)


QED :D

test.php?candy=M%26M&color=yellow levert:
Array
(
    [candy] => M&M
    [color] => yellow
)

POST en GET bevatten altijd urlencoded data en $_GET en $_POST worden altijd ge-url-decode. $_SERVER['REQUEST_URI'] daarentegen bevat bijvoorbeeld weer de rauwe URL. Dit soort nuances kunnen voor veel hoofdpijn zorgen :p.
Hehe ... lol. Nooit echt zo mee bezig geweest. Wel grappig eigenlijk :-)

Misschien kun je M&M's ook maar gewoon beter opeten ;-)
Maar in dat geval kun je ook enkel de data (M&M) escapen en dan werkt het gewoon.
re-Bonjour à tous et à toutes,
Vanaf dat Ozzie PHP op een terechte interventie van Thomas van den Heuvel is komen reageren, heb ik de indruk dat mijn oorspronkelijke vraagstelling enigszins ondersneeuwd raakt. Frank Nietbelangrijk stelt al voor om een nieuw topic aan te maken. Ergo: revenons à nos moutons, messieurs!

@Frank Nietbelangrijk: Ik moet u bedanken voor de uitgebreide aandacht die u geeft aan mijn vraag. In alle eerlijkheid moet ik echter bekennen dat - ik ben nog maar neofiet in het domein - veel PHP-elementen in uw uiteenzetting voor mij onbekend zijn. Al lezende komt bij mij de vraag op: zou ik niet bij u in de leer mogen om grip te krijgen op wat bijvoorbeeld een mappenstructuur is? Want dat ben ik nog niet in mijn traject tegengekomen. Nogmaals: ik begrijp maar zeer beperkt wat u opschrijft, maar ik krijg wel de indruk dat u prima in staat bent om stap-voor-stap uit te leggen hoe een bepaald PHP-probleem te benaderen.

Ik heb al eens gezocht naar een club of interessegroep voor webdevelopment waar leden elkaar kunnen helpen. Maar in de regio waar ik woon (Eindhoven c.a.) heb ik die nog niet gevonden. Indien iemand een idee heeft, aarzel niet om mij op de hoogte te brengen. Merci.
Theo,

Een mappenstructuur heeft niet zo zeer met PHP te maken maar meer daar waar ik mijn bestanden ga bewaren. Net als een gemiddelde computergebruiker zijn foto's in een andere map zal willen bewaren dan zijn muziek zeg maar.

dus begin aldaar uw index.php pagina opgeslagen is met het aanmaken van twee nieuwe mappen: libraries en config.

Een cursus moet toch ergens te volgen zijn? Ik heb al eens eerder iemand een aantal dagen begeleid en zou dat best kunnen maar eindhoven dat is toch wel een stukje uit de buurt...
Hoi @Theo, sorry dat een en ander is ondergesneeuwd maar als je een stukje naar boven (klik mij!) scrollt haal ik daar een passage aan van code die je eerder geplaatst hebt waar je mogelijk iets mee kunt :).

Reageren