Hoe kan ik de elementen van een Associative Array in PHP "posten"?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Steve Bonoo

Steve Bonoo

15/10/2023 14:57:41
Quote Anchor link
Beste allemaal,
Wie zou mij kunnen helpen met mijn programma? Ik heb een zoekmachine gebouwd en heb ik hiervoor een associative array gebruikt en dat werkt prima (producten.php). De zoektermen heb ik vastgelegd in $producten["tags"], zie het programma hieronder wat ik heb geschreven.

Echter, wanneer ik "Aantal" invul en op de knop "Koop nu" klik krijg ik deze foutmelding in het bestand "factuur.php": Notice: Undefined variable: product.

Kortom: het lukt mij niet om de varaiabelen c.q. de elementen te posten van producten.php naar factuur.php. Hieronder de codes van beide bestanden.

Groeten,
Steve

producten.php:
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
<?php
$producten
= [
    [

        "naam"         => "Zak appels",
        "prijs"     => 2,
        "tags"         => ["appel", "fruit", "eten", "voedsel"],
        "voorraad"     => 50,
        
    ],
    [

        "naam"         => "Rijst",
        "prijs"     => 1,
        "tags"         => ["diner", "eten", "voedsel"],
        "voorraad"     => 3
    ],
    [

        "naam"         => "Gouden ring",
        "prijs"     => 500,
        "tags"         => ["juweel", "duur"],
        "voorraad"     => 0
    ],
    [

        "naam"         => "Broccoli",
        "prijs"     => 1,
        "tags"         => ["diner", "eten", "voedsel"],
        "voorraad"     => 12
    ]
];

if (isset($_POST["zoekopdracht"])) {
    $filter = $_POST["zoekopdracht"];

    $kandidaat_producten = $producten;
    $producten = [];

    foreach($kandidaat_producten as $product) {
        foreach($product["tags"] as $tag){
            if ($tag == $filter) {
                array_push($producten, $product); // voeg dat ene product $product aan de lijst $producten
                }
            }
        }
}


?>


<!DOCTYPE HTML>
<html lang="nl">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>

<meta charset="utf-8">

<title>Producten</title>

<style type="text/css">    
            section {
                border: 1px solid black;
                width: 400px;
                height: 180px;
                background-color: lightblue;
                margin:25px;
            }
</style>
</head>    

<body style="background-color:lightgreen">
    <section>
        <div>
            <h1>Steve's webshop</h1>
            <form action="producten.php" method="POST">
                <input type="text" name="zoekopdracht">
                <input type="submit" value="search">                
            </form>
        </div>
        <div>
            <p> Koop hier je producten</p>
        </div>
    </section>


    <?php
        foreach($producten as $product) {
            ?>

                <section>
                    <div>
                        <h2>
                            <?php
                                echo $product["naam"];                                    
                            ?>

                        </h2>
                        <small>Voorraad:
                            <?php
                                $voorraad
= $product["voorraad"];
                                
                                if($voorraad == 0) {
                                    echo "leeg";
                                }
elseif ($voorraad <= 10) {
                                    echo "bijna op!";
                                }
else {
                                    echo "genoeg";
                                }

                            ?>

                        </small>
                    </div>
                    <div>
                        <h2>
                            <?php
                                echo $product["prijs"] . " euro";
                            ?>

                        </h2>
                                                
                        <form action="factuur.php " method="post">
                            Aantal <input type="text" name="aantal" size="5">
                                        <?php                                            
                                            if ($product["voorraad"] > 0) {
                                                echo "<button>Koop nu</button>";
                                            }
else {
                                                echo "<button disabled>Niet beschikbaar</button>";
                                            }
                                    
                                        ?>
                                        
                        </form>                         
                    </div>                            
                </section>        
    <?php                    
        }                
    ?>
    
</body>    
</html>




factuur.php:
<!DOCTYPE html>
<html>
<head>
    <title>Factuur</title>
</head>
<body style="background-color:pink">
<h1>FACTUUR</h1>

<?php
$aantal
= $_POST["aantal"];

if (($product["naam"] == "Zak appels")) {        
            echo "Zak appels!";
            $tebetalen = $aantal * 2;
            echo "Te betalen " . $tebetalen;    
        }

        if (($product["naam"] == "Rijst")) {
            echo "Rijst!";
            $tebetalen = $aantal * 1;
            echo "Te betalen " . $tebetalen;    
        }

        if (($product["naam"] == "Broccoli")) {        
            echo "Broccoli!";
            $tebetalen = $aantal * 1;
            echo "Te betalen " . $tebetalen;    
        }

    
?>

    
</body>
</html>


Edit:
Ik heb code-tags geplaatst. Graag deze in het vervolg zelf toevoegen. Zie ook de Veelgestelde Vragen op de site om de opmaakcodes voor het forum te lezen.
Gewijzigd op 15/10/2023 16:29:44 door - Ariën -
 
PHP hulp

PHP hulp

12/12/2024 15:02:39
 
- Ariën  -
Beheerder

- Ariën -

15/10/2023 20:13:41
Quote Anchor link
In je array_push moet je als tweede argument een element gebruiken en geen array.
 

16/10/2023 13:09:33
Quote Anchor link
Normaal gesproken post je die informatie niet (telkens opnieuw), maar bewaar je dat in $_SESSION.

Als je het toch wilt posten is een snelle manier om het hele array in 1 variabele stoppen via utf8_encode(), en achteraf decoderen met utf8_decode().

Als je het toch wilt posten en het op de uitgebreide manier wilt doen, dan moet je voor elke index in de associatieve array een input maken met als name attribuut de index in van die array, met haakjes. Bijvoorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input type="hidden" name="mijn_array[index][tweede_niveau]" value="waarde">

Maar dat is extra werk en ik raad het niet aan om het zo te doen.
 
Steve Bonoo

Steve Bonoo

16/10/2023 16:24:07
Quote Anchor link
Beste Ariën,

Het is mij helaas niet gelukt wat jij had voorgesteld. De functie array_push had ik voor die zoekmachine gebruikt, maar nadat ik enkele aanpassingen deed, zoals je had voorgesteld om als tweede argument een element te gebruiken i.p.v. een array, werkte de zoekmachine niet meer en ook de rest van het programma.

Ad kwam met een voorstel om de global variabele $_SESSION te gebruiken en ga ik mij hierin verdiepen aangezien ik weinig met deze variabele heb gedaan.



Toevoeging op 16/10/2023 16:25:47:

Beste Ad,

Dank voor je reactie. Ik ga met jouw optie aan de slag en hoop ik dat het zal lukken.

Toevoeging op 17/10/2023 09:14:53:

Hallo Ad,

Ik heb het e.e.a. aangepast, zoals je had voorgesteld, met $_SESSION (zie bestanden hieronder). Echter, wanneer ik "aantal" invul voor bijvoorbeeld alleen "Zak appels" dan worden ook de andere producten berekend, terwijl ik geen "aantal" voor die producten heb opgegeven.

En wat ik ook zie is dat wanneer ik bijvoorbeeld "if (($_SESSION['Producten'] = ["Zak appel"])&& (!empty($aantal)))" invul en ik er bijvoorbeeld "if (($_SESSION['Producten'] = ["Zak appelXXXXXXXX"])&& (!empty($aantal)))" van maak het toch "goed" gaat en dat vind ik vreemd. Ik heb bijna van alles geprobeerd, maar het lukt mij niet.

Kortom: wat doe ik niet goed? Of ligt het aan mijn $_SESSION?
VERKOOP.php
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
<?php
// Start the session
session_start();
?>

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>

<meta charset="utf-8">

<title>Producten</title>

<style type="text/css">    
            section {
                border: 1px solid black;
                width: 400px;
                height: 180px;
                background-color: lightblue;
                margin:25px;
            }
</style>
</head>    
<body>

<?php

$producten
= [
    [

        "naam"         => "Zak appels",
        "prijs"     => 2,
        "tags"         => ["appel", "fruit", "eten", "voedsel"],
        "voorraad"     => 50,
        
    ],
    [

        "naam"         => "Rijst",
        "prijs"     => 1,
        "tags"         => ["diner", "eten", "voedsel"],
        "voorraad"     => 3
    ],
    [

        "naam"         => "Broccoli",
        "prijs"     => 1,
        "tags"         => ["diner", "eten", "voedsel"],
        "voorraad"     => 12
    ],
    [

        "naam"         => "Gouden ring",
        "prijs"     => 500,
        "tags"         => ["juweel", "duur"],
        "voorraad"     => 0
    ]
];

?>


<?php
        foreach($producten as $product) {
            ?>

                <section>
                    <div>
                        <h2>
                            <?php
                                echo $product["naam"];                                    
                            ?>

                        </h2>
                        <small>Voorraad:
                            <?php
                                $voorraad
= $product["voorraad"];
                                
                                if($voorraad == 0) {
                                    echo "leeg";
                                }
elseif ($voorraad <= 10) {
                                    echo "bijna op!";
                                }
else {
                                    echo "genoeg";
                                }

                            ?>

                        </small>
                    </div>
                    <div>
                        <h2>
                            <?php
                                echo $product["prijs"] . " euro";
                            ?>

                        </h2>
                                                
                        <form action="verkoop-factuur.php " method="post">
                            Aantal <input type="text" name="aantal" size="5">
                                        <?php                                            
                                            if ($product["voorraad"] > 0) {
                                                echo "<button>Koop nu</button>";
                                            }
else {
                                                echo "<button disabled>Niet beschikbaar</button>";
                                            }
                                    
                                        ?>
                                        
                        </form>                         
                    </div>
                </section>        
    <?php                    
        }                

$_SESSION['Producten'] = $product["naam"];
?>


</body>
</html>


VERKOOP-FACTUUR.php
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
<?php
session_start();
?>


<!DOCTYPE html>
<html>
<head>
    <title>Factuur</title>
</head>
<body style="background-color:pink">
<h1>FACTUUR</h1>

<?php
$aantal
= $_POST["aantal"];

if (($_SESSION['Producten'] = ["Zak appels"])&& (!empty($aantal))) {        
            echo "Zak appels!";
            $tebetalen = $aantal * 2;
            echo " Te betalen " . $tebetalen;    
        }

echo "<br>";
        
if (($_SESSION['Producten'] = ["Rijst"]) && (!empty($aantal))) {        
            echo "Rijst!";
            $tebetalen = $aantal * 1;
            echo " Te betalen " . $tebetalen;    
        }

echo "<br>";

if (($_SESSION['Producten'] = ["Broccoli"]) && (!empty($aantal))){        
            echo "Broccoli!";
            $tebetalen = $aantal * 1;
            echo " Te betalen " . $tebetalen;    
        }

echo "<br>";

if (($_SESSION['Producten'] = ["Gouden ring"]) && (!empty($aantal))){        
            echo "Gouden ring!";
            $tebetalen = $aantal * 1;
            echo " Te betalen " . $tebetalen;    
        }


?>

 
</body>
</html>
 
- SanThe -

- SanThe -

17/10/2023 09:22:14
Quote Anchor link
Steve Bonoo op 16/10/2023 16:24:07:
En wat ik ook zie is dat wanneer ik bijvoorbeeld "if (($_SESSION['Producten'] = ["Zak appel"])&& (!empty($aantal)))" invul en ik er bijvoorbeeld "if (($_SESSION['Producten'] = ["Zak appelXXXXXXXX"])&& (!empty($aantal)))" van maak het toch "goed" gaat en dat vind ik vreemd. Ik heb bijna van alles geprobeerd, maar het lukt mij niet.


In een if() gebruik je dubbel == in plaats van enkel =.
 
Adoptive Solution

Adoptive Solution

17/10/2023 09:22:39
Quote Anchor link
In bestand VERKOOP-FACTUUR.php regels 16, 23, 30 en 37

moet worden $_SESSION['Producten'] == (dubbele == is vergelijken, enkeleis = waarde toekennen)
 
Steve Bonoo

Steve Bonoo

17/10/2023 09:37:18
Quote Anchor link
Beste SanThe en Adoptive Solution,

Allereerst bedankt voor jullie snelle reactie.

Ik ben het met jullie eens dat je bij een if-statement dubbele == moet gebruiken, maar doe ik dat dan krijg ik niets te zien op de pagina en alleen de kop <h1>FACTUUR</h1>.
 
- SanThe -

- SanThe -

17/10/2023 09:52:32
Quote Anchor link
Dan is er blijkbaar niets.
Doe eens een vardump op de variabelen.
 
Steve Bonoo

Steve Bonoo

17/10/2023 10:48:53
Quote Anchor link
Hoi SanThe,

Ik heb een vardump op de volgende variabelen gedaan:

echo var_dump ($aantal);
echo "<br>";
echo var_dump($_SESSION['Producten']);
echo "<br>";
echo var_dump($tebetalen);

Als output kreeg ik:

string(2) "30"
string(11) "Gouden ring"
int(0)

Ik zie dat wanneer ik voor "Zak appels" kies, ik "Gouden ring" zie staan en dit klopt niet. En wanneer ik voor aantal 30 invul ik bij $tebetalen int(0) zie staan en had ik 60 verwacht( 30*2=60). Volgens mij klopt dit ook niet en ik zou niet weten waaraan het ligt.
 
- SanThe -

- SanThe -

17/10/2023 12:46:42
Quote Anchor link
Steve Bonoo op 16/10/2023 16:24:07:
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
<?php
// Start the session
session_start();
....

$producten = [
    [

        "naam"         => "Zak appels",
        "prijs"     => 2,
        "tags"         => ["appel", "fruit", "eten", "voedsel"],
        "voorraad"     => 50,
        
    ],
    [

        "naam"         => "Rijst",
        "prijs"     => 1,
        "tags"         => ["diner", "eten", "voedsel"],
        "voorraad"     => 3
    ],
    [

        "naam"         => "Broccoli",
        "prijs"     => 1,
        "tags"         => ["diner", "eten", "voedsel"],
        "voorraad"     => 12
    ],
    [

        "naam"         => "Gouden ring",
        "prijs"     => 500,
        "tags"         => ["juweel", "duur"],
        "voorraad"     => 0
    ]
];

        foreach($producten as $product) {
            ........        
        }
                

$_SESSION['Producten'] = $product["naam"];
?>


Je vult $_SESSION['Producten'] na de foreach() dus daar zal altijd de laatste ("Gouden ring") in zitten.


Toevoeging op 17/10/2023 14:24:31:

Beetje zitten spelen.

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
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Producten</title>
<style type="text/css">    
            section {
                border: 1px solid black;
                width: 400px;
                height: 180px;
                background-color: lightblue;
                margin:25px;
            }
</style>
</head>    
<body>

<form action="verkoop-factuur.php" method="post">
<?php
include("data.php");
foreach($producten as $key => $product)
{
    ?>

    <section>
        <div>
            <h2><?php echo $product["naam"]; ?></h2>
            <small>Voorraad:
                <?php
                    $voorraad
= $product["voorraad"];
                    if($voorraad == 0) {
                        echo "leeg";
                    }
elseif ($voorraad <= 10) {
                        echo "bijna op!";
                    }
else {
                        echo "genoeg";
                    }

                ?>

            </small>
        </div>
        <div>
            <h2><?php echo $product["prijs"] . " euro"; ?></h2>
            Aantal <input type="number" style="width:50px" name="aantal[<?php echo $key; ?>]" min="0" max="<?php echo $voorraad; ?>" value="0">
                   <input type="hidden" name="naam[<?php echo $key; ?>]" value="<?php echo $product["naam"]; ?>">
            <?php                                            
                if ($product["voorraad"] > 0) {
                    echo '<button type="submit">Koop nu</button>';
                }
else {
                    echo '<button disabled>Niet beschikbaar</button>';
                }
                                    
            ?>
                                        
        </div>
    </section>        
<?php }                
?>

</form>                        
</body>
</html>


verkoop-factuur.php
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
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Factuur</title>
</head>
<body style="background-color:pink">
<h1>FACTUUR</h1>

<?php
include("data.php");

if($_SERVER['REQUEST_METHOD'] == 'POST')
{

    $aantal = $_POST["aantal"];
    $naam = $_POST["naam"];
    $totaal = 0;
    foreach($producten as $key => $product)
    {

        $tebetalen = 0;
        if ($product["naam"] == $naam[$key] && !empty($aantal[$key]))
        {
        
            echo $product["naam"];
            $tebetalen = $aantal[$key] * $product["prijs"];
            echo " Te betalen " . $tebetalen;    
            echo "<br>";
        }

        $totaal += $tebetalen;
    }

    echo "<hr>Totaal " . $totaal;
}

else echo "Er is geen factuur.";
?>

</body>
</html>


data.php
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
<?php
$producten
= [
    [

        "naam"         => "Zak appels",
        "prijs"     => 2,
        "tags"         => ["appel", "fruit", "eten", "voedsel"],
        "voorraad"     => 50,
        
    ],
    [

        "naam"         => "Rijst",
        "prijs"     => 1,
        "tags"         => ["diner", "eten", "voedsel"],
        "voorraad"     => 3
    ],
    [

        "naam"         => "Broccoli",
        "prijs"     => 1,
        "tags"         => ["diner", "eten", "voedsel"],
        "voorraad"     => 12
    ],
    [

        "naam"         => "Gouden ring",
        "prijs"     => 500,
        "tags"         => ["juweel", "duur"],
        "voorraad"     => 0
    ]
];

?>
 
Ozzie PHP

Ozzie PHP

17/10/2023 15:23:12
Quote Anchor link
Geen idee wat je aan het doen bent met die haakjes en blokhaken, maar dit

if (($_SESSION['Producten'] = ["Zak appels"])&& (!empty($aantal))) {

hoort dus zo:

if ($_SESSION['Producten'] === 'Zak appels' && !empty($aantal)) {

Geldt uiteraard ook voor de andere regels.
 
Steve Bonoo

Steve Bonoo

17/10/2023 16:53:10
Quote Anchor link
Beste Ozzie,

Dank je wel voor de correctie. Ik heb het aangepast. Ik krijg nu wel output te zien, maar allen zie ik dat ik niet de juiste output krijg. Kies ik bijvoorbeeld voor een "Zak appels" en "aantal" 10, dan krijg ik als output "Gouden ring" en 10.

SanThe had mij wel laten het volgende laten weten: "Je vult $_SESSION['Producten'] na de foreach() dus daar zal altijd de laatste ("Gouden ring") in zitten." Ik heb toen a.d.h.v. zijn aanvulling dat voor elkaar proberen te krijgen in het bestand verkoop.php dat ik al eerder had gestuurd (zie boven), maar kreeg telkens weer problemen.

Kortom: dat van die $_SESSION["Producten"] = $product["naam"] in het bestand verkoop.php kan ik nog steeds niet oplossen. Ik zie nog steeds niet wat ik fout doe. Help!
 
- SanThe -

- SanThe -

17/10/2023 17:21:00
Quote Anchor link
Bekijk hierboven mijn code eens.
Dat werkt zonder sessie.
Je kan voordat je de button klikt meerdere artikelen een aantal geven.
 
Steve Bonoo

Steve Bonoo

18/10/2023 10:40:51
Quote Anchor link
Hoi Santhe,

Ik heb die codes c.q. bestanden aangepast, zoals je had voorgesteld. Ook heb ik i.p.v. if-statements if-then-else statements gebruikt, maar dat is puur voor de leesbaarheid om bijvoorbeeld een foutmelding op te vangen. Ook voor de leesbaarheid heb ik de bestanden anders genoemd, maar voor de rest zijn de codes min of meer hetzelfde.

Via het bestand "verkoop-zonder-factuur.php" heb ik een include gemaakt naar het bestand "verkoop.php", omdat in dit bestand het associative array is gemaakt en heb ik ook de for-each-loop uit dit bestand verwijderd, omdat deze loop toch wordt afgehandeld in het bestand "verkoop-zonder-factuur.php" en heb ik vervolgens via dit bestand een link gemaakt naar "verkoop-met-factuur.php".

Tot slot wanneer ik het programma uitvoer( met verkoop-zonder-factuur.php) gebeurt er niets en wordt dat opgevangen met het laatste statement (else).

Voor de duidelijkheid hier de drie bestanden.


Toevoeging op 18/10/2023 10:42:07:

verkoop.php
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
<?php
// Start the session
//session_start();

?>

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>

<meta charset="utf-8">

<title>Producten</title>

<style type="text/css">    
            section {
                border: 1px solid black;
                width: 400px;
                height: 180px;
                background-color: lightblue;
                margin:25px;
            }
</style>
</head>    
<body>

<?php


$producten
= [
    [

        "naam"         => "Zak appels",
        "prijs"     => 2,
        "tags"         => ["appel", "fruit", "eten", "voedsel"],
        "voorraad"     => 50,
        
    ],
    [

        "naam"         => "Rijst",
        "prijs"     => 1,
        "tags"         => ["diner", "eten", "voedsel"],
        "voorraad"     => 3
    ],
    [

        "naam"         => "Broccoli",
        "prijs"     => 1,
        "tags"         => ["diner", "eten", "voedsel"],
        "voorraad"     => 12
    ],
    [

        "naam"         => "Gouden ring",
        "prijs"     => 500,
        "tags"         => ["juweel", "duur"],
        "voorraad"     => 0
    ]
];


?>


</body>
</html>


Toevoeging op 18/10/2023 10:43:19:

verkoop-zonder-factuur.php
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
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Producten</title>
<style type="text/css">    
            section {
                border: 1px solid black;
                width: 400px;
                height: 180px;
                background-color: lightblue;
                margin:25px;
            }
</style>
</head>    
<body>

<form action="verkoop-met-factuur.php" method="post">
<?php
//include("data.php");
include("verkoop.php");

foreach($producten as $key => $product)
{
    ?>

    <section>
        <div>
            <h2><?php echo $product["naam"]; ?></h2>
            <small>Voorraad:
                <?php
                    $voorraad
= $product["voorraad"];
                    if($voorraad == 0) {
                        echo "leeg";
                    }
elseif ($voorraad <= 10) {
                        echo "bijna op!";
                    }
else {
                        echo "genoeg";
                    }

                ?>

            </small>
        </div>
        <div>

            <h2><?php echo $product["prijs"] . " euro"; ?></h2>
            Aantal <input type="number" style="width:50px" name="aantal[<?php echo $key; ?>]" min="0" max="<?php echo $voorraad; ?>" value="0">
                   <input type="hidden" name="naam[<?php echo $key; ?>]" value="<?php echo $product["naam"]; ?>">
            <?php                                            
                if ($product["voorraad"] > 0) {
                    echo '<button type="submit">Koop nu</button>';
                }
else {
                    echo '<button disabled>Niet beschikbaar</button>';
                }
                                    
            ?>
                                        
        </div>

    </section>        
<?php }                
?>

</form>                        
</body>
</html>


Toevoeging op 18/10/2023 10:45:12:

Sorry, was vergeten de code-tag te gebruiken.


Toevoeging op 18/10/2023 10:52:27:

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
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Producten</title>
<style type="text/css">    
            section {
                border: 1px solid black;
                width: 400px;
                height: 180px;
                background-color: lightblue;
                margin:25px;
            }
</style>
</head>    
<body>

<form action="verkoop-met-factuur.php" method="post">
<?php
//include("data.php");
include("verkoop.php");

foreach($producten as $key => $product)
{
    ?>

    <section>
        <div>
            <h2><?php echo $product["naam"]; ?></h2>
            <small>Voorraad:
                <?php
                    $voorraad
= $product["voorraad"];
                    if($voorraad == 0) {
                        echo "leeg";
                    }
elseif ($voorraad <= 10) {
                        echo "bijna op!";
                    }
else {
                        echo "genoeg";
                    }

                ?>

            </small>
        </div>
        <div>

            <h2><?php echo $product["prijs"] . " euro"; ?></h2>
            Aantal <input type="number" style="width:50px" name="aantal[<?php echo $key; ?>]" min="0" max="<?php echo $voorraad; ?>" value="0">
                   <input type="hidden" name="naam[<?php echo $key; ?>]" value="<?php echo $product["naam"]; ?>">
            <?php                                            
                if ($product["voorraad"] > 0) {
                    echo '<button type="submit">Koop nu</button>';
                }
else {
                    echo '<button disabled>Niet beschikbaar</button>';
                }
                                    
            ?>
                                        
        </div>

    </section>        
<?php }                
?>

</form>                        
</body>
</html>


Toevoeging op 18/10/2023 10:56:59:

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
<?php
//session_start();
?>


<!DOCTYPE html>
<html>
<head>
    <title>Factuur</title>
</head>
<body style="background-color:pink">
<h1>FACTUUR</h1>

<?php
$aantal
= $_POST["aantal"];
$naam = $_POST["naam"];
//$product["naam"] = $_POST['$product["naam"]'];

if ($naam == 'Zak appels' && !empty($aantal)) {
            echo "Zak appels!";
            $tebetalen = $aantal * 2;
            echo " Te betalen " . $tebetalen;    
        }

    
elseif ($naam == 'Rijst' && !empty($aantal)) {        
            echo "Rijst!";
            $tebetalen = $aantal * 1;
            echo " Te betalen " . $tebetalen;    
        }


elseif ($naam == 'Broccoli' && !empty($aantal)) {        
            echo "Broccoli!";
            $tebetalen = $aantal * 1;
            echo " Te betalen " . $tebetalen;    
        }


elseif ($naam == 'Gouden ring' && !empty($aantal)) {    
            echo "Gouden ring!";
            $tebetalen = $aantal * 1;
            echo " Te betalen " . $tebetalen;    
        }

else {
    echo "Er is iets fout gegaan.";
}



?>

 
</body>
</html>


Toevoeging op 18/10/2023 10:58:18:

Bovenstaande is verkoop-met-factuur.php en daarvoor verkoop-zonder-factuur.php

Toevoeging op 18/10/2023 11:01:55:

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

<?php
// Start the session
//session_start();

?>

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>

<meta charset="utf-8">

<title>Producten</title>

<style type="text/css">    
            section {
                border: 1px solid black;
                width: 400px;
                height: 180px;
                background-color: lightblue;
                margin:25px;
            }
</style>
</head>    
<body>

<?php


$producten
= [
    [

        "naam"         => "Zak appels",
        "prijs"     => 2,
        "tags"         => ["appel", "fruit", "eten", "voedsel"],
        "voorraad"     => 50,
        
    ],
    [

        "naam"         => "Rijst",
        "prijs"     => 1,
        "tags"         => ["diner", "eten", "voedsel"],
        "voorraad"     => 3
    ],
    [

        "naam"         => "Broccoli",
        "prijs"     => 1,
        "tags"         => ["diner", "eten", "voedsel"],
        "voorraad"     => 12
    ],
    [

        "naam"         => "Gouden ring",
        "prijs"     => 500,
        "tags"         => ["juweel", "duur"],
        "voorraad"     => 0
    ]
];


?>


</body>
</html>


Toevoeging op 18/10/2023 11:03:14:

En hierboven verkoop.php.
Excuus voor mijn slordigheid. Ik zit een beetje in de stress!
Gewijzigd op 19/10/2023 19:12:56 door - Ariën -
 
E vH

E vH

18/10/2023 13:12:37
Quote Anchor link
Hi Steve,

Ik ga je op weg helpen.. pas verkoop-met-factuur.php aan met deze code:

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
<?php
//session_start();
?>


<!DOCTYPE html>
<html>
<head>
    <title>Factuur</title>
</head>
<body style="background-color:pink">
<h1>FACTUUR</h1>

<?php


$aantal
= $_POST["aantal"];
$naam = $_POST["naam"];
//$product["naam"] = $_POST['$product["naam"]'];


echo '
Laten we eens debuggen door te kijken wat er in $_POST zit:<br/>
<pre>'
.print_r($_POST,true).'</pre>
Variabele: $naam: '
.$naam.' --> output: Array<br/>
Variabele: $naam: '
.$naam[1].' --> output: rijst<br/>
Variabele: $aantal: '
.$aantal.' --> output: Array<br/>
Variabele: $aantal: '
.$aantal[0].' --> output: 0<br/><br/>';

$array_met_aantallen = array_filter($aantal);

echo '
De volgende array ($array_met_aantallen) bevat alleen artikelen met \'aantallen\' hoger dan 0:<pre>'
.print_r($array_met_aantallen,true).'</pre>
Je weet dus dat ze het volgende willen hebben:<br/>'
;

foreach($array_met_aantallen as $key => $value){
    echo ''.$value.' stuks, van product: '.$naam[$key].'. en ze moeten betalen: &euro; '.($aantal[$key]*2).'<br/>';
}


echo '
Als je een beetje goed kijkt naar dit voorbeeld, dan heb je in de gaten dat onderstaande if/else structuur fout is.<br/>'
;


if ($naam == 'Zak appels' && !empty($aantal)) {
            echo "Zak appels!";
            $tebetalen = $aantal * 2;
            echo " Te betalen " . $tebetalen;    
        }

    
elseif ($naam == 'Rijst' && !empty($aantal)) {        
            echo "Rijst!";
            $tebetalen = $aantal * 1;
            echo " Te betalen " . $tebetalen;    
        }


elseif ($naam == 'Broccoli' && !empty($aantal)) {        
            echo "Broccoli!";
            $tebetalen = $aantal * 1;
            echo " Te betalen " . $tebetalen;    
        }


elseif ($naam == 'Gouden ring' && !empty($aantal)) {    
            echo "Gouden ring!";
            $tebetalen = $aantal * 1;
            echo " Te betalen " . $tebetalen;    
        }

else {
    echo "Er is iets fout gegaan.";
}



?>

 
</body>
</html>
Gewijzigd op 18/10/2023 13:27:45 door E vH
 
Steve Bonoo

Steve Bonoo

18/10/2023 20:50:13
Quote Anchor link
Beste E vH,

Dank je wel voor je hulp, analyse, toelichting en de moeite die je hebt genomen om mij te helpen.

Ik heb het bestand "verkoop-met-factuur.php" aangepast, zoals je dat had voorgesteld met jouw toelichting. Ik heb regel 35, t.w. foreach($array_met_aantallen as $key => $value), vervangen door foreach($aantal as $key => $value) en het werkte. Het is dus nu dit geworden:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
foreach($aantal as $key => $value){            
    echo ''.$value.' stuks, van product: '.$naam[$key].'. en ze moeten betalen: &euro; '.($aantal[$key]*2).'<br/>';        
}


Je hebt mij erg blij gemaakt en nogmaals dank je wel voor je support.

Maar ik ben er nog niet en is het nu een uitdaging voor mij om het totale bedrag te berekenen c.q. te programmeren van de verschillende producten die worden gekocht.

Tot slot nog een vraagje. Waarom *2 bij ($aantal[$key]*2)? Is het omdat een "Zak appels" als eerste in de index is, dus index 0 en de prijs in dit geval 2 euro is?

ps: SanThe ook jou wil ik bedanken voor je support. En ook Ozzie PHP.
 
E vH

E vH

18/10/2023 21:14:20
Quote Anchor link
Mijn advies naar jou toe, zou in dit geval zijn om niet $aantal te gebruiken, maar $array_met_aantallen.

De reden is als volgt:
Stel je hebt 4 producten en van die 4 , is er maar 1 artikel waarbij je een paar stuks besteld en de rest niet.
Dan krijg je dus dit:

0 stuks, van product: Zak appels. en ze moeten betalen: € 0
2 stuks, van product: Rijst. en ze moeten betalen: € 4
0 stuks, van product: Broccoli. en ze moeten betalen: € 0
0 stuks, van product: Gouden ring. en ze moeten betalen: € 0

Dat wil je eigenlijk niet.. het is namelijk niet interessant om te weten wat ze NIET bestellen.
Om die reden kijk dan alleen naar de waarde die hoger is dan 0.


"Waarom *2 bij ($aantal[$key]*2)?"
Ik deed even een simpele rekensom, gezien je if/else structuur met de appels 2 was.. bij $tebetalen.
Uitgaande dat die 2, dus 2 euro is.. is de rekensom: ($aantal[$key]*2)

Wat je nu eigenlijk wilt, is de prijzen uit verkoop.php meezenden in je $_POST.
Dat doe je door in verkoop-zonder-factuur.php een hidden field mee te geven met de prijs.
Bv zoiets:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input type="hidden" name="prijs[<?php echo $key; ?>]" value="<?php echo $product["prijs"]; ?>">

Dan kun je in verkoop-met-factuur.php die $_POST opvangen door een regel te maken iets in de vorm van:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$prijs= $_POST["prijs"];


Met een beetje stoeien, zou je een eind op wegkomen.. en anders hierbij een hint: ($aantal[$key]*$prijs[$key])


en om maar gelijk nog een hint te geven:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
$totaalbedrag = 0;
foreach($aantal as $key => $value){
    echo ''.$value.' stuks, van product: '.$naam[$key].'. en ze moeten betalen: &euro; '.($aantal[$key]*$prijs[$key]).'<br/>';
$totaalbedrag += ($aantal[$key]*$prijs[$key]);
}
echo 'Het totaalbedrag is:  '.$totaalbedrag.'';



overigens: dit is niet de manier om het aan te sturen (een prijs in een hidden input veld meegeven ), deze kan gemanipuleerd worden door de gebruiker, maar het geeft een idee hoe het werkt en moet jou op weg helpen om verder te komen.

Succes met "stoeien", ik denk dat je al een eindje op weg kan met deze info.
ps: ik heb de code in deze post niet getest.. het is even uit de losse pols geschreven.
 
Steve Bonoo

Steve Bonoo

18/10/2023 21:29:47
Quote Anchor link
Whaaaaw ... E Vh,

Nogmaals bedankt voor je support. Om eerlijk te zijn motiveer je mij echt en zal ik zeker gebruikmaken van jouw hints. Ik leer ontzettend veel van je. Ik zal je zeker laten weten, wanneer ik mijn programma heb geschreven (gebouwd) met de input van alle kennis en hints van jou.
 
Steve Bonoo

Steve Bonoo

24/10/2023 22:02:29
Quote Anchor link
Beste E vH,

Met jouw hulp en adviezen is het mij eindelijk gelukt. Ik heb zelf wat aanpassingen gedaan om een mooie output te krijgen, zoals ook de productnaam te laten zien. Bijvoorbeeld: "10 stuks van product: Muis. En ze moeten betalen: € 50.
Het totaal te betalen bedrag is 50 euro".

Echter, zit ik nog met een probleem. Als ik meerdere producten kies dan wordt in de output bij het klikken op het button-knopje "Bereken" alleen dat product weergegeven dat ik aanklik en mis ik de overige producten die ik heb gekozen met een opgegeven aantal. Zou je a.u.b. kunnen kijken wat ik over het hoofd zie? Zie hieronder de twee bestanden, t.w. prijsberekenen.php (dit is het startprogramma) en prijs-factuur.php.

prijsberekenen.php
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
<html>
<head>
    <title>Formulier</title>
</head>
<body style="background-color:lightgreen;">

<?php

$artikelen
= [
            [

                "firstname"        => "John",
                "lastname"       => "Doelaar",
                "middlename"     => "Bray",
                "artikel"        => "Muis",
                "prijs"            => 5,
                "voorraad"         => 50,
            ],
            [

                "firstname"      => "Steve",
                "lastname"      => "Bonoo",
                "middlename"     => "Suniel",
                "artikel"        => "Toetsenbord",
                "prijs"            => 3,
                "voorraad"         => 10
            ],
            [

                "firstname"      => "Carla",
                "lastname"       => "Zonneveld",
                "middlename"     => "Judy",
                "artikel"        => "USB-kabel",
                "prijs"            => 2,
                "voorraad"         => 8
            ],
            [

                "firstname"      => "Hugo",
                "lastname"       => "Kerkraad",
                "middlename"     => "Jos",
                "artikel"        => "Beeldscherm",
                "prijs"            => 25,
                "voorraad"         => 4
            ]
];


foreach ($artikelen as $key => $product) {
?>


<section>
    <div>
    <h2>
        <?php
        echo "Verkoper: " . $product["firstname"] . " " . $product["lastname"];
        ?>

    </h2>                
    </div>
    <div>
        <?php
        echo "<b>Artikel: </b>" . $product["artikel"];
        ?>
        
    </div>
    <div>
        <?php
        echo "Prijs p/st " . $product["prijs"] . " euro";
        ?>
        
    </div>
    <div>
    <form action="prijs-factuur.php" method="post">
    Geef aantal op
    <input type="text" name="aantal[<?php echo $key;?>]" "[<?php echo $product['artikel']?>]" size="5" >
    <input type="hidden" name="prijs[<?php echo $key;?>]" value="<?php echo $product['prijs'];?>" >
            
    <input type="hidden" name="artikelnaam[<?php echo $key;?>]" value="<?php echo $product['artikel'];?>" >
    <!--<input type="hidden" name="artikelnaam[<?php echo $key;?>]" "[<?php echo $product['artikel'];?>]" > -->
    <input type="hidden" name="achternaam[<?php echo $key;?>]" value="<?php echo $product['lastname'];?>" >

    <button>Bereken</button>
    </form>
    </div>
</section>    
<?php
}    
?>


</body>
</html>



prijs-factuur.php
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
<!DOCTYPE html>
<html>
<head>
    <title>Factuur</title>
</head>
<body style="background-color:pink">
<h1>FACTUUR</h1>

<?php
$aantal
= $_POST["aantal"];
$prijs = $_POST["prijs"];
$artikelnaam = $_POST["artikelnaam"];
$artikelnaam = $_POST["artikelnaam"];

$somTotaal = 0;

foreach($aantal as $key => $value){    
    echo ''.$value.' stuks van product: '. $artikelnaam[$key].'. En ze moeten betalen: &euro; '.($aantal[$key]*$prijs[$key]).'<br/>';        
    
$somTotaal = $somTotaal + ($aantal[$key]*$prijs[$key]);                        
}

echo "Het totaal te betalen bedrag is " . $somTotaal . " euro";
        
?>

 
</body>
</html>


Toevoeging op 24/10/2023 22:12:12:

Btw, er zijn regels code die dubbel zijn. Excuus daarvoor. Bijvoorbeeld:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$artikelnaam = $_POST["artikelnaam"];
$artikelnaam = $_POST["artikelnaam"];
 
- SanThe -

- SanThe -

25/10/2023 08:29:59
Quote Anchor link
Steve Bonoo op 24/10/2023 22:02:29:
Echter, zit ik nog met een probleem. Als ik meerdere producten kies dan wordt in de output bij het klikken op het button-knopje "Bereken" alleen dat product weergegeven dat ik aanklik en mis ik de overige producten die ik heb gekozen met een opgegeven aantal.


Je hebt mijn code blijkbaar niet bekeken.
Dit zit daar gewoon ingebouwd.
 
E vH

E vH

25/10/2023 09:13:04
Quote Anchor link
Om in te haken op wat -SanThe- zegt en waar jezelf nu tegen aan loopt, even een simpele uitleg:

Regel 44 in prijsberekenen.php
Daar start je de herhaling, alles daarbinnen ( t/m regel 80 ) wordt herhaalt.

Als je de html bron (uiteindelijk ) had bekeken, had je ook gezien dat je nu meerdere <forms> als output hebt.
Vergelijk nu de eerdere code en zie het verschil, je wilt er volgens mij maar 1 hebben ;-)

Verder ontgaat het mij even aan de logica, wat je nu precies wilt bereiken ( ik zie dat je "verkopers" hebt toegevoegd ).
Is het een kwestie van oefenen en de logica snappen of wil je uiteindelijk iets bouwen wat je daadwerkelijk wilt gebruiken? Daarnaast wees consequenter. Je gebruikt Nederlands en Engels door elkaar heen ( firstname, lastname, prijs, aantal ).
 

Pagina: 1 2 volgende »



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.