Data opvragen en bewerken in PHP
Pagina: « vorige 1 2 3 4 5 6 7 volgende »
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.
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
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
<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>
<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.
Gewijzigd op 07/08/2017 16:21:52 door - Ariën -
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.
Gewijzigd op 07/08/2017 16:29:18 door - Ariën -
<input type="hidden" name="present['.$i.']" ...
<input type="checkbox" name="present['.$i.']" ...
Ze hebben dezelfde name=".." en hetzelfde id=".."
Gewijzigd op 07/08/2017 16:36:16 door - SanThe -
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?
@-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;
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
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
<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>
<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;
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?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";
?>
//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";
?>
Gewijzigd op 07/08/2017 18:39:57 door Thomas Bakker
$_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.
$_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.
En $_POST['id'] bestaat niet.
Ik zou zeggen:
Voer dit eens uit na je POST-request:
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.
Gewijzigd op 07/08/2017 23:33:39 door - Ariën -
Dit ziet er naar mijn gevoel logisch uit..
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.
Edit: het gaat ergens in de Query mis, snap alleen niet waar.
Gewijzigd op 07/08/2017 23:45:05 door Thomas Bakker
Je string $result echo'en helpt ook.
Gewijzigd op 07/08/2017 23:59:40 door - Ariën -
Als ik mijn $result echo krijg ik deze, dus bij het ID gaat iets mis..
Edit: de Mysqli error geeft geen resultaat.
Gewijzigd op 08/08/2017 00:02:43 door Thomas Bakker
Zo niet, dan vraag ik me toch af of je niet beter bij een tutorial kan beginnen.
Ik heb net de oplossing gepost, dus nu moet je toch wel de ID kunnen pakken uit je POST-request. Vergeet hem niet te escapen met mysqli_real_escape_string voordat iemand je hackt.
Gewijzigd op 08/08/2017 00:16:57 door - Ariën -
Vervolgens wordt door middel van de result query de aanwezigheid (0 of 1) gepost daar waar het id overeenkomt met de query waarmee ik de data heb opgevraagd?
En om de absentie bij de juiste persoon te zetten moet je het ID weten, en die staat in de POST-array, omdat die in je checkbox staat.
In de array staat de key tussen blokhaken en daarachter staat de value "present". Het met aanroepen van de variabele alleen kan je normaal alleen de waarde oproepen, maar als je de key wilt oproepen gebruik je dus key().
Gewijzigd op 08/08/2017 00:26:20 door - Ariën -
Ik heb in de checkbox.php, want daar ligt de fout, nu het volgende gedaan;
- Ik heb de ID een variabele gegeven
- Ik heb de query aangepast zodat deze variabele wordt opgevraagd
Als ik de check weer run, blijft hij 'WHERE id=""' geven.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
//Alle variabelen instellen
$servername = "nee";
$username = "ja";
$password = "nee;
$dbname = "ja";
//Verbinden met de database
$conn = mysqli_connect($servername, $username, $password, $dbname);
$id = key($_POST['Aanwezig_'][1]);
//Query opstellen door middel van variabele
$result = "UPDATE Aanwezigheid SET Maandag='$_POST[Aanwezig]' WHERE id='$id'";
//Query draaien
if(mysqli_query($conn,$result))
echo "$result";
else
echo "Not updated";
?>
//Alle variabelen instellen
$servername = "nee";
$username = "ja";
$password = "nee;
$dbname = "ja";
//Verbinden met de database
$conn = mysqli_connect($servername, $username, $password, $dbname);
$id = key($_POST['Aanwezig_'][1]);
//Query opstellen door middel van variabele
$result = "UPDATE Aanwezigheid SET Maandag='$_POST[Aanwezig]' WHERE id='$id'";
//Query draaien
if(mysqli_query($conn,$result))
echo "$result";
else
echo "Not updated";
?>
Los daarvan heb ik het idee dat je POST niet mee wordt gestuurd? Wat meldt de genoemde print_r en houd die er eens bij als leidraad.
Enne:
- $_POST[Aanwezig] bevat een array, waar je niks mee kan in een query
- Gebruik quotes tussen je blokhaken bij strings
- Zorg voor escaping met mysqli_real_escape_string($conn,.....)
Gewijzigd op 08/08/2017 00:56:10 door - Ariën -