Data opvragen en bewerken in PHP
Pagina: « vorige 1 2 3 4 5 6 7 volgende »
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:
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
Ook dit kun je weer met eenzelfde loop verwerken.
Dit id kun je weer koppelen aan een input field:
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
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):
Of
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.
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?
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:
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]?
Toevoeging op 05/08/2017 13:30:33:
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?
Peter K op 03/08/2017 07:42:54:
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]?
Toevoeging op 05/08/2017 13:30:33:
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?
Quote:
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?
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.
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.
Gewijzigd op 07/08/2017 07:02:19 door Peter K
Begrijp ik het 'erbuiten' halen niet helemaal?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<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>
<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>
Je overschrijft steeds je hidden-field. Als je Thomas v/d Heuvel zijn post nog eens leest, dan zie je dat je de unieke nummers/namen tussen blokhaken in de name kan zetten.
Als ik het goed begrijp zal ik dan mijn script moeten wijzigen zodat ik een foreach krijg?
Of kan ik binnen mijn while ook een loop toepassen?
En waarom gebruik je geen radio-buttons zoals eerder geopperd is? Dan wordt er altijd een waarde meegestuurd.
Het formulier voor aanwezigheid ziet er dan bijvoorbeeld als volgt uit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<form action="..." method="post">
<p>
<input type="checkbox" name="present[1]" id="present_1" value="1">
<label for="present_1">Henk</label>
</p>
<p>
<input type="checkbox" name="present[2]" id="present_2" value="1">
<label for="present_2">Piet</label>
</p>
<p>
<input type="checkbox" name="present[3]" id="present_3" value="1">
<label for="present_3">Klaas</label>
</p>
<p>
<button type="submit">opslaan</button>
</p>
</form>
<p>
<input type="checkbox" name="present[1]" id="present_1" value="1">
<label for="present_1">Henk</label>
</p>
<p>
<input type="checkbox" name="present[2]" id="present_2" value="1">
<label for="present_2">Piet</label>
</p>
<p>
<input type="checkbox" name="present[3]" id="present_3" value="1">
<label for="present_3">Klaas</label>
</p>
<p>
<button type="submit">opslaan</button>
</p>
</form>
$_POST bevat vervolgens enkel die namen die aangevinkt zijn.
Als het handiger is om alle namen te POSTen kun je op een soortgelijke wijze radio-buttons gebruiken, bijvoorbeeld als volgt (voor Piet):
Code (php)
1
2
3
4
2
3
4
<p>
<input type="radio" name="present[2]" id="present_2_1" value="1"><label for="present_2_1">aanwezig</label>
<input type="radio" name="present[2]" id="present_2_0" value="0"><label for="present_2_0">afwezig</label>
</p>
<input type="radio" name="present[2]" id="present_2_1" value="1"><label for="present_2_1">aanwezig</label>
<input type="radio" name="present[2]" id="present_2_0" value="0"><label for="present_2_0">afwezig</label>
</p>
Hierbij kun je er ook voor kiezen om standaard "afwezig" te selecteren.
Thomas Bakker op 05/08/2017 13:02:19:
Dat is dus hetgeen wat ik vroeg.
Ik moet dus voor iedereen, dus alle 650, apart optie maken met de juiste id's?
Thomas van den Heuvel op 04/08/2017 14:44:59:
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]?
Peter K op 03/08/2017 07:42:54:
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]?
Dat is dus hetgeen wat ik vroeg.
Ik moet dus voor iedereen, dus alle 650, apart optie maken met de juiste id's?
Gewijzigd op 07/08/2017 14:42:51 door Thomas Bakker
Je moet je database wel een beetje structureren uiteraard, alleen dan kun je daar ook echt van profiteren. In de tabel met namen zul je dus ook aan moeten geven tot welke groep deze personen behoren. En de groepen identificeer je bij voorkeur ook met een (intern) uniek nummer.
Databases vormen het fundament van applicaties. Als het fundament niet goed is dan wordt het lastig om hier iets moois bovenop te bouwen.
Vreemd dat PHP zoiets niet ondersteund.. En pagination wil ik juist niet aan beginnen, er worden maximaal 100 kinderen in 1 keer getoond afhankelijk van de query die ik per groep opstel. De grootste groep is 100 en ik wil dus juist alles in 1 keer kunnen aanvinken..
Mocht dat het enige antwoord zijn om 650 opties te maken, dan begin ik daar niet aan en dan is helaas al mijn en jullie moeite voor niets geweest..
Aanmelddatum, Geslacht, Klas/Groep, Presentie.
Verder kan je prima in PHP en loop draaien met alle namen en radiobuttons voor de presentie. Als ze maar per groep dezelfde name met het ID-nummer hebben.
Gewijzigd op 07/08/2017 14:55:11 door - Ariën -
- Ariën - op 07/08/2017 14:53:21:
Het mooiste is als je op je lijst een filter kan toepassen, zoals bijvoorbeeld:
Aanmelddatum, Geslacht, Klas/Groep, Presentie.
Verder kan je prima in PHP en loop drasien met alle namen en radiobuttons voor de presentie. Als ze maar per groep dezelfde name met het ID-nummer hebben.
Aanmelddatum, Geslacht, Klas/Groep, Presentie.
Verder kan je prima in PHP en loop drasien met alle namen en radiobuttons voor de presentie. Als ze maar per groep dezelfde name met het ID-nummer hebben.
Doe ik dit niet al d.m.v. een query?