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!
Goed, ik ga niet ontkennen dat ik niet zo heel veel snap van wat daar staat.
Zodra ik het invoer zoals het volgens mij moet zijn in mijn bestand (en ja, ik wil liever checkboxen), dan zou ik hierop moeten uitkomen volgens mij.

<html>
<head>
<title>Groep A - Aanwezigheid</title>
</head>
<body>

<?php

	//Alle variabelen instellen
	$servername = "localhost";
	$username = "****";
	$password = "*";
	$dbname = "***";

        //Verbinden met de database
        $conn = mysqli_connect($servername, $username, $password, $dbname);
        
        //Query opstellen door middel van variabele
        $result = mysqli_query($conn,"SELECT * FROM `Aanwezigheid` WHERE `Groep` = 'A'");
        
?>

<a href="GroepA.php"> Registreren aanwezigheid</a><br><a href="GroepATonen.php">Aanwezigheid tonen</a><p>
<form action="Checkbox.php" method="post">

<?php
    
    while($row = mysqli_fetch_array($result))
    {
        $i = $row['id'];
        echo '<p>
              <input type="hidden" name="present['.$i.']" id="present_'.$i.'" value="Afwezig"><input type="checkbox" name="present['.$i.']" id="present_'.$i.'" value="Present">
              <label for="present_'.$i.'">'.$row['Naam'].'</label>
              </p>';

?>

<button type="submit">Opslaan</button>
</form>

</body>
</html>


Maar 't doet het niet.
Kan je wat duidelijker zijn?

Met een "Doet het niet" kunnen we vrij weinig.
Gokje: Er mist een }

Persoonlijk raad ik een radiobutton aan, omdat die makkelijker af te handelen zijn.
Doet het niet..... logisch toch.

<input type="hidden" name="present['.$i.']" ...
<input type="checkbox" name="present['.$i.']" ...

Ze hebben dezelfde name=".." en hetzelfde id=".."
Naast een cursus PHP dan ook meteen een cursus HTML? Sorry, maar dit is elementair spul, waarom ben je hiermee bezig als je geen idee hebt van wat de dingen die je doet betekenen?
@Arien; thanks, had ik niet gezien, inderdaad de oorzaak van de error.
@-SanThe-; heb ik aangepast, ik heb het hidden item weggehaald, had sowieso geen meerwaarde.
@BenvanVelzen; verstand van HTML heb ik zeker. Ik vind dit toch echter heel wat anders dan HTML. PHP en MySQL verschillen nogal t.o.v. HTML. Ik probeer gewoon een test setup te maken voor ik begin aan een cursus zodat ik weet of ik het uberhaupt zal begrijpen. Als het met zoiets simpels als dit al niet wil lukken, lijkt het me geen goed idee.

Hij toont nu inderdaad, zoals SanThe aangaf, alle kinderen met een checkbox. Ik kan ze allemaal aanvinken of uitvinken en opslaan, alleen communiceert hij niet goed met de DB. Althans, er wordt niets geschreven. De kolomnaam waar naartoe geschreven moet worden is Maandag, dan gebeurt via Checkbox.php. In checkbox.php staat dat de gegevens van 'Aanwezig' moeten worden geschreven naar de bijbehorende kolom. Ik vermoed dat daar iets mis gaat aangezien ik geen verdere problemen zie in de code voor groep A.

Code voor GroepA.php;
<html>
<head>
<title>Groep A - Aanwezigheid</title>
</head>
<body>

<?php

	//Alle variabelen instellen
	$servername = "localhost";
	$username = "username";
	$password = "password";
	$dbname = "database";

        //Verbinden met de database
        $conn = mysqli_connect($servername, $username, $password, $dbname);
        
        //Query opstellen door middel van variabele
        $result = mysqli_query($conn,"SELECT * FROM `Aanwezigheid` WHERE `Groep` = 'A'");
        
?>

<a href="GroepA.php"> Registreren aanwezigheid</a><br><a href="GroepATonen.php">Aanwezigheid tonen</a><p>
<form action="Checkbox.php" method="post">

<?php
    
    while($row = mysqli_fetch_array($result))
    {
        $i = $row['id'];
        echo '<p>
              <input type="checkbox" name="Aanwezig_['.$i.']" id="Aanwezig_'.$i.'" value="Present"><label for="Aanwezig_'.$i.'">'.$row['Naam'].'</label></p>';
    }
?>

<button type="submit">Opslaan</button>
</form>

</body>
</html>


Code voor Checkbox.php;

<?php

	//Alle variabelen instellen
	$servername = "localhost";
	$username = "username";
	$password = "password";
	$dbname = "database";

	//Verbinden met de database
	$conn = mysqli_connect($servername, $username, $password, $dbname);
	
	//Query opstellen door middel van variabele
	$result = "UPDATE Aanwezigheid SET Maandag='$_POST[Aanwezig]' WHERE id='$_POST[id]'";

	//Query draaien
	if(mysqli_query($conn,$result))
		header("refresh:1; url=GroepATonen.php");
	else
		echo "Not updated";
?>
$_POST['Aanwezig_'] zal een array() zijn.
$_POST['id'] zal niet bestaan.

Je probeert nu een (ongecontroleerd => dus onveilig) heel array() in een record te stoppen waar het id leeg is.
- SanThe - op 07/08/2017 18:52:01

$_POST['Aanwezig_'] zal een array() zijn.
$_POST['id'] zal niet bestaan.

Je probeert nu een (ongecontroleerd => dus onveilig) heel array() in een record te stoppen waar het id leeg is.


Oke, daar snap ik echt de ballen van.
$_POST['Aanwezig'] bestaat volgens mij ook niet.
En $_POST['id'] bestaat niet.

Ik zou zeggen:
Voer dit eens uit na je POST-request:


<?php
echo "<pre>".print_r($_POST,1)."</pre>";
?>

Dan zie je een schematische weergave van je $_POST array. Dit is dan tevens een handige leidraad over je die de data eruit moet aanroepen.
Ik geloof dat er niet veel mis is..

Array
(
    [Aanwezig_] => Array
        (
            [1] => Present
        )

)


Dit ziet er naar mijn gevoel logisch uit..
$_POST['Aanwezig_'][1]

Maar waarom die underscore eigenlijk?

Waarom een waarde met Present, en niet logisch een 0 (niet present) of een 1 (present).
Programmeertechnisch werkt dit ook makkelijker.

Reageren