Door
Marcel Groot
op 14-07-2016 21:00
gewijzigd op 16-07-2016 22:26
3.752 views
Weet iemand hoe je ervoor kunt zorgen dat het volgende kan:
Als je een form hebt gemaakt met checkboxen (bijvoorbeeld 6 verschillende checkboxen)
en je selecteert de 1e dus 0 en nummer 5 dat dan in de database de nummers 05 komen te staan in 1 vakje en de ander 6 niet.
Waar loop je vast? Formulier, verwerken input, opslaan in database, ......?
Overigens vraag ik me af of het verstandig is op de aangevinkte checkboxen zo op te slaan in een database. Waarom in 1 veld?
Of het handig is om het resultaat in 1 veld op te slaan, is een ander punt.
Want hoe check je of iemand checkbox 4 had aangevinkt? (WHERE veld LIKE '%4%' klinkt niet heel efficient)
En wat te doen als je meer dan 9 checkboxen hebt?
Precies daarom is een verzameling van checkboxen een goede reden om wat extra tabellen aan te maken in de database. Stel een user kan een paar opties aan of uit schakelen. Je hebt dan de tabel users, een tabel options en daarnaast maak je een koppeltabel users_options.
users:
- id
- name
- email
...
options:
- id
- description
users_options
- user_id
- option_id
Welke checkboxen staan aan voor user met id 123?
SELECT
option_id
FROM
users_options
WHERE
user_id=123
Of als je ook de omschrijving van de optie er bij wilt hebben:
SELECT
o.id, o.description
FROM
users_options uo
JOIN
options o ON o.id = uo.option_id
WHERE
uo.user_id=123
- Waarom gebruik je checkboxes voor male/female en geen radiobuttons? Nu kun je namelijk opgeven dat je zowel man EN vrouw bent ... (wellicht een ongelukkig gekozen voorbeeld?)
dan valt me dit stukje code op:
<?php
if (isset($_POST['male'])){
$male= 1;
}
else {
$male= 0;
}
// query
$sql = "insert into project (fname,lname,gender) values ('".$fname."','".$lname."','".$gender."')";
...
?>
De mysql_ functies worden door de meest recente PHP versie NIET MEER ondersteund wat wil zeggen dat deze functies dan NIET MEER WERKEN. Stap dus direct over op mysqli_ functies (of op PDO).
[size=xsmall]Toevoeging op 16/07/2016 15:25:41:[/size]
Marcel Groot op 16/07/2016 14:32:33
Het ging meer om dat het werkte niet perse om de inhoud ervan en je bedoeld dat ik real escape strings moet gaan gebruiken?
Je moet beseffen dat GET en POST variabelen random meegestuurd kunnen worden in ieder request en dat jij ze altijd moet controleren op hun geldigheid en juistheid. zo is het heel erg simpel om in plaats van een F of M een andere letter(reeks) mee te posten. Dus waar jij nu misschien braaf een F of M verwacht in $_POST['gender'] kan deze net zo goed geheel afwezig zijn of een andere waarde bevatten. CONTROLEER HIER ZO VEEL MOGELIJK OP.
ALLE INPUT VAN BUITEN JE APPLICATIE IS 'VUIL'!
[size=xsmall]Toevoeging op 16/07/2016 15:30:46:[/size]
// query
$sql = "insert into project (fname,lname,gender) values ('".$fname."','".$lname."','".$gender."')";
...
?>
De mysql_ functies worden door de meest recente PHP versie NIET MEER ondersteund wat wil zeggen dat deze functies dan NIET MEER WERKEN. Stap dus direct over op mysqli_ functies (of op PDO).
[size=xsmall]Toevoeging op 16/07/2016 15:25:41:[/size]
[quote="Marcel Groot op 16/07/2016 14:32:33"]
Het ging meer om dat het werkte niet perse om de inhoud ervan en je bedoeld dat ik real escape strings moet gaan gebruiken?
Je moet beseffen dat GET en POST variabelen random meegestuurd kunnen worden in ieder request en dat jij ze altijd moet controleren op hun geldigheid en juistheid. zo is het heel erg simpel om in plaats van een F of M een andere letter(reeks) mee te posten. Dus waar jij nu misschien braaf een F of M verwacht in $_POST['gender'] kan deze net zo goed geheel afwezig zijn of een andere waarde bevatten. CONTROLEER HIER ZO VEEL MOGELIJK OP.
ALLE INPUT VAN BUITEN JE APPLICATIE IS 'VUIL'!
[size=xsmall]Toevoeging op 16/07/2016 15:30:46:[/size]
En wat als je er voor zorgt dat het formulier alleen kan worden verzonden als er alleen gebruik is gemaakt van letters en cijfers? Dus wanneer er een % of # (enzv....) wordt gebruikt het formulier gewoon niet wordt verzonden.