$ waarden niet naar database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Christiaan Pot

Christiaan Pot

31/07/2024 04:18:57
Quote Anchor link
het lukt mij niet om de waarden van $totaal_bedrag en $totaal_met_korting
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)
PHP script in nieuw venster Selecteer het PHP script
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
                                <?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);
                                ?>
 
PHP hulp

PHP hulp

21/11/2024 17:58:01
 
- Ariën  -
Beheerder

- Ariën -

31/07/2024 08:32:48
Quote Anchor link
Wat meldt een echo op $updateQuery?
 
Christiaan Pot

Christiaan Pot

31/07/2024 14:14:15
Quote Anchor link
ik krijg netjes : Bijgewerkt in de database.
terug!
 
- Ariën  -
Beheerder

- Ariën -

31/07/2024 15:05:42
Quote Anchor link
Dat is gek, want die variabele $updateQuery bevat de query, en niet die tekst.
 
Christiaan Pot

Christiaan Pot

31/07/2024 15:30:56
Quote Anchor link
wanneer ik dit probeer:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);
?>


krijg ik enkel: er is een fout opgetreden.
verder geen idee wat er juist fout gaat


Toevoeging op 31/07/2024 15:45:34:

?>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $updateQuery ?>
= 0
-----------------------------------
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo  $totaal_incl_korting ?>
= 540
-----------------------------------
 
- Ariën  -
Beheerder

- Ariën -

31/07/2024 16:35:58
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
    $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.
 
Christiaan Pot

Christiaan Pot

31/07/2024 19:47:17
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
    $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
 
- Ariën  -
Beheerder

- Ariën -

31/07/2024 23:40:00
Quote Anchor link
En welke error message zie je precies vanuit MySQL zelf?
 
Christiaan Pot

Christiaan Pot

01/08/2024 04:58:54
Quote Anchor link
op dit moment:

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
 
Ward van der Put
Moderator

Ward van der Put

01/08/2024 07:29:41
Quote Anchor link
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.
 
Christiaan Pot

Christiaan Pot

01/08/2024 15:33:17
Quote Anchor link
kan je me even op weg helpen
want met $totaal_met_korting = str_replace(',', '.', $totaal_met_korting); lukt het niet.
 
Ward van der Put
Moderator

Ward van der Put

01/08/2024 16:15:42
Quote Anchor link
Je kunt beter op zoek gaan naar de oorzaak van het probleem dan er omheen werken: waarom wordt een berekend bedrag ergens een string in plaats van een float?

Zet in elk geval strict typing aan, want dat geeft robuustere PHP-code:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

declare(strict_types=1);

?>


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
 

02/08/2024 09:40:43
Quote Anchor link
Het is een open deur, maar wil je queries niet meer schrijven als (concatenated) strings?
Deze manier:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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"
;
?>

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
Gewijzigd op 02/08/2024 09:42:30 door
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.