Beste forumleden,

Ik heb jullie hulp nodig. Ik ben bezig met een hobby-projectje (jamjam1.haperen.eu), maar ik kom er niet uit. Ik heb een shopping cart gemaakt met behulp van php. Als iemand een product toevoegt, wordt deze vastgelegd in een session, hierin zitten onder andere de code van het product, prijs en hoeveelheid.
Op de bestelpagina staan ook meerdere persoonlijke gegevens die een klant kan invullen. Wanneer iemand op een submit knop drukt zou ik graag willen dat deze data d.m.v. een query naar mijn database verzonden wordt. Het ding is dat ik niet weet hoe ik dat moet doen met foreach, want als je meerdere producten hebt zijn er dus ook meerdere sessies.
De code hiervan staat hieronder.
Mocht je eten wat ik kan doen laat dan een reactie achter!
Gr. Gijs


<form name="methode">


<div class="ui-field-contain">
<label for="inp_first_name" class="control-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 class="ui-field-contain">
<label for="inp_first_name" class="control-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 class="ui-field-contain">
<label for="inp_first_name" class="control-label">Voornaam</label>
<input type="text" name="voornaam" maxlength="30" placeholder="Verplicht" autocomplete="given-name" required />
</div>

<div class="ui-field-contain">
<label for="inp_first_name" class="control-label">Achternaam</label>
<input type="text" name="achternaam" maxlength="30" placeholder="Verplicht" autocomplete="family-name" required />
</div>

<div class="ui-field-contain">
<label for="inp_first_name" class="control-label">Telefoon</label>
<input type="text" name="telefoonnr" maxlength="30" placeholder="Verplicht" autocomplete="tel" required />
</div>

<div class="ui-field-contain">
<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 class="ui-field-contain">
<label for="inp_postal_code" class="control-label">Postcode</label>
<input type="text" name="postcode" maxlength="6" minlenght="6" placeholder="Verplicht,bijv: 1100AA" autocomplete="postal-code" required />
</div>

<div class="ui-field-contain">
<label for="inp_house_number" class="control-label">Huisnr</label>
<input type="text" name="huisnr" maxlength="10" placeholder="Verplicht" required />
</div>

<div class="ui-field-contain">
<label for="inp_street_name" class="control-label">Straatnaam</label>
<input type="text" name="straatnaam" maxlength="100" placeholder="Verplicht" required />
</div>

<div class="ui-field-contain">
<label for="inp_city" class="control-label">Woonplaats</label>
<input type="text" name="woonplaats" maxlength="50" placeholder="Verplicht" autocomplete="address-level2" required />
</div>

<div class="ui-field-contain">
<label for="inp_city" class="control-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 class="ui-field-contain">
<label for="OrderNotes" class="control-label">Heeft u opmerkingen voor uw bestelling?</label>
<input type="text" name="bestelgegevens" maxlength="100000" rows="5"/>
</div>

<?
$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();

?>
<?php
foreach ($_SESSION["shopping_cart"] as $product){

$prod = $product['code'];
$aant = $product['quantity'];
$klant = 1;

$sql = "insert into bestellingen (email, product, aantal, leveren, afgewerkt) values ('$klant', '$prod' , '$aant' , now() , 0";

}
?>
Kan je jouw code tussen code-tags plaatsen?
En wat doet de now() functie? Dat is niet standaard in PHP, dus vermoedelijk zelf gemaakt? Of je haalt de functies van MySQL en PHP door elkaar?
[code] en [/code].
De opmaakcodes staan ook bij de Veelgestelde Vragen vermeld op deze site ;-)
Zie ook mijn edit met mijn vraag over je script.
 <form name="methode">

	
	 <div class="ui-field-contain">
						<label for="inp_first_name" class="control-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 class="ui-field-contain">
						<label for="inp_first_name" class="control-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 class="ui-field-contain">
						<label for="inp_first_name" class="control-label">Voornaam</label>
					<input type="text" name="voornaam" maxlength="30" placeholder="Verplicht" autocomplete="given-name" required />
					</div>
					
	<div class="ui-field-contain">
						<label for="inp_first_name" class="control-label">Achternaam</label>
					<input type="text" name="achternaam" maxlength="30" placeholder="Verplicht" autocomplete="family-name" required />
					</div>
					
	<div class="ui-field-contain">
						<label for="inp_first_name" class="control-label">Telefoon</label>
					<input type="text" name="telefoonnr" maxlength="30" placeholder="Verplicht" autocomplete="tel" required />
					</div>
					
	<div class="ui-field-contain">
						<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 class="ui-field-contain">
						<label for="inp_postal_code" class="control-label">Postcode</label>
						<input type="text" name="postcode" maxlength="6" minlenght="6" placeholder="Verplicht,bijv: 1100AA" autocomplete="postal-code" required />
					</div>

<div class="ui-field-contain">
						<label for="inp_house_number" class="control-label">Huisnr</label>
						<input type="text" name="huisnr" maxlength="10" placeholder="Verplicht" required />
					</div>
					
	<div class="ui-field-contain">
						<label for="inp_street_name" class="control-label">Straatnaam</label>
						<input type="text" name="straatnaam" maxlength="100" placeholder="Verplicht" required />
					</div>
					
	<div class="ui-field-contain">
							<label for="inp_city" class="control-label">Woonplaats</label>
							<input type="text" name="woonplaats" maxlength="50" placeholder="Verplicht" autocomplete="address-level2" required />
						</div>

		<div class="ui-field-contain">
							<label for="inp_city" class="control-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 class="ui-field-contain">
							<label for="OrderNotes" class="control-label">Heeft u opmerkingen voor uw bestelling?</label>
							<input type="text" name="bestelgegevens" maxlength="100000" rows="5"/>
						</div>
						
							<?
	$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();
  
  ?>
						  <?php		
foreach ($_SESSION["shopping_cart"] as $product){

    $prod = $product['code'];
    $aant = $product['quantity'];
    $klant = 1;
    
    $sql = "insert into bestellingen (email, product, aantal, leveren, afgewerkt) values ('$klant', '$prod' , '$aant' , now() , 0";
    
}
?>
En wat doet de now() functie? Dat is niet standaard in PHP, dus vermoedelijk zelf gemaakt? Of je haalt de functies van MySQL en PHP door elkaar?
De now() functie zorgt ervoor dat de tijd op het moment van submit in de MYSQL database komt.
Nou, die bestaat overigens niet in PHP, wel in MySQL.
Maar zo te zien had je dat blijkbaar al ontdekt.

Maar Je moet dus inbouwen dat je bij het klikken op een product een sessie met een multidimensionale aanmaakt, met daarin je product en je aantal..

$productID = 1; // Bijv. Pita Gyros
$aantal = 2;
$_SESSION['cart'][$productID] = $aantal.

Uiteindelijk vormt dit een boomstructuur van de producten in je winkelmand, waarna je dit bij de kassa laat afrekenen.
Huh ik begrijp dat niet helemaal? Zou je dat op een andere manier kunnen uitleggen?
Wat begrijp je niet? Ben je bekend met multi-dimensionale array's?

Reageren