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!
Ik sluit me aan bij Arien. Je hebt zelfs een compleet voorbeeld gehad al. Hiermee kun je het vrij makkelijk doen.

Een undefined index betekend dat de variabele die gebruikt wordt nog niet benoemd is.

Zonder meer informatie (welke regel het is) en context is dit voor ons evengoed abrakadabra.
Peter K op 03/08/2017 07:42:54
Zoals Thomas zegt, je kunt je regels het beste identificeren d.m.v. een id.
Dit id kun je weer koppelen aan een input field:

<input type="checkbox" name="aanwezig_1">


Zo kun je een loop maken voor alle id's, waarin je de 1 vervangt door je loop index.

Later haal je dit weer op met
<?php $waarde = $_POST['aanwezig_1']; ?>


Ook dit kun je weer met eenzelfde loop verwerken.


On a sidenote, aan bovenstaande werkwijze kleven wel een aantal nadelen. Zo zul je het id uit de naam moeten peuteren. Daarnaast is het met bovenstaande constructie lastig om door de gebruikers te loopen als je nog andere informatie wenst op te slaan. Houd in gedachten dat niet-gecheckte checkboxen in het geheel niet worden ge-POST.

Een handigere aanpak zou bijvoorbeeld zijn (voor gebruiker met id 5):
<input type="checkbox" name="aanwezig[]" value="5">

Of
<input type="checkbox" name="aanwezig[5]" value="whatever">

Afhankelijk van wat je met de rest van de gegevens van een gebruiker doet (of deze nu aanwezig zijn of niet) en aangenomen dat je gegevens van meerdere gebruikers tegelijkertijd verwerkt.

Je zou ook kunnen overwegen om radiobuttons te gebruiken voor aan- en afwezigheid. Op die manier dwing je af dat er altijd een "ja" of een "nee" wordt ge-POST, in tegenstelling tot een checkbox die alleen doorkomt als deze is aangevinkt.
Ik gebruik mijn situatie voor het updaten van de database.

Je kunt volgens mij jouw manier niet gebruiken hiervoor? Je krijgt namelijk enkel de vakken doorgestuurd die aangevinkt zijn? Dan weet je nog niet hoeveel vakken er zijn?
Hangt er vanaf hoe je je formulier(velden) initialiseert en verwerkt en ook hoe de rest van de gegevens die je opslaat er uitzien. Als je een veld hebt dat altijd ge-POST wordt en tevens een array-opzet gebruikt zou je deze als kapstop kunnen gebruiken om door alle rijen te itereren. Je kunt voor de volledigheid natuurlijk altijd hidden velden gebruiken.
Is het dan niet net zo eenvoudig om van te voren je velden gewoon een uniek nummer mee te geven, en dit op dezelfde manier terug op te bouwen tijdens het verwerken?
Maar als je zo'n veld/waarde dan ook meteen een betekenis geeft (denk user id) dan is dat direct je "mapping".

Plus er is geen garantie dat de samenstelling bij opstellen/tijdens verwerken hetzelfde is. Stel dat die gebaseerd is op gebruikers en er intussen een gebruiker toegevoegd wordt? Kun je beter rechtstreeks de data gebruiken waarmee je gebruikers identificeert niet?
Thomas van den Heuvel op 04/08/2017 14:44:59

[quote="Peter K op 03/08/2017 07:42:54"]

Een handigere aanpak zou bijvoorbeeld zijn (voor gebruiker met id 5):
<input type="checkbox" name="aanwezig[]" value="5">

Of
<input type="checkbox" name="aanwezig[5]" value="whatever">



Betekend dit dan dat ik per rij een waarde in zal moeten vullen?
Dus iedereen een 'id' zal moeten geven? Dus waar nu aanwezig[5] staat, dat zal moeten doen van aanwezig[1] tot en met aanwezig[650]?



[size=xsmall]Toevoeging op 05/08/2017 13:30:33:[/size]

Ik heb het script werkend!
Hij doet wat ik wil, alleen nu moet ik nog per kind 'invoeren' klikken.
Ik wil eigenlijk dat alle wijzigingen die ik op de pagina maak in 1 keer worden doorgevoerd.
Hoe kan ik dat het beste doen?
Ik heb het script werkend!
Hij doet wat ik wil, alleen nu moet ik nog per kind 'invoeren' klikken.
Ik wil eigenlijk dat alle wijzigingen die ik op de pagina maak in 1 keer worden doorgevoerd.
Hoe kan ik dat het beste doen?

Als je alle kinderen uniek kunt identificeren dan kun je 1 form in 1x submitten.
Zo te zien zit dit:


<form action=Checkbox.php method=post>

</form>


in de while loop. Haal dit hier uit, je hebt nu namelijk voor elk kind een eigen formulier.
Zo zul je 1 formulier maken dat je, zoals Thomas zegt, in 1x kunt submitten.
Ik heb dat stuk 'erbuiten' gehaald (voor zover ik weet) maar 't maakt nog geen verandering.
Begrijp ik het 'erbuiten' halen niet helemaal?

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

<?php

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

	//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>

<table>
	<tr>
		<th>Groep</th>
		<th>Naam</th>
		<th>Present</th>
	</tr>
	
	<?php
			echo "<form name='Opslaan' action=Checkbox.php method=post>";
	while($row = mysqli_fetch_array($result))
	{
			echo "<tr><td>{$row['Groep']}</td>";
			echo "<td>{$row['Naam']}</td>";
			echo "<td><input type='hidden' value='Afwezig' name='Aanwezig'><input type='checkbox' name='Aanwezig' value='Present'></td>";
			echo "<input type=hidden name=id value='".$row['id']."'></tr>";
	}
                        echo "<tr><td><input type=submit name='Submit'></td></tr>";
			echo "</form></tr>";
	?>

</table>
</body>
</html>

Reageren