Data opvragen en bewerken in PHP
Pagina: « vorige 1 2 3 4 5 6 7 volgende »
$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.
Deze zet hij vervolgens op present, dus dat werkt allemaal gewoon goed..
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 de key en de value in de lus apart oproepen.
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.
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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?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";
}
?>
//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...)
Gewijzigd op 08/08/2017 01:14:20 door Willem vp
@Willem; dit vereist dus dat ik nog de variabelen $id en $aanwezig zal moeten opstellen toch?
Thomas Bakker op 08/08/2017 01:14:22:
@Willem; dit vereist dus dat ik nog de variabelen $id en $aanwezig zal moeten opstellen toch?
Nee, dat doet de foreach voor je.
Hij draait! Conclusie van dit verhaal; ik ga een cursus PHP nemen.. ;)
Bedankt voor de toewijding en mijn excuses als ik moeilijk ben geweest ;)
Thomas Bakker op 08/08/2017 01:17:47:
Ah! Willem en Ariën, jullie zijn fantastisch!
Hij draait! Conclusie van dit verhaal; ik ga een cursus PHP nemen.. ;)
Bedankt voor de toewijding en mijn excuses als ik moeilijk ben geweest ;)
Hij draait! Conclusie van dit verhaal; ik ga een cursus PHP nemen.. ;)
Bedankt voor de toewijding en mijn excuses als ik moeilijk ben geweest ;)
Er zijn een hoop boeken ook, je zult het meeste leren overigens door te doen.
Kwestie van veel doen en je wordt er steeds beter in!
Maar kan je niet beter PDO gebruiken? dat is toch veiliger?
Gewijzigd op 08/08/2017 14:41:06 door nick van der heijden
Wat je query veiliger kan maken is door het gebruik van 'prepared statements'. Maar dat kan bij zowel PDO als MySQLi. Dan hoeft je niet zelf meer alle manipuleerbare waardes (GET, POST, COOKIE, ENV) te escapen.
Het verschil tussen PDO en MySQL is dat PDO meerdere databases ondersteunt, en MySQLi alleen MySQL en MariaDB (wat in feite een fork van MySQL is)
Zie ook: http://php.net/manual/en/mysqli.prepare.php
Gewijzigd op 08/08/2017 15:16:00 door - Ariën -
dus prepare werkt dus bijna het zelfde als mysqli_real_escape_string?
De praktijk is totaal anders, maar de theorie is voor zover ik weet wel gelijk.
ah ja oke :) je kan ook PDO::quote gebruiken dat is wel vergelijkbaar dacht ik
Met de foreach() update je de database. Maar als er een checkbox die reeds aan staat nu uitgevinkt wordt dan wordt die niet mee gePOST en dus ook niet geUPDATE.