Goedemiddag,

Ik ben retenieuw met PHP en ik heb een vraag.
Het is niet dat ik er niet uit kom, maar meer dat ik niet weet waar ik moet zoeken.

Ik heb een PHP pagina gemaakt die gelinkt is aan een database in MySQL.
De database in MySQL bestaat uit 3 kolommen, namelijk;

- Groep
- Naam
- Aanwezig

Ik heb nu een query opgesteld die, afhankelijk in welke groep je je bevind, iedereen toont in de groep.
Hij toont dus Groep, Naam en Aanwezig die nu nog leeg is.

Ik wil het zo kunnen maken dat de 'leiding' van een groep aanwezigheid kan registreren door middel van een checkbox.
Zodra de checkbox is aangevinkt, krijgt de kolom 'Aanwezig' de waarde 'Present' in de database.
Zo een checkbox wil ik dus voor iedereen aan kunnen vinken.
Zodra iedereen op de lijst is gecontroleerd, moet het resultaat naar de database worden verzonden en opgeslagen.
Zodra ik dan wil zien wie er allemaal zijn, moet hij de lijst tonen met de zojuist aangevinkte checkboxen.

Kolom 1 en kolom 2 moeten dus 'read only' worden en kolom 3 moet 'editable' worden.
Hoe kan ik dit het beste doen? Als het nodig is, wil ik hier wel mijn code plaatsen.
Er hoeft niet een hele code voor mij geschreven te worden, maar ik wil weten hoe ik dit aanpak.

Alvast bedankt!
Het probleem zit in

$id = key($_POST['Aanwezig_'][1]);

key() verwacht een array, maar $_POST['Aanwezig_'][1] is een waarde ('Present' in dit geval).
Haal de [1] weg en het gaat goed.
De print r meldt hetzelfde als toestraks, hij somt gewoon de aangevinkte resultaten op.
Deze zet hij vervolgens op present, dus dat werkt allemaal gewoon goed..

Array
(
    [Aanwezig] => Array
        (
            [1] => Present
            [2] => Present
            [3] => Present
            [4] => Present
            [5] => Present
            [6] => Present
        )

)
@Willem, daar keek ik even overheen.
Het is ook een functie die ik bijna niet vaak gebruik. ;-)

Maar, als je [1] eruit haalt, dan weet hij toch niet welke key hij moet pakken van de 6 in de array?
En let op dat key() alleen de huidige/actieve array-index geeft. Als je ze alle 6 wilt queryen zul je iets met een while-loop moeten doen.
Dan kan je beter een foreach gebruiken om $_POST['Aanwezig'] uit te lezen in een loop, bij de verwerking.
Dan kan je de key en de value in de lus apart oproepen.
> Het is ook een functie die ik bijna niet vaak gebruik. ;-)

Ik moet bekennen dat ik zelfs niet eens wist dat 'ie bestond. ;-)

> Maar, als je [1] eruit haalt, dan weet hij toch niet welke key hij moet pakken van de 6 in de array?

Klopt. Hij zal alleen de eerste pakken, tenzij je de array in een loopje verwerkt. Maar dan zou ik denk ik een heel andere constructie gebruiken:

foreach ($_POST['Aanwezig_'] as $key => $value)

of zo.
Klopt, ik zag pas later dat er al een loopje in de verwerking mistte.
Je moet immers alle items in de array doorlopen, dus een foreach is het beste.
Ben ik heel asociaal als ik jullie vraag waar de betreffende loop zou moeten komen te staan en hoe deze opgesteld moet worden?
In je verwerkingsscript, op Checkbox.php.

Ik zou er zoiets van maken:


<?php
    //Alle variabelen instellen
    $servername = "nee";
    $username = "ja";
    $password = "nee";
    $dbname = "ja";

    //Verbinden met de database
    $conn = mysqli_connect($servername, $username, $password, $dbname);

    foreach ($_POST['Aanwezig_'] as $id => $aanwezig) {
        //Query opstellen door middel van variabele
        $result = "UPDATE Aanwezigheid SET Maandag='$aanwezig' WHERE id='$id'";

        //Query draaien
        if(mysqli_query($conn,$result))
                echo "$result";
        else
                echo "Not updated";
    }
?>

(nou ja, ik zou het niet helemaal zo doen, want op deze manier ben je vatbaar voor SQL-injectie, maar het gaat om het idee...)

Reageren