Data opvragen en bewerken in PHP
Pagina: « vorige 1 2 3 4 5 6 7 volgende »
Ik heb in mijn script een hidden field gemaakt. Door het hidden field te gebruiken, post hij automatisch een waarde in het veld waar de checkbox komt te staan. Vervolgens staat er dat, als de checkbox een waarde krijgt dus 1, de waarde van de checkbox de waarde van het hidden field overschrijft. Dus als de checkbox leeg is en dus niet ingevuld, wordt de database wel nog steeds geschreven.
Je kan gewoon een query draaien na het posten die opvraagt welke id's beschikbaar zijn. Daarna vergelijk je wat er beschikbaar is met wat gepost is op de pagina. Wat niet gepost is maar wel beschikbaar in de database zet je op afwezig, de rest op aanwezig. Simpel en snel. Vooral omdat je die query al draait bij het opbouwen van je formulier.
Gewijzigd op 08/08/2017 21:24:55 door Ben van Velzen
Daar ben ik het niet mee eens... De velden worden weldegelijk goed doorgestuurd. Het is heel simpel, je hebt twee opties, een kind is aanwezig of afwezig. Vink je een kind aan, dan krijgt de kolom de waarde Present voor dat kind. Vink je niets aan, dan zorgt de loop ervoor dat automatisch bij het goede kind gewoon een waarde Afwezig komt.
Ik vraag me dan toch af, waarom doe je moeilijk met checkboxes, terwijl er al een aantal keer radio-buttons is geroepen? Dan heb je altijd de juiste keuze zonder fratsen te hoeven maken met hidden fields.
Heb je daar al aan gedacht? Of ben je het daar ook "niet mee eens"?
Bovendien wordt eerst de hidden feature gepost en dan pas de checkbox.
De checkbox zal dus altijd later worden gepost en de hidden feature overschrijven.
Is het dan mogelijk dat het hidden field later wordt doorgestuurd terwijl die eerder in het script wordt verzonden?
https://www.nngroup.com/articles/checkboxes-vs-radio-buttons/
Ik maak hierop uit dat een radio-button het beste is, omdat deze 'aanwezig' of 'afwezig' kunnen tonen. En daarbij beide de verplichtte waarde meesturen. Checkboxxes zijn eigenlijk bedoeld voor als je meerdere waardes hebt. Maar gelukkig kan iemand niet 'aanwezig' EN 'afwezig' zijn.
Het is eigenlijk ook niet voor niets dat ze bij uitgeschakeld zijn, geen waarde meegeven.
Dus: Radio-buttons is the way, it is.
Gewijzigd op 08/08/2017 21:44:09 door - Ariën -
Nee, dit wordt bepaald door de browser, wat eerder of later verzonden wordt. En dit kan per keer verschillen. Dat iets eerder in HTML staat heeft weinig tot niets te maken met de volgorde waarin zaken verzonden worden.
>> Is het dan mogelijk dat het hidden field later wordt doorgestuurd terwijl die eerder in het script wordt verzonden?
Hij wordt niet "in het script" verzonden, hij wordt verzonden wanneer de browser er zin in heeft. Zo zijn er browsers die alles gegroepeerd versturen (bijvoorbeeld eerst alle text inputs, daarna alle checkboxes, daarna radiobuttons, daarna hidden fields en zo verder. Het hangt af van de maker van de browser wat de regels voor verzending zijn. Daar heb je zelf geen invloed op. Dat is een van de redenen dat je nooit twee keer dezelfde naam hoort te gebruiken in HTML.
Gewijzigd op 08/08/2017 21:51:30 door Ben van Velzen
Ik dacht dat dat namelijk wel zo was, hetgeen wat eerder werd gepost altijd eerder werd verzonden.
Maar dan ga ik inderdaad toch switchen naar de radiobuttons, dat was namelijk mijn reden om checkboxen te gebruiken.
Checkboxen vond ik beter en met de hidden functie kwam er dan toch altijd een resultaat, maar nu is het duidelijk, dan ga ik dat aanpassen.
Had je dan zowel een checkbox voor aanwezig als afwezig? (sorry, ik heb de discussie niet gevolgd)
Ozzie PHP op 08/08/2017 22:02:02:
>> Checkboxen vond ik beter
Had je dan zowel een checkbox voor aanwezig als afwezig? (sorry, ik heb de discussie niet gevolgd)
Had je dan zowel een checkbox voor aanwezig als afwezig? (sorry, ik heb de discussie niet gevolgd)
Nee, het ging eerst om een single checkbox voor aanwezig.
Gewijzigd op 08/08/2017 22:09:04 door - Ariën -
Ja, het ging inderdaad zoals Ariën zei om 1 checkbox. Deze postte alleen een waarde als die aangevinkt werd, dus had er een hidden field aan toegevoegd zodat er uberhaupt een waarde werd gepost, maar dat is naar ik nu lees niet betrouwbaar, dus switchen naar radio buttons.
Vanuit gebruiksvriendelijkheid lijkt me dat (checkboxen) wel wenselijker/overzichtelijker ... dan hoef je alleen aan te vinken wie er aanwezig is.
Technisch gezien ... alvorens het formulier te tonen een array met alle id's (als key) opslaan met waarde 0. Na het posten de array aanpassen op basis van de checkboxen die zijn geset.
Zou kunnen toch? Of mis ik iets?
Gewijzigd op 08/08/2017 22:10:26 door Ozzie PHP
Die oplossing had ik inderdaad ook al voor ogen.
Dan moet ik dus gewoon even een array opstellen die alles naar waarde afwezig zet.
Wanneer een checkbox dan is aangevinkt, wordt die verzonden naar de bijbehorende kolom.
Je kan de radiobuttons setten met de inhoud uit de database en na het posten heel simpel weer updaten in de database.
Technisch gezien ... alvorens het formulier te tonen een array met alle id's (als key) opslaan * in sessie met waarde 0. Na het posten de array aanpassen op basis van de checkboxen die zijn geset.
Die sessie was ik vergeten erbij te zetten. Dus op de pagina waar je het formulier toont, haal je eerst alle id's op uit de database. Die id's sla je in een array op waarbij iedere key een id is. Iedere value zet je op 0. Na het posten van het formulier doorloop je alle checkboxes die geset zijn (die geven dus een id terug), en dat id gebruik je om de array die in de sessie staat te updaten. Je hebt dan dus een array met id's die nulletjes (afwezig) en eentjes (aanwezig) bevatten. Die array kun je dan gebruiken om de database te updaten.
Ik ben reeds geswitched naar de radio buttons en geen seconde spijt van.
Nu wil ik een extra feature implementeren, namelijk het tellen van de kinderen in groep X die aanwezig zijn.
Ik had dit opgesteld, maar het levert niets op. Let niet op de code voor en achteraan, hier staat nog tekst normaliter.
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$tellen = mysqli_query($conn,"SELECT Maandag, SUM( Maandag = 'Afwezig' ) AS `Present` FROM Aanwezigheid WHERE `Groep` = 'A'");
?>
<table width="325">
<tr><td colspan="2">Aantal aangemelde kinderen:</td><td><?php echo "$tellen"; ?></td></tr></table>
$tellen = mysqli_query($conn,"SELECT Maandag, SUM( Maandag = 'Afwezig' ) AS `Present` FROM Aanwezigheid WHERE `Groep` = 'A'");
?>
<table width="325">
<tr><td colspan="2">Aantal aangemelde kinderen:</td><td><?php echo "$tellen"; ?></td></tr></table>
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
SELECT
COUNT(Maandag) AS `Present`
FROM
Aanwezigheid
WHERE
`Groep` = 'A' AND
`Maandag` = 'Afwezig'
COUNT(Maandag) AS `Present`
FROM
Aanwezigheid
WHERE
`Groep` = 'A' AND
`Maandag` = 'Afwezig'
Alleen nu haal je alle afwezige mensen op volgens mij?
Het voert enkel een opdracht uit naar MySQL/MariaDB.
De functie geeft normaal een resource die je verder kan gebruiken met bijv. mysqli_num_rows of mysqli_fetch_* functies.
Lees anders eens een MySQLi-tutorial.
Gewijzigd op 10/08/2017 07:16:33 door - Ariën -