Schoolopdracht boodschappenlijstje
Met school zijn we op dit moment bezig met het leren van PHP, en daarvoor maken we enkele opdrachten. Nu moesten we een opdracht doen waarbij de gebruiker een boodschappenlijstje kan maken, door verschillende producten toe te voegen en te verwijderen. Eerst wist ik niet goed hoe je dit aan moest pakken, en toen dacht ik dat het met een array wel zou lukken. Dit ging goed totdat ik wilde dat de gebruiker ook zelf dingen kon toevoegen.
Nu is mijn vraag dus, hoe kan ik in mijn code ervoor zorgen dat de gebruiker zelf ook dingen kan toevoegen?
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
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
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
<?php
session_start();
$product = array("Teddyberen","Legodoosjes","Barbiepoppen","Computer spelletjes");
$aantal = array("0","0","0","0");
if ($_SESSION["aantal"] == NULL)
{
$_SESSION["aantal"] = $aantal;
}
if ($_SESSION["product"] == NULL)
{
$_SESSION["product"] = $product;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Untitled</title>
</head>
<body>
<p>
Gaat u ook wel eens naar een speelgoedwinkel om cadeautjes te kopen,
maar komt u er dan thuis achter dat u toch iets bent vergeten?
</br>
Dit kan nu nooit meer gebeuren door dit handige boodschappenlijstje.
</br>
Kies hieronder de producten die u wilt kopen en hoeveel daarvan,
dan wordt er een handig lijstje gemaakt.
</br>
<form action="boodschappen.php" method="POST">
Product:
<select name="product">
<option value="">-----Kies uw product-----</value>
<?php
$product = $_SESSION["product"];
for ($i = 0; $i < count($product); $i++)
{
echo "<option value=$i>$product[$i]</value>";
}
$_SESSION["product"] = $product;
?>
</select>
</br>
Aantal:
<input type="number" name="amount">
</br>
<input type="submit" value="Voeg toe" name="add">
<input type="submit" value="Verwijder" name="sub">
<input type="submit" value="Reset" name="reset">
</form>
Ook kunt u nog een nieuw product toevoegen, als deze nog niet tussen de mogelijkheden stond.
</br>
Dit kan met behulp van onderstaand formulier:
</br></br>
<form action="boodschappen.php" method="POST">
Naam nieuw product:
<input type="text" name="new_product">
</br>
<input type="submit" value="Voeg toe" name="new">
</form>
<?php
if (isset($_POST["product"]) && isset($_POST["amount"]))
{
$keuze = $_POST["product"];
$hoeveelheid = $_POST["amount"];
$aantal = $_SESSION["aantal"];
if (isset($_POST["add"]))
{
$aantal["$keuze"] = $aantal["$keuze"] + $hoeveelheid;
}
if (isset($_POST["sub"]))
{
$aantal["$keuze"] = $aantal["$keuze"] - $hoeveelheid;
if ($aantal["$keuze"] < 0)
{
$aantal["$keuze"] = $aantal["$keuze"] + $hoeveelheid;
echo "<b>Sorry, er moet wel een positief aantal producten op uw lijstje staan.";
echo "</br>";
echo "Uw bewerking wordt ongedaan gemaakt...</b>";
echo "</br></br>";
}
}
$_SESSION["aantal"] = $aantal;
}
if (isset($_POST["reset"]))
{
$aantal = $_SESSION["aantal"];
for ($i = 0; $i < count($aantal); $i++)
{
$aantal["$i"] = $aantal["$i"] - $aantal["$i"];
}
$_SESSION["aantal"] = $aantal;
}
if (isset($_POST["new"]))
{
$new_product = $_POST["new_product"];
$array_new[0] = "$new_product";
$product = $_SESSION["product"];
$product = $product + $array_new;
$_SESSION["product"] = $product;
}
$product = $_SESSION["product"];
for ($i = 0; $i < count($product); $i++)
{
if ($aantal["$i"] != 0)
{
echo $aantal["$i"];
echo "x ";
echo $product["$i"];
echo "</br>";
}
}
$_SESSION["product"] = $product;
?>
</p>
</body>
</html>
session_start();
$product = array("Teddyberen","Legodoosjes","Barbiepoppen","Computer spelletjes");
$aantal = array("0","0","0","0");
if ($_SESSION["aantal"] == NULL)
{
$_SESSION["aantal"] = $aantal;
}
if ($_SESSION["product"] == NULL)
{
$_SESSION["product"] = $product;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Untitled</title>
</head>
<body>
<p>
Gaat u ook wel eens naar een speelgoedwinkel om cadeautjes te kopen,
maar komt u er dan thuis achter dat u toch iets bent vergeten?
</br>
Dit kan nu nooit meer gebeuren door dit handige boodschappenlijstje.
</br>
Kies hieronder de producten die u wilt kopen en hoeveel daarvan,
dan wordt er een handig lijstje gemaakt.
</br>
<form action="boodschappen.php" method="POST">
Product:
<select name="product">
<option value="">-----Kies uw product-----</value>
<?php
$product = $_SESSION["product"];
for ($i = 0; $i < count($product); $i++)
{
echo "<option value=$i>$product[$i]</value>";
}
$_SESSION["product"] = $product;
?>
</select>
</br>
Aantal:
<input type="number" name="amount">
</br>
<input type="submit" value="Voeg toe" name="add">
<input type="submit" value="Verwijder" name="sub">
<input type="submit" value="Reset" name="reset">
</form>
Ook kunt u nog een nieuw product toevoegen, als deze nog niet tussen de mogelijkheden stond.
</br>
Dit kan met behulp van onderstaand formulier:
</br></br>
<form action="boodschappen.php" method="POST">
Naam nieuw product:
<input type="text" name="new_product">
</br>
<input type="submit" value="Voeg toe" name="new">
</form>
<?php
if (isset($_POST["product"]) && isset($_POST["amount"]))
{
$keuze = $_POST["product"];
$hoeveelheid = $_POST["amount"];
$aantal = $_SESSION["aantal"];
if (isset($_POST["add"]))
{
$aantal["$keuze"] = $aantal["$keuze"] + $hoeveelheid;
}
if (isset($_POST["sub"]))
{
$aantal["$keuze"] = $aantal["$keuze"] - $hoeveelheid;
if ($aantal["$keuze"] < 0)
{
$aantal["$keuze"] = $aantal["$keuze"] + $hoeveelheid;
echo "<b>Sorry, er moet wel een positief aantal producten op uw lijstje staan.";
echo "</br>";
echo "Uw bewerking wordt ongedaan gemaakt...</b>";
echo "</br></br>";
}
}
$_SESSION["aantal"] = $aantal;
}
if (isset($_POST["reset"]))
{
$aantal = $_SESSION["aantal"];
for ($i = 0; $i < count($aantal); $i++)
{
$aantal["$i"] = $aantal["$i"] - $aantal["$i"];
}
$_SESSION["aantal"] = $aantal;
}
if (isset($_POST["new"]))
{
$new_product = $_POST["new_product"];
$array_new[0] = "$new_product";
$product = $_SESSION["product"];
$product = $product + $array_new;
$_SESSION["product"] = $product;
}
$product = $_SESSION["product"];
for ($i = 0; $i < count($product); $i++)
{
if ($aantal["$i"] != 0)
{
echo $aantal["$i"];
echo "x ";
echo $product["$i"];
echo "</br>";
}
}
$_SESSION["product"] = $product;
?>
</p>
</body>
</html>
Ik heb zelf al geprobeerd om iets te doen, maar dit werkte niet. Dit is het stukje van "if (isset($_POST["new"]))". Ik weet niet of het nieuwe voorwerp hier goed aan de array wordt toegevoegd, en hij laat het nieuwe voorwerp niet bij de keuzemogelijkheden zien.
Wanneer iemand hier een oplossing voor weet zou ik dat heel fijn vinden.
P.S. We hebben pas net over SESSION's geleerd, dus weet niet zeker of daar misschien de fout in zit.
- Ariën -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 19/06/2017 20:54:22 door - Ariën -
if (isset($_POST["new"]))
{
$_SESSION["product"][] = $_POST["new_product"];
}
?>
Gewijzigd op 19/06/2017 21:58:59 door - SanThe -
Verder zou je beter gevalsonderscheid kunnen maken tussen de verschillende acties:
het toevoegen van een nieuw product (en hoeveelheid),
het wijzigen van de hoeveelheid van een bestaand product,
het verwijderen van een product
Als je ook zorgt dat aantal en product ook echt aan elkaar gekoppeld zijn wordt bovenstaande code waarschijnlijk ook een stuk eenvoudiger.
Ik weet niet precies hoe deze opdracht in elkaar steekt maar het lijkt mij dat deze zou moeten beginnen met een soort van functionele spec, dus wat moet de applicatie precies doen. Indien dit niet duidelijk is zou je hier helderheid over moeten vragen, voordat je code begint te kloppen. En vervolgens vogel je uit hoe je dit zou moeten implementeren.
Ik denk dat je de koppeling product <--> aantal ook al een heel eind kunt sturen door een slimme opbouw van de formulieren m.b.v. wat extra JavaScript, maar misschien valt dat buiten de scope van de opdracht. Maar los daarvan, het geheel is meer dan de som der delen. Je zult moeten nadenken over wat je precies moet bouwen, en hoe je handig gebruik kunt maken van frontend-technieken (HTML, CSS, JavaScript) en hoe dit vervolgens door de backend wordt opgepikt (door PHP). Hierbij zou het ook niet misstaan om een aantal basisprincipes voor de "flow" van de opbouw van een programma hier in mee te nemen. Of wat (meer) formuliervalidatie en het veilig omgaan met "user input". Maar dit vergt waarschijnlijk enige kennis/ervaring/expertise van/met elk van deze onderdelen en de vraag is of dat de opzet was van deze opdracht.
Gewijzigd op 20/06/2017 01:10:14 door Thomas van den Heuvel