$ 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

18/09/2024 02:33:11
 
- 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
 
Ad Fundum

Ad Fundum

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 Ad Fundum
 



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.