Versio

Variabele query?

Overzicht Reageren

Hendel Berg

Hendel Berg

12/05/2011 09:46:39
Quote Anchor link
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):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
pagina.php?UID=1234&opleiding_1=behaald&datum_1=12-05-2011&opleiding_4=behaald&datum_4=09-12-2010


Tabel met aanwezig opleidingen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
+-------------+----------------+
| idOpleiding | Opleiding      |
+-------------+----------------+
|           1 | Putjesschepper |
|           4 | Stratenmaker   |
+-------------+----------------+


Koppeltabel:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
+------+-------------+
|  UID | idOpleiding |
+------+-------------+
| 1234 |           1 |
| 1234 |           4 |
+------+-------------+
Gewijzigd op 12/05/2011 09:57:05 door Hendel Berg
 
PHP hulp

PHP hulp

25/05/2012 17:23:48
Gesponsorde koppelingen:
 
Dennis meijer

dennis meijer

12/05/2011 11:15:27
Quote Anchor link
Wil je dat alle opleidingen van 1 persoon zichtbaar worden of?

Want ik kan niet echt lezen wat je precies wilt... Ofterwijl ik snap er niet veel van wat je bedoeling is.
 
Joren de Wit
Beheerder

Joren de Wit

12/05/2011 11:23:17
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?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...
 
Hendel Berg

Hendel Berg

12/05/2011 11:49:21
Quote Anchor link
@Jeroen
Die manier kende ik niet. Dat is wel heel erg handig!

Ben net nog even aan het stoeien geweest en ben in feite op hetzelfde uit gekomen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
$keywords = preg_split('/&/', $_SERVER['QUERY_STRING']);
$rows = count($keywords);

for ($a = 2; $a < $rows; $a++)
{
   list($idOpleiding, $datum_behaald) = explode("=", $keywords[$a]);
   echo $idOpleiding ." op: ". $datum_behaald ."<br />"; // dit gebruik ik straks in de query
}
Gewijzigd op 12/05/2011 11:49:47 door Hendel Berg
 
Joren de Wit
Beheerder

Joren de Wit

12/05/2011 12:04:24
Quote Anchor link
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...
 
Hendel Berg

Hendel Berg

12/05/2011 12:32:15
Quote Anchor link
@Joren:
Waar doel je dan precies op?
 
Joren de Wit
Beheerder

Joren de Wit

12/05/2011 13:08:03
Quote Anchor link
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.

Toevoeging op 12/05/2011 13:09:08:

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)...
 



Overzicht Reageren