UPDATE fout
Ik wil graag een simpele query uitvoeren die een aantal waardes in mijn tabel update. Ik heb de inkomende gegevens gecontroleerd of ze kloppen, dit was het geval, maar hij doet geen update.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$afrekening = $_POST['afrekening'];
/*Uitkomst is óf klant óf administratie*/
$customer = $_POST['idcustomer'];
echo $customer; /*Uitkomst altijd 1 getal*/
$query5 = "UPDATE tbl_kortingen
SET 'afrekening'=".$afrekening."
WHERE id_customer=".$customer;
$putin = mysql_query($query5);
echo "Dingen toegevoegd!";
?>
$afrekening = $_POST['afrekening'];
/*Uitkomst is óf klant óf administratie*/
$customer = $_POST['idcustomer'];
echo $customer; /*Uitkomst altijd 1 getal*/
$query5 = "UPDATE tbl_kortingen
SET 'afrekening'=".$afrekening."
WHERE id_customer=".$customer;
$putin = mysql_query($query5);
echo "Dingen toegevoegd!";
?>
onveilig. Blijkbaar heb je met mijn vorige opmerkingen weinig tot niets gedaan. Verder ontbreekt ook de foutafhandeling, en als dat niet het geval was wist je waarschijnlijk al wat het probleem was.
Door het volgende toe te voegen zou het .e.a. al duidelijker moeten worden:
Je schrijft je queries ngo steeds hartstikke Door het volgende toe te voegen zou het .e.a. al duidelijker moeten worden:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$afrekening = $_POST['afrekening'];
/*Uitkomst is óf klant óf administratie*/
$customer = $_POST['idcustomer'];
echo $customer; /*Uitkomst altijd 1 getal*/
$query5 = "UPDATE tbl_kortingen
SET 'afrekening'=".$afrekening."
WHERE id_customer=".$customer;
$putin = mysql_query($query5);
if($putin) {
echo "Dingen toegevoegd!";
} else {
trigger_error('Fout: ' . mysql_error(), E_USER_ERROR);
}
?>
$afrekening = $_POST['afrekening'];
/*Uitkomst is óf klant óf administratie*/
$customer = $_POST['idcustomer'];
echo $customer; /*Uitkomst altijd 1 getal*/
$query5 = "UPDATE tbl_kortingen
SET 'afrekening'=".$afrekening."
WHERE id_customer=".$customer;
$putin = mysql_query($query5);
if($putin) {
echo "Dingen toegevoegd!";
} else {
trigger_error('Fout: ' . mysql_error(), E_USER_ERROR);
}
?>
Verder is het gevaarlijk om zomaar user input in een query te stoppen, je hebt dan kans op SQL injection. Gebruik mysql_real_escape_string om SQL injection te voorkomen.
Hoe weet je nou of de query is gelukt? Gebruik juiste foutafhandeling, zoals ik hier behandel.
De query ziet er ook niet heel erg goed uit, je moet zoiets krijgen:
Customer is een getal, dus die moet niet tussen quotes en afrekening is een string dus die moet tussen quotes en beveiligd worden met mysql_real_escape_string.
Ook heb je een foutje in de quotes om de veldnamen.
Probeer nu eens een nieuwe scriptje (of alleen query) te maken die ervoor zorgt dat je deze inhoud krijgt als hierboven (echo hiervoor even de query, maar voer hem nog niet uit).
Maar hoe zit het dan met een array?
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
foreach ($korting as $key=>$value){
$query6 = "UPDATE tbl_kortingen
SET bedrag = '".$value."'
WHERE id_customer=".$customer;
?>
foreach ($korting as $key=>$value){
$query6 = "UPDATE tbl_kortingen
SET bedrag = '".$value."'
WHERE id_customer=".$customer;
?>
Waarbij $korting ongeveer 5 variabelen heeft?
Dit is de output van de array:
Array ( [0] => 5 [1] => 2 [2] => 5 [3] => 5 [4] => 10 )
Toevoeging op 31/01/2012 11:26:51:
En als ik de query uitvoer wijzigt hij de records niet in de waardes van de array, maar allemaal in 10.
Volgens het normalisatie principe zou je elke korting in een aparte record op moeten slaan.
maar met een array moet je toch sowieso gebruik maken van een foreach, om door de array te kunnen loopen?
Wat je nu doet is vijf keer exact dezelfde querie uitvoeren, dus vandaar dat ie alleen de laatste waarde van de array pakt.
kleine schets:
| id_customer | titel | bedrag |
waarvan alles al gevuld is, alleen het bedrag moet dus veranderd worden.
Er staan ongeveer 50 records in en het bedrag moet dus aangepast worden waar id_customer = $customer.
$customer is niet leeg, dit heb ik allemaal nagelopen.
Maar $customer komt uit een POST dus die zal maar één waarde hebben zo te zien. In de foreach() zal je $customer dus ook moeten wijzigen.
korting niet.
de hele rij wordt niet in 1 x geupdate, maar per waarde die je hebt geselecteerd,
en dus zou er geen unieke waarde in kunnen komen door de key.
Toevoeging op 01/02/2012 11:12:37:
EDIT: opgelost!
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
$array1 = $korting;
$array2 = $uniqueIDarray;
foreach ($array1 as $key => $values){
$query6 = "UPDATE tbl_kortingen
SET bedrag = '".$values."'
WHERE id_customer='".$customer."'
AND id = '".$array2[$key]."'";
echo $query6;
$update = mysql_query($query6);
}
if($update) {
echo "bedrag toegevoegd!";
} else {
trigger_error('Fout: ' . mysql_error(), E_USER_ERROR);
}
?>
$array1 = $korting;
$array2 = $uniqueIDarray;
foreach ($array1 as $key => $values){
$query6 = "UPDATE tbl_kortingen
SET bedrag = '".$values."'
WHERE id_customer='".$customer."'
AND id = '".$array2[$key]."'";
echo $query6;
$update = mysql_query($query6);
}
if($update) {
echo "bedrag toegevoegd!";
} else {
trigger_error('Fout: ' . mysql_error(), E_USER_ERROR);
}
?>
Je zegt in eerdere posts dat je per klant wel 50 rijen met kortingen kan hebben, met verschillende bedragen. Als je die rijen dan afzonderlijk wilt updaten zal je in je tabel een unieke kolom moeten hebben danwel een combinatie van 2 kolommen die uniek is.
ik zat zelf ook verkeerd te denken.
Ik heb in mijn tabel een record met een uniek ID per rij.
Die heb ik dus nu ook gebruikt, en het werkt.
Je doet nu in wezen hetzelfde als ik, alleen gebruik jij 2 verschillende arrays, terwijl ik de ID als key gebruik.