Dringende hulp gezocht PHP/SQL!!
Pagina: « vorige 1 2 3 volgende »
En heb je al de missende ) aan het einde toegevoegd?
Hoe start je jouw connectie dan?
Gewijzigd op 29/03/2020 23:02:53 door - Ariën -
Toevoeging op 29/03/2020 23:05:05:
Ik heb de fout gevonden....
'Just a heads-up' voor het geval dát. Want je zou toch echt een error van MySQL zelf moeten zien.
En wat meldt dit dan?
var_dump($connectie); ?
Toevoeging op 29/03/2020 23:07:07:
Het was de connectie, die mistte een 's'...
Hmmm... Connecties? ;-)
Haha ja inderdaad
Fijn dat het nu werkt :P
Inderdaad!! Elk product wordt nu wel los weergegeven, je ziet niet wat de bestelling is, heb je daar iets voor?
je bedoelt dat je het uit de database moet uitlezen?
Ja, elk product wordt nu los in de database toegevoegd, dus je hebt een row voor pita en een row voor broodje kip, je ziet niet dat ze samen horen, hen je daar iets voor?
Maar met welke reden wil je dit van de sessie naar de database overhevelen?
Toevoeging op 30/03/2020 00:10:25:
En daarom moet het dus naar een database
Maar dan zie ik het probleem niet zo van 'bij elkaar horen'?
Alles in de sessie is je winkelwagentje en is van jouw.
ja klopt, maar in de winkelwagen wordt er een binnen een bestelling een aparte row gemaakt voor elk product, en als iemand anders dan bestelt, zie je niet dat ze bij elkaar horen
Gijs Marien op 30/03/2020 00:01:39:
Ja, elk product wordt nu los in de database toegevoegd, dus je hebt een row voor pita en een row voor broodje kip, je ziet niet dat ze samen horen, hen je daar iets voor?
Nou, zoals ik in mijn PM zei:
Quote:
Hoi Gijs,
Allereerst voor de beeldvorming - er is maar één sessie: $_SESSION. Dit is een zogenaamd superglobaal array. Superglobaal wil min of meer zeggen "overal geldig", en dus ook overal te gebruiken. $_SESSION is echter niet zonder meer beschikbaar, je moet expliciet aangeven dat je deze wilt gebruiken door het aanroepen van session_start(). Dit zorgt ervoor dat een nieuwe sessie wordt gestart, of een reeds bestaande (eerder aangemaakte) sessie wordt voortgezet.
Gebruik maken van een sessie is een van de manieren die je in staat stelt informatie tussen pagina-aanroepen te onthouden. Normaal is het zo dat als je van pagina A naar pagina B navigeert dat je op pagina B alweer vergeten bent dat je van pagina A afkomstig was, maar met een sessie kun je dus desgewenst informatie overhevelen van pagina A naar B.
Dan over het wegschrijven van bestellingsinformatie naar de database. Hierbij zul je allereerst moeten nadenken over hoe je dit organiseert in je database. Enerzijds heb je de algemene bestellingsinformatie (contactpersoon en adres), anderzijds heb je de daadwerkelijke bestelling, dit is doorgaans een lijst van producten en een hoeveelheid - deze bepalen tezamen, eventueel na verrekening van kortingen/speciale acties etc, de rekening.
Je zou dit dus ook kunnen onderbrengen in twee tabellen: enerzijds een tabel met algemene orderinformatie, anderzijds de orderregels zelf. Uiteraard moet de orderregeltabel een verwijzing hebben naar de ordertabel zodat op deze manier al deze regels gegroepeerd worden tot één order. Ook zou je de orderregeltabel op zijn beurt naar de producten tabel kunnen laten verwijzen, maar er valt ook iets voor te zeggen om dit niet te doen. Dit om de volgende reden. Stel dat iemand een frietje kapsalon bestelt, en die kost op dit moment 5 euro. Hierbij verwijs je in je orderregel naar dit product. Maar wat nu als dit product komt te vervallen of wanneer de prijs verandert? Dan klopt mogelijk je historie opeens niet meer. En historie kan best handig zijn, om te zien wat mensen in het verleden bestelden / wat de populairste snack was / hoe hoog een gemiddelde bestelling was et cetera. Dus er valt iets voor te zeggen om in de orderregel letterlijk "frietje kapsalon" en "5.00" (5 euro) te zetten. Want dat is de meest accurate weergave voor de bestelling van dat moment - een letterlijke "carbon copy" van informatie van elders, afhankelijk van de op dat moment aanwezige producten en geldende prijzen.
Deze databasestructuur bepaalt vervolgens ook welke queries je moet uitvoeren, en in welke volgorde. Allereerst creeer je een bestelling-record, dit vormt de kapstok voor je bestelregels. Vervolgens ren je met een for(each) loop door je sessie heen en haal je de bijbehorende productomschrijvingen en -prijzen op.
Het ontwerp is ook natuurgetrouw: alles wat er gebeurt: er wordt een bestelling geplaatst en deze valt uiteen in contactinformatie, producten en prijzen valt volledig uit te schrijven in volledig lopende zinnen. Dit kun je bijna letterlijk vertalen naar een ontwerp. En vervolgens moet je zorgen dat de tijdelijke opslag (in de sessie) zich een beetje leent om dit makkelijk in een database te zetten.
Nu kan ik dit wel voor jou doen, maar dit forum probeert je aan te moedigen om zelf dingen te leren. Hier wil ik jou ook best mee helpen, maar ik ga het niet voor je doen, als je begrijpt wat ik bedoel :).
Mogelijk heb je met het bovenstaande verhaal al een beter idee van hoe je dingen zou kunnen structureren. Bij een goede databasestructuur is het programmeerwerk in zekere zin bijzaak, dit volgt haast op een natuurlijke wijze.
Als je nog niet helemaal in de vingers hebt hoe arrays werken (en leren hoe deze dingen in elkaar zitten en hoe je deze kunt gebruiken is heel erg de moeite waard!) dan zou je los van dit project gewoon wat oefeningen kunnen doen met het bouwen van (multi)dimensionale arrays. Dit zijn in wezen "datastructuren" en zijn in zekere zin de tegenhanger in PHP van wat je in je database doet: gestructureerd data opslaan, maar dan dus in een wat tijdelijkere vorm dan in een database.
Mocht je nog vragen hebben: laat het weten, of nog beter, stel ze op het forum. Als men ziet dat je dingen hebt geprobeerd maar even vastloopt dan zul je merken dat mensen best bereid zijn om te helpen, als je maar eerst wat inspanning hebt laten zien :).
-Thomas
Allereerst voor de beeldvorming - er is maar één sessie: $_SESSION. Dit is een zogenaamd superglobaal array. Superglobaal wil min of meer zeggen "overal geldig", en dus ook overal te gebruiken. $_SESSION is echter niet zonder meer beschikbaar, je moet expliciet aangeven dat je deze wilt gebruiken door het aanroepen van session_start(). Dit zorgt ervoor dat een nieuwe sessie wordt gestart, of een reeds bestaande (eerder aangemaakte) sessie wordt voortgezet.
Gebruik maken van een sessie is een van de manieren die je in staat stelt informatie tussen pagina-aanroepen te onthouden. Normaal is het zo dat als je van pagina A naar pagina B navigeert dat je op pagina B alweer vergeten bent dat je van pagina A afkomstig was, maar met een sessie kun je dus desgewenst informatie overhevelen van pagina A naar B.
Dan over het wegschrijven van bestellingsinformatie naar de database. Hierbij zul je allereerst moeten nadenken over hoe je dit organiseert in je database. Enerzijds heb je de algemene bestellingsinformatie (contactpersoon en adres), anderzijds heb je de daadwerkelijke bestelling, dit is doorgaans een lijst van producten en een hoeveelheid - deze bepalen tezamen, eventueel na verrekening van kortingen/speciale acties etc, de rekening.
Je zou dit dus ook kunnen onderbrengen in twee tabellen: enerzijds een tabel met algemene orderinformatie, anderzijds de orderregels zelf. Uiteraard moet de orderregeltabel een verwijzing hebben naar de ordertabel zodat op deze manier al deze regels gegroepeerd worden tot één order. Ook zou je de orderregeltabel op zijn beurt naar de producten tabel kunnen laten verwijzen, maar er valt ook iets voor te zeggen om dit niet te doen. Dit om de volgende reden. Stel dat iemand een frietje kapsalon bestelt, en die kost op dit moment 5 euro. Hierbij verwijs je in je orderregel naar dit product. Maar wat nu als dit product komt te vervallen of wanneer de prijs verandert? Dan klopt mogelijk je historie opeens niet meer. En historie kan best handig zijn, om te zien wat mensen in het verleden bestelden / wat de populairste snack was / hoe hoog een gemiddelde bestelling was et cetera. Dus er valt iets voor te zeggen om in de orderregel letterlijk "frietje kapsalon" en "5.00" (5 euro) te zetten. Want dat is de meest accurate weergave voor de bestelling van dat moment - een letterlijke "carbon copy" van informatie van elders, afhankelijk van de op dat moment aanwezige producten en geldende prijzen.
Deze databasestructuur bepaalt vervolgens ook welke queries je moet uitvoeren, en in welke volgorde. Allereerst creeer je een bestelling-record, dit vormt de kapstok voor je bestelregels. Vervolgens ren je met een for(each) loop door je sessie heen en haal je de bijbehorende productomschrijvingen en -prijzen op.
Het ontwerp is ook natuurgetrouw: alles wat er gebeurt: er wordt een bestelling geplaatst en deze valt uiteen in contactinformatie, producten en prijzen valt volledig uit te schrijven in volledig lopende zinnen. Dit kun je bijna letterlijk vertalen naar een ontwerp. En vervolgens moet je zorgen dat de tijdelijke opslag (in de sessie) zich een beetje leent om dit makkelijk in een database te zetten.
Nu kan ik dit wel voor jou doen, maar dit forum probeert je aan te moedigen om zelf dingen te leren. Hier wil ik jou ook best mee helpen, maar ik ga het niet voor je doen, als je begrijpt wat ik bedoel :).
Mogelijk heb je met het bovenstaande verhaal al een beter idee van hoe je dingen zou kunnen structureren. Bij een goede databasestructuur is het programmeerwerk in zekere zin bijzaak, dit volgt haast op een natuurlijke wijze.
Als je nog niet helemaal in de vingers hebt hoe arrays werken (en leren hoe deze dingen in elkaar zitten en hoe je deze kunt gebruiken is heel erg de moeite waard!) dan zou je los van dit project gewoon wat oefeningen kunnen doen met het bouwen van (multi)dimensionale arrays. Dit zijn in wezen "datastructuren" en zijn in zekere zin de tegenhanger in PHP van wat je in je database doet: gestructureerd data opslaan, maar dan dus in een wat tijdelijkere vorm dan in een database.
Mocht je nog vragen hebben: laat het weten, of nog beter, stel ze op het forum. Als men ziet dat je dingen hebt geprobeerd maar even vastloopt dan zul je merken dat mensen best bereid zijn om te helpen, als je maar eerst wat inspanning hebt laten zien :).
-Thomas
Toevoeging op 30/03/2020 00:21:22:
Hmmm apart halen dus
Gewijzigd op 30/03/2020 00:28:37 door - Ariën -
Toevoeging op 30/03/2020 00:31:42:
Ik zal het eens proberen, zit nu in de knoop met dat de query niet werkt met andere gegevens erbij
Straks krijg ik een broodje kaas, terwijl ik geen kaas lust!
Toevoeging op 30/03/2020 00:36:49:
wat klopt er hier niet aan?
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
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
if(isset($_POST['action']) && ($_POST['action'] =="bestel")){
foreach ($_SESSION["shopping_cart"] as $product){
$methode = mysqli_real_escape_string($connectie, $_POST["methode"]);
$filiaalkeuze = mysqli_real_escape_string($connectie, $_POST["filiaalkeuze"]);
$voornaam = mysqli_real_escape_string($connectie, $_POST["voornaam"]);
$achternaam = mysqli_real_escape_string($connectie, $_POST["achternaam"]);
$telefoonnr = mysqli_real_escape_string($connectie, $_POST["telefoonnr"]);
$email = mysqli_real_escape_string($connectie, $_POST["email"]);
$postcode = mysqli_real_escape_string($connectie, $_POST["postcode"]);
$huisnr = mysqli_real_escape_string($connectie, $_POST["huisnr"]);
$straatnaam = mysqli_real_escape_string($connectie, $_POST["straatnaam"]);
$woonplaats = mysqli_real_escape_string($connectie, $_POST["postcode"]);
$datumtijd = mysqli_real_escape_string($connectie, $_POST["datumtijd"]);
$bestelgegevens = mysqli_real_escape_string($connectie, $_POST["bestelgegevens"]);
$tijdbestelling = now();
$code = mysqli_real_escape_string($connectie, $product["code"]);
$price = mysqli_real_escape_string($connectie, $product["price"]);
$quantity = mysqli_real_escape_string($connectie, $product["quantity"]);
$sql2 ="INSERT INTO bestellingen(code,hoeveelheid,status,methode,filiaal,voornaam,achternaam,email,postcode,huisnr,straatnaam,woonplaats,gewenstetijd,opmerkingen,tijdbestelling,prijs) VALUES ('$code','$quantity','nieuw','$methode','$filiaalkeuze','$voornaam','$achternaam',$email','$postcode','$huisnr','$straatnaam','$woonplaats','$datumtijd','$bestelgegevens','$tijdbestelling','$price')";
$result2 = mysqli_query($connectie, $sql2 );
if($result2 == false) {
mysqli_error($connectie);
}
}
}
?>
if(isset($_POST['action']) && ($_POST['action'] =="bestel")){
foreach ($_SESSION["shopping_cart"] as $product){
$methode = mysqli_real_escape_string($connectie, $_POST["methode"]);
$filiaalkeuze = mysqli_real_escape_string($connectie, $_POST["filiaalkeuze"]);
$voornaam = mysqli_real_escape_string($connectie, $_POST["voornaam"]);
$achternaam = mysqli_real_escape_string($connectie, $_POST["achternaam"]);
$telefoonnr = mysqli_real_escape_string($connectie, $_POST["telefoonnr"]);
$email = mysqli_real_escape_string($connectie, $_POST["email"]);
$postcode = mysqli_real_escape_string($connectie, $_POST["postcode"]);
$huisnr = mysqli_real_escape_string($connectie, $_POST["huisnr"]);
$straatnaam = mysqli_real_escape_string($connectie, $_POST["straatnaam"]);
$woonplaats = mysqli_real_escape_string($connectie, $_POST["postcode"]);
$datumtijd = mysqli_real_escape_string($connectie, $_POST["datumtijd"]);
$bestelgegevens = mysqli_real_escape_string($connectie, $_POST["bestelgegevens"]);
$tijdbestelling = now();
$code = mysqli_real_escape_string($connectie, $product["code"]);
$price = mysqli_real_escape_string($connectie, $product["price"]);
$quantity = mysqli_real_escape_string($connectie, $product["quantity"]);
$sql2 ="INSERT INTO bestellingen(code,hoeveelheid,status,methode,filiaal,voornaam,achternaam,email,postcode,huisnr,straatnaam,woonplaats,gewenstetijd,opmerkingen,tijdbestelling,prijs) VALUES ('$code','$quantity','nieuw','$methode','$filiaalkeuze','$voornaam','$achternaam',$email','$postcode','$huisnr','$straatnaam','$woonplaats','$datumtijd','$bestelgegevens','$tijdbestelling','$price')";
$result2 = mysqli_query($connectie, $sql2 );
if($result2 == false) {
mysqli_error($connectie);
}
}
}
?>
en hier nog het form
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
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
<html><form name="form3" action="" method="post">
<div>
<label>Afhalen/Bezorgen</label>
<input type="radio" name="methode" value="afhalen" checked> Afhalen<br>
<input type="radio" name="methode" value="bezorgen"> Bezorgen<br>
</div>
<div>
<label>Filiaalkeuze</label>
<SELECT NAME='filiaalkeuze'>
<OPTION VALUE='xx' disabled>Kies filiaal:</OPTION>
<?php
require('connecties.php');
$sql = "SELECT * FROM `filialen` WHERE filiaal not like 'Hoofdkantoor'";
$result = mysqli_query($connectie, $sql );
if (mysqli_num_rows($result) > 0) {
// output data of each row
while($row = mysqli_fetch_assoc($result)) {
echo "
<OPTION VALUE='" . $row["filiaal"]. "'>" . $row["filiaal"]. "</OPTION>";
}
} else {
echo "<OPTION VALUE='fout'>fout</OPTION>";
}
?>
</SELECT></div>
<h2>Contactgegevens</h2>
<div>
<label>Voornaam</label>
<input type="text" name="voornaam" maxlength="30" placeholder="Verplicht" autocomplete="given-name" required />
</div>
<div>
<label>Achternaam</label>
<input type="text" name="achternaam" maxlength="30" placeholder="Verplicht" autocomplete="family-name" required />
</div>
<div>
<label>Telefoon</label>
<input type="text" name="telefoonnr" maxlength="30" placeholder="Verplicht" autocomplete="tel" required />
</div>
<div>
<label for="inp_first_name" class="control-label">E-mailadres</label>
<input type="email" name="email" placeholder="Optioneel" autocomplete="email"/>
</div>
<h2>Bezorgadres</h2>
<div>
<label>Postcode</label>
<input type="text" name="postcode" maxlength="6" minlenght="6" placeholder="Verplicht,bijv: 1100AA" autocomplete="postal-code" required />
</div>
<div>
<label>Huisnr</label>
<input type="text" name="huisnr" maxlength="10" placeholder="Verplicht" required />
</div>
<div>
<label>Straatnaam</label>
<input type="text" name="straatnaam" maxlength="100" placeholder="Verplicht" required />
</div>
<div>
<label>Woonplaats</label>
<input type="text" name="woonplaats" maxlength="50" placeholder="Verplicht" autocomplete="address-level2" required />
</div>
<div>
<label>Gewenste tijdstip</label>
<input type="datetime-local" name="datumtijd" pattern="[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}" min="2020-02-01T00:00"required />
</div>
<div>
<label>Heeft u opmerkingen voor uw bestelling?</label>
<input type="text" name="bestelgegevens" maxlength="100000" rows="5"/>
</div>
<button type="submit" name="bestel" value="bestel">Bestel</button></br>
</form>
<?
?>
[/code/
<div>
<label>Afhalen/Bezorgen</label>
<input type="radio" name="methode" value="afhalen" checked> Afhalen<br>
<input type="radio" name="methode" value="bezorgen"> Bezorgen<br>
</div>
<div>
<label>Filiaalkeuze</label>
<SELECT NAME='filiaalkeuze'>
<OPTION VALUE='xx' disabled>Kies filiaal:</OPTION>
<?php
require('connecties.php');
$sql = "SELECT * FROM `filialen` WHERE filiaal not like 'Hoofdkantoor'";
$result = mysqli_query($connectie, $sql );
if (mysqli_num_rows($result) > 0) {
// output data of each row
while($row = mysqli_fetch_assoc($result)) {
echo "
<OPTION VALUE='" . $row["filiaal"]. "'>" . $row["filiaal"]. "</OPTION>";
}
} else {
echo "<OPTION VALUE='fout'>fout</OPTION>";
}
?>
</SELECT></div>
<h2>Contactgegevens</h2>
<div>
<label>Voornaam</label>
<input type="text" name="voornaam" maxlength="30" placeholder="Verplicht" autocomplete="given-name" required />
</div>
<div>
<label>Achternaam</label>
<input type="text" name="achternaam" maxlength="30" placeholder="Verplicht" autocomplete="family-name" required />
</div>
<div>
<label>Telefoon</label>
<input type="text" name="telefoonnr" maxlength="30" placeholder="Verplicht" autocomplete="tel" required />
</div>
<div>
<label for="inp_first_name" class="control-label">E-mailadres</label>
<input type="email" name="email" placeholder="Optioneel" autocomplete="email"/>
</div>
<h2>Bezorgadres</h2>
<div>
<label>Postcode</label>
<input type="text" name="postcode" maxlength="6" minlenght="6" placeholder="Verplicht,bijv: 1100AA" autocomplete="postal-code" required />
</div>
<div>
<label>Huisnr</label>
<input type="text" name="huisnr" maxlength="10" placeholder="Verplicht" required />
</div>
<div>
<label>Straatnaam</label>
<input type="text" name="straatnaam" maxlength="100" placeholder="Verplicht" required />
</div>
<div>
<label>Woonplaats</label>
<input type="text" name="woonplaats" maxlength="50" placeholder="Verplicht" autocomplete="address-level2" required />
</div>
<div>
<label>Gewenste tijdstip</label>
<input type="datetime-local" name="datumtijd" pattern="[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}" min="2020-02-01T00:00"required />
</div>
<div>
<label>Heeft u opmerkingen voor uw bestelling?</label>
<input type="text" name="bestelgegevens" maxlength="100000" rows="5"/>
</div>
<button type="submit" name="bestel" value="bestel">Bestel</button></br>
</form>
<?
?>
[/code/
Gewijzigd op 30/03/2020 00:39:45 door Gijs Marien