$ waarden niet naar database
in de database te krijgen, er komt altijd 0 in te staan.
de andere waarden komen er wel correct in te staan.
wie kan mij hiermee helpen?
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
<?php
$errorMessages = [];
// Haal de waarde van de query parameter op
$coupon_code = $_POST['coupon_code'] ?? '';
if ($coupon_code) {
$currentDate = date('Y-m-d');
$query_coupon = "SELECT discount, status, date_start, date_end FROM oc_coupon WHERE code = '$coupon_code'";
$result_coupon = mysqli_query($link, $query_coupon);
if ($result_coupon === false) {
die("Query faalde: " . mysqli_error($link));
}
if (mysqli_num_rows($result_coupon) > 0) {
$row_coupon = mysqli_fetch_assoc($result_coupon);
$korting = $row_coupon['discount'];
$status = $row_coupon['status'];
$date_start = $row_coupon['date_start'];
$date_end = $row_coupon['date_end'];
if ($status != 1) {
$errorMessages[] = "De kortingscode is niet actief.";
}
if ($currentDate < $date_start) {
$errorMessages[] = "De kortingscode is nog niet geldig.";
}
if ($currentDate > $date_end) {
$errorMessages[] = "De kortingscode is verlopen.";
}
} else {
$errorMessages[] = "De kortingscode bestaat niet.";
}
}
if (empty($errorMessages)) {
// Haal totaal_bedrag op uit de bestellingen tabel
$query_bestelling = "SELECT totaal_bedrag FROM bestellingen WHERE order_id = $order_id";
$result_bestelling = mysqli_query($link, $query_bestelling);
if ($result_bestelling && mysqli_num_rows($result_bestelling) > 0) {
$row_bestelling = mysqli_fetch_assoc($result_bestelling);
$totaal_bedrag = $row_bestelling['totaal_bedrag'];
// Bereken het totaal met korting
$totaal_met_korting = $totaal_bedrag - ($totaal_bedrag * ($korting / 100));
// Update query om de waarden op te slaan in de database
$updateQuery = "UPDATE bestellingen SET kortings_code = '$coupon_code', korting_percentage = $korting, totaal_bedrag = $totaal_bedrag, totaal_met_korting = $totaal_met_korting WHERE order_id = $order_id";
if (mysqli_query($link, $updateQuery)) {
echo "<p class='success-message'>Bijgewerkt in de database.</p>";
} else {
echo "<p class='error-message'>" . mysqli_error($link) . "</p>";
}
}
} else {
foreach ($errorMessages as $message) {
echo "<p class='error-message'>$message</p>";
}
}
mysqli_close($link);
?>
<form action="" method="POST">
<div class="form-group">
<label for="coupon_code">Voer een kortingscode in:</label>
<input type="text" name="coupon_code" id="coupon_code" class="form-control" required>
</div>
<div class="form-actions">
<button type="submit" name="submit" class="btn btn-primary">Controleer Kortingscode</button>
</div>
</form>
<?php if ($coupon_code): ?>
<div class="result">
<?php if (empty($errorMessages)): ?>
<p class="success-message">super! je krijgt <?php echo htmlspecialchars($korting); ?>% korting</p>
<?php else: ?>
<?php foreach ($errorMessages as $message): ?>
<p class="error-message"><?php echo htmlspecialchars($message); ?></p>
<?php endforeach; ?>
<?php endif; ?>
</div>
<?php endif; ?>
</td>
</tr>
<tr>
<th>Totaal: </th>
<td>
<?php
// Bereken het bedrag inclusief korting
$totaal_bedrag = $totaal - ($totaal * ($korting / 100));
// Gebruik number_format om het resultaat te formatteren
$totaal_met_korting = number_format($totaal_bedrag, 2, ',', '');
// Output
echo "<p>Sub totaal: € " . number_format($totaal, 2, ',', '') . "</p>";
echo "<p>Korting: -$korting%</p>";
echo "<p>Totaal te betalen: € $totaal_met_korting</p>";
// Sluit de verbinding
mysqli_close($link);
?>
$errorMessages = [];
// Haal de waarde van de query parameter op
$coupon_code = $_POST['coupon_code'] ?? '';
if ($coupon_code) {
$currentDate = date('Y-m-d');
$query_coupon = "SELECT discount, status, date_start, date_end FROM oc_coupon WHERE code = '$coupon_code'";
$result_coupon = mysqli_query($link, $query_coupon);
if ($result_coupon === false) {
die("Query faalde: " . mysqli_error($link));
}
if (mysqli_num_rows($result_coupon) > 0) {
$row_coupon = mysqli_fetch_assoc($result_coupon);
$korting = $row_coupon['discount'];
$status = $row_coupon['status'];
$date_start = $row_coupon['date_start'];
$date_end = $row_coupon['date_end'];
if ($status != 1) {
$errorMessages[] = "De kortingscode is niet actief.";
}
if ($currentDate < $date_start) {
$errorMessages[] = "De kortingscode is nog niet geldig.";
}
if ($currentDate > $date_end) {
$errorMessages[] = "De kortingscode is verlopen.";
}
} else {
$errorMessages[] = "De kortingscode bestaat niet.";
}
}
if (empty($errorMessages)) {
// Haal totaal_bedrag op uit de bestellingen tabel
$query_bestelling = "SELECT totaal_bedrag FROM bestellingen WHERE order_id = $order_id";
$result_bestelling = mysqli_query($link, $query_bestelling);
if ($result_bestelling && mysqli_num_rows($result_bestelling) > 0) {
$row_bestelling = mysqli_fetch_assoc($result_bestelling);
$totaal_bedrag = $row_bestelling['totaal_bedrag'];
// Bereken het totaal met korting
$totaal_met_korting = $totaal_bedrag - ($totaal_bedrag * ($korting / 100));
// Update query om de waarden op te slaan in de database
$updateQuery = "UPDATE bestellingen SET kortings_code = '$coupon_code', korting_percentage = $korting, totaal_bedrag = $totaal_bedrag, totaal_met_korting = $totaal_met_korting WHERE order_id = $order_id";
if (mysqli_query($link, $updateQuery)) {
echo "<p class='success-message'>Bijgewerkt in de database.</p>";
} else {
echo "<p class='error-message'>" . mysqli_error($link) . "</p>";
}
}
} else {
foreach ($errorMessages as $message) {
echo "<p class='error-message'>$message</p>";
}
}
mysqli_close($link);
?>
<form action="" method="POST">
<div class="form-group">
<label for="coupon_code">Voer een kortingscode in:</label>
<input type="text" name="coupon_code" id="coupon_code" class="form-control" required>
</div>
<div class="form-actions">
<button type="submit" name="submit" class="btn btn-primary">Controleer Kortingscode</button>
</div>
</form>
<?php if ($coupon_code): ?>
<div class="result">
<?php if (empty($errorMessages)): ?>
<p class="success-message">super! je krijgt <?php echo htmlspecialchars($korting); ?>% korting</p>
<?php else: ?>
<?php foreach ($errorMessages as $message): ?>
<p class="error-message"><?php echo htmlspecialchars($message); ?></p>
<?php endforeach; ?>
<?php endif; ?>
</div>
<?php endif; ?>
</td>
</tr>
<tr>
<th>Totaal: </th>
<td>
<?php
// Bereken het bedrag inclusief korting
$totaal_bedrag = $totaal - ($totaal * ($korting / 100));
// Gebruik number_format om het resultaat te formatteren
$totaal_met_korting = number_format($totaal_bedrag, 2, ',', '');
// Output
echo "<p>Sub totaal: € " . number_format($totaal, 2, ',', '') . "</p>";
echo "<p>Korting: -$korting%</p>";
echo "<p>Totaal te betalen: € $totaal_met_korting</p>";
// Sluit de verbinding
mysqli_close($link);
?>
Wat meldt een echo op $updateQuery?
terug!
Dat is gek, want die variabele $updateQuery bevat de query, en niet die tekst.
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
// Berekening van het totaal inclusief korting
$totaal_incl_korting = $subtotaal - ($subtotaal * ($korting / 100));
// Controleer of het resultaat een geldig getal is
if (is_numeric($totaal_incl_korting)) {
// Ronde het bedrag af op 2 decimalen (indien nodig)
$totaal_incl_korting = round($totaal_incl_korting, 2);
// Update query om de waarden op te slaan in de database
$updateQuery = "UPDATE bestellingen SET totaal_met_korting = $totaal_incl_korting WHERE order_id = $order_id";
if (mysqli_query($link, $updateQuery)) {
echo "<p class='success-message'>De gegevens zijn succesvol bijgewerkt.</p>";
} else {
echo "<p class='error-message'>Er is een fout opgetreden: " . mysqli_error($link) . "</p>";
}
} else {
echo "<p class='error-message'>Ongeldige totaalprijs berekend. Controleer de invoerwaarden.</p>";
}
// Sluit de verbinding
mysqli_close($link);
?>
// Berekening van het totaal inclusief korting
$totaal_incl_korting = $subtotaal - ($subtotaal * ($korting / 100));
// Controleer of het resultaat een geldig getal is
if (is_numeric($totaal_incl_korting)) {
// Ronde het bedrag af op 2 decimalen (indien nodig)
$totaal_incl_korting = round($totaal_incl_korting, 2);
// Update query om de waarden op te slaan in de database
$updateQuery = "UPDATE bestellingen SET totaal_met_korting = $totaal_incl_korting WHERE order_id = $order_id";
if (mysqli_query($link, $updateQuery)) {
echo "<p class='success-message'>De gegevens zijn succesvol bijgewerkt.</p>";
} else {
echo "<p class='error-message'>Er is een fout opgetreden: " . mysqli_error($link) . "</p>";
}
} else {
echo "<p class='error-message'>Ongeldige totaalprijs berekend. Controleer de invoerwaarden.</p>";
}
// Sluit de verbinding
mysqli_close($link);
?>
krijg ik enkel: er is een fout opgetreden.
verder geen idee wat er juist fout gaat
Toevoeging op 31/07/2024 15:45:34:
?> = 0
-----------------------------------
= 540
-----------------------------------
Code (php)
1
2
3
4
2
3
4
<?php
$updateQuery = "UPDATE bestellingen SET totaal_met_korting = $totaal_incl_korting WHERE order_id = $order_id";
echo "Query is: ".$updateQuery;
?>
$updateQuery = "UPDATE bestellingen SET totaal_met_korting = $totaal_incl_korting WHERE order_id = $order_id";
echo "Query is: ".$updateQuery;
?>
Dit moet de querie echo'en en in beeld brengen.
Code (php)
1
2
3
4
2
3
4
<?php
$updateQuery = "UPDATE bestellingen SET totaal_met_korting = $totaal_incl_korting WHERE order_id = $order_id";
echo "Query is: ".$updateQuery;
?>
$updateQuery = "UPDATE bestellingen SET totaal_met_korting = $totaal_incl_korting WHERE order_id = $order_id";
echo "Query is: ".$updateQuery;
?>
geeft de volgende resultaat:
Query is: UPDATE bestellingen SET totaal_met_korting = 540,00 WHERE order_id = 55
En welke error message zie je precies vanuit MySQL zelf?
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'WHERE order_id = 55' at line 1
totaal_met_korting = $totaal_met_korting = geen SQL error
totaal_met_korting = $totaal_incl_korting = wel error
totaal_incl_korting = $totaal_incl_korting = wel error
ik heb beide versies in de database staan
dus: totaal_met_korting en totaal_incl_korting
Christiaan Pot op 31/07/2024 19:47:17:
Query is: UPDATE bestellingen SET totaal_met_korting = 540,00 WHERE order_id = 55
Die string 540,00 met een komma moet de float 540.00 met een punt of de integer 540 zijn.
want met $totaal_met_korting = str_replace(',', '.', $totaal_met_korting); lukt het niet.
Zet in elk geval strict typing aan, want dat geeft robuustere PHP-code:
Als je nu opnieuw een fout maakt met datatypen, wordt die meteen afgestraft met een foutmelding.
Gewijzigd op 01/08/2024 16:16:09 door Ward van der Put
Deze manier:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$updateQuery = "UPDATE bestellingen
SET kortings_code = '$coupon_code',
korting_percentage = $korting,
totaal_bedrag = $totaal_bedrag,
totaal_met_korting = $totaal_met_korting
WHERE order_id = $order_id";
?>
$updateQuery = "UPDATE bestellingen
SET kortings_code = '$coupon_code',
korting_percentage = $korting,
totaal_bedrag = $totaal_bedrag,
totaal_met_korting = $totaal_met_korting
WHERE order_id = $order_id";
?>
is niet alleen vatbaar voor SQL-injection, het is ook lastiger te debuggen.
Gebruik in plaats daarvan enkel en alleen nog geparametriseerde queries.
https://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php