Door
Hendel Berg
op 12-05-2011 09:46
gewijzigd op 12-05-2011 09:57
892 views
Voor een website heb ik back-office een systeempje gemaakt waarin beheerders opleidingen kunnen toevoegen en verwijderen en kunnen aangeven welke mensen welke opleiding(en) hebben behaald.
Nu zit ik met het volgende probleem. Wellicht eenvoudig, maar kan er even niet op komen.
Per persoon wordt steeds de lijst met alle opleidingen getoond (overzicht komt uit DB). In deze lijst kan bij desbetreffend persoon met checkboxen worden aangegeven welke van deze opleidingen hij/zij heeft behaald. Deze behaalde opleidingen moeten worden opgeslagen in een koppeltabel.
Doordat ik niet weet hoeveel en welke opleidingen in de database staan (doordat beheerder deze kan aanpassen) én de GET- of POST-string variabel is, heb ik nu geen idee hoe ik de MySQL-query moet opzetten.
De GET- of POST-string die binnen komt kan er als volgt uit zien (waarbij het cijfer correspondeert met het id van de opleiding uit de database):
Ik denk dat dit te maken heeft met de manier waarop je je formulier opbouwt. Het lijkt erop dat de velden namen krijgen als 'opleiding_xx' waarbij xx het id uit de database voorstelt? Dat is niet handig...
Ik zou een array gebruik als veldnaam voor de opleidingen (en datums) waarbij de keys in die array het id van de opleiding voorstellen. Dus stel dat je een SELECT query uitvoert om alle opleidingen te selecteren en dat $row['idOpleiding'] het opleidingsid bevat, bouw je velden dan als volgt op:
<?php
echo '<p>
<input type="checkbox" name="opleidingen['.$row['idOpleiding'].']" /> '.$row['Opleiding'].'<br />
Datum: <input type="text" name="datums['.$row['idOpleiding'].']" value="" />
</p>';
?>
Uiteraard kun je de opmaak zelf wijzigen, dit dient enkel als voorbeeld voor de veldnamen.
Als je het formulier nu verzend, heb je de arrays $_POST['opleidingen'] en $_POST['datums'] waarin de keys het opleidingsid zijn en de waardes respectievelijk 'checked' en de betreffende datum zijn. Die kun je vervolgens weer wegschrijven naar je koppeltabel...
Let wel op dat als met die manier je query string ook nog extra variabelen krijgt, wat niet ondenkbaar is, de afhandeling in je PHP script in de soep loopt...
Stel dat je bijvoorbeeld een sorteerrichting in de url wilt meegeven (bv. &sort=desc), dan zou er in je query een record ingevoegd worden met het id 'sort' en de waarde 'desc'. Zo zou je (later) nog veel meer variabelen in je url nodig kunnen hebben die je er dan niet meer in kunt zetten omdat je deze manier van verweken gebruikt...
Mijn suggestie zou zijn om een formulier met arrays als veldnamen te gebruiken en dat te verzenden via de POST methode (method="post"). Dan heeft dat allemaal geen invloed op je url.
[size=xsmall]Toevoeging op 12/05/2011 13:09:08:[/size]
Nog twee dingen waar je mogelijk mee in de knoop zou kunnen raken: zoekmachinevriendelijke urls (daar komt de & niet meer in voor) en maximale lengte van een url (waardoor je mogelijk niet alle opleidingen kunt verwerken)...