Binnen mijn CMS heb ik een form waarin de boomstructuur van de website wordt getoond. Vereenvoudigd:
Als dit form gesubmit wordt, doorloop ik de array en sla de eventuele wijzigingen op:
Nu wil ik echter ook een clientside check uitvoeren om te kijken of de gebruiker geen input boxes leeg heeft gelaten. Als dat wel het geval is, kleuren ik ze rood, met dank aan Crisp. Hij kwam immers met de oplossing:
Daar stond wel de volgende opmerking bij:
Vraag: is er een oplossing zodat ik en mijn clientside checks kan uitvoeren en de serverside afhandeling kan behouden zoals die nu is?
code:
1
2
3
4
5
6
| <form id="menu" action="menu.php"> <input name="node[99][title]" type="text" value="Handleiding"> <input name="node[11][title]" type="text" value="Nieuws"> <input name="node[72][title]" type="text" value="Andere Dingen"> <input type="submit" value="Opslaan"> </form> |
Als dit form gesubmit wordt, doorloop ik de array en sla de eventuele wijzigingen op:
PHP:
1
2
3
4
5
6
7
| $node = $_POST['node']; foreach ($node as $key => $value) { $result = db_query("UPDATE nodes SET title = '%s' WHERE nid = %d", $value['title'], $key); } |
Nu wil ik echter ook een clientside check uitvoeren om te kijken of de gebruiker geen input boxes leeg heeft gelaten. Als dat wel het geval is, kleuren ik ze rood, met dank aan Crisp. Hij kwam immers met de oplossing:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| function check()
{
var objForm = document.forms['menu'];
for(var i = 0; i < objForm.elements['node[]'].length; i++)
{
if(objForm.elements['node[]'][i].value.length == 0)
{
alert(objForm.elements['node[]'][i].value);
objForm.elements['node[]'][i].style.backgroundColor = "red";
}
}
} |
Daar stond wel de volgende opmerking bij:
En zie hier mijn probleem: om het clientside javascript aan de praat te krijgen, moet ik mijn node[77][title] vervangen door node[]. Mijn serverside afwerking komt hierdoor wel in de knoei.crisp schreef op maandag 15 november 2004 @ 23:24:
Als je een collection wilt, geef ze dan ook allemaal dezelfde name:
HTML:
1 2 3 4 5 6 <form id="menu" action="#"> <input name="node[]" type="text" value="Handleiding"> <input name="node[]" type="text" value="Nieuws"> <input name="node[]" type="text" value=""> <input type="button" onclick="check();" value="Opslaan"> </form>
Vraag: is er een oplossing zodat ik en mijn clientside checks kan uitvoeren en de serverside afhandeling kan behouden zoals die nu is?
"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."