Webprofis is een Forum waarin je vragen kunt stellen die webgerelateerd zijn. Heb je vragen over of problemen met je Webpagina, HTML, CSS, Javascript, PHP of andere client of serverside scriptingtalen? Stel ze dan gerust op dit forum. Op dit forum zijn een aantal vrijwilligers actief die u graag met uw vragen willen helpen en u waar mogelijk een passend antwoord aanbieden. Hebt u zelf veel ervaring en kennis met betrekking tot het bovenstaande? U bent van harte welkom om uw kennis met anderen te delen!

We hopen dat eenieder op dit Forum een leerzame ervaring mag opdoen.

Team Webprofis

bestelformulier maken in php

bewerkt di 9 feb 2016 in Tutorials & Scripten Posts: 879
Auteur: vinTage

Demo

Download


Een efficient bestelformulier maken met producten en prijzen in php.
Eerst zetten we aan associatieve array op met daarin de producten gekoppeld aan de prijzen. Deze array gebruiken we nu voor de form te produceren dmv een foreach. Om de form netjes te maken, zetten we het in een table.

De array:

// Drankjes
$artikels = array(
'Cola' => 1.2, // 'naam pruduct' + prijs (1.2 = euro 1,20)
'Fanta' => 1.3,
'Spa rood' => 1.5
);

De form:


<form method="post" action="">
<table width="250px">
<?php
echo '<tr><td><b>Drankjes</b></td></tr>'; // koptekst
foreach($artikels as $artikel => $art)
{
?>
<tr>
<td>
<?php echo $artikel."\n";?>
<td>
<?php echo '&euro; '.number_format($art, 2)."\n";?>
</td>
</td>
<td>
<input type="text" name="txtinput[]" size="3" />
</td>
</tr>
<?php
}
?>
</table>
<input type="submit" value="submit" />
</form>

De afhandeling:

<?php
// output
// posten/rekenen

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

{
$totaal = 0;
echo '<table width="300px">';
foreach($_POST['txtinput'] as $postartikel => $val)
{
if(!empty($_POST['txtinput'][$postartikel]))
{

echo '<tr>';
echo '<td>'.array_keys($artikels)[$postartikel].'</td>&nbsp; <td>Aantal: '.$val. '</td>&nbsp;&nbsp; <td>Subtotaal: &euro;: ' .number_format($artikels[array_keys($artikels)[$postartikel]] * $val, 2). '</td>';
echo '</tr>';


}
$totaal += $artikels[array_keys($artikels)[$postartikel]] * $val;


}
echo '</table><br />';
echo 'Totaal:&nbsp;&euro; '.number_format($totaal, 2);
}

Op deze manier hoeven we geen form aan te passen als we producten wijzigen, bijvoegen of de prijs ervan wijzigen. De enige aanpassing die we moeten maken is in de array.
Als we nu kopteksten willen gebruiken na x aantal producten; bv Drankjes met eronder de drankjes, Broodjes met eronder de broodjes etc. dan moeten we afstand doen van 1 array en maken we verschillende arrays:

<?php
// Drankjes
$artikels = array(
'Cola' => 1.2,
'Fanta' => 1.3,
'Spa rood' => 1.5
);
// Broodjes
$artikels2 = array(
'Broodje a' => 1.2,
'Broodje b' => 1.3,
'Broodje c' => 1.5

);
// Pizza's
$artikels3 = array(
'Pizza a' => 1.2,
'Pizza b' => 1.3,
'Pizza c' => 1.5

);
// arrays bij elkaar optellen
$artikels_total = $artikels + $artikels2 + $artikels3;

We maken nu een extra table row waarin we de koptekst zetten; dwz zeggen: we moeten nu ook verschillende forms gaan gebruiken die corresponderen met de verschillende arrays:

/* LIJST 1 */
echo '<tr><td><b>Drankjes</b></td></tr>'; // koptekst
foreach($artikels as $artikel => $art)
{
?>
<tr>
<td>
<?php echo $artikel."\n";?>
<td>
<?php echo '&euro; '.number_format($art, 2)."\n";?>
</td>
</td>
<td>
<input type="text" name="txtinput[]" size="3" />
</td>
</tr>
<?php
}
/* LIJST 2 */
echo '<tr><td><b>Broodjes</b></td></tr>'; // koptekst
foreach($artikels2 as $artikel => $art)
{
?>
<tr>
<td>
<?php echo $artikel."\n";?>
<td>
<?php echo '&euro; '.number_format($art, 2)."\n";?>
</td>
</td>
<td>
<input type="text" name="txtinput[]" size="3" />
</td>
</tr>
<?php
}
/* LIJST 3 */
echo '<tr><td><b>Pizza\'s</b></td></tr>'; // koptekst
foreach($artikels3 as $artikel => $art)
{
?>
<tr>
<td>
<?php echo $artikel."\n";?>
<td>
<?php echo '&euro; '.number_format($art, 2)."\n";?>
</td>
</td>
<td>
<input type="text" name="txtinput[]" size="3" />
</td>
</tr>
<?php
}
?>
Zorg ervoor de $artikels1 in de array correspondeert met $artikels1 in de form, $artikels2 in de array met $artikels2 in de form enz...

Voor de output moeten we nu ook een kleine aanpassing maken omdat alle arrays opgeteld dienen te worden.
Dit zagen we boven al in de regel:

// arrays bij elkaar optellen
$artikels_total = $artikels + $artikels2 + $artikels3;

De output ziet er nu zo uit:

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

{
$totaal = 0;
echo '<table width="300px">';
foreach($_POST['txtinput'] as $postartikel => $val)
{
if(!empty($_POST['txtinput'][$postartikel]))
{

echo '<tr>';
echo '<td>'.array_keys($artikels_total)[$postartikel].'</td>&nbsp; <td>Aantal: '.$val. '</td>&nbsp;&nbsp; <td>Subtotaal: &euro;: ' .number_format($artikels_total[array_keys($artikels_total)[$postartikel]] * $val, 2). '</td>';
echo '</tr>';


}
$totaal += $artikels_total[array_keys($artikels_total)[$postartikel]] * $val;


}
echo '</table><br />';
echo 'Totaal:&nbsp;&euro; '.number_format($totaal, 2);
}
Tot slot om de verwerking en artikellijsten van elkaar te scheiden (zodat we slechts 1 bestand hoeven aan te passen bij wijzigingen) zetten we de arrays en de forms apart in bijv lijsten.php

<?php
// Drankjes
$artikels = array(
'Cola' => 1.2,
'Fanta' => 1.3,
'Spa rood' => 1.5
);
// Broodjes
$artikels2 = array(
'Broodje a' => 1.2,
'Broodje b' => 1.3,
'Broodje c' => 1.5

);
// Pizza's
$artikels3 = array(
'Pizza a' => 1.2,
'Pizza b' => 1.3,
'Pizza c' => 1.5

);
// arrays bij elkaar optellen
$artikels_total = $artikels + $artikels2 + $artikels3;



/* LIJST 1 */
echo '<tr><td><b>Drankjes</b></td></tr>'; // koptekst
foreach($artikels as $artikel => $art)
{
?>
<tr>
<td>
<?php echo $artikel."\n";?>
<td>
<?php echo '&euro; '.number_format($art, 2)."\n";?>
</td>
</td>
<td>
<input type="text" name="txtinput[]" size="3" />
</td>
</tr>
<?php
}
/* LIJST 2 */
echo '<tr><td><b>Broodjes</b></td></tr>'; // koptekst
foreach($artikels2 as $artikel => $art)
{
?>
<tr>
<td>
<?php echo $artikel."\n";?>
<td>
<?php echo '&euro; '.number_format($art, 2)."\n";?>
</td>
</td>
<td>
<input type="text" name="txtinput[]" size="3" />
</td>
</tr>
<?php
}
/* LIJST 3 */
echo '<tr><td><b>Pizza\'s</b></td></tr>'; // koptekst
foreach($artikels3 as $artikel => $art)
{
?>
<tr>
<td>
<?php echo $artikel."\n";?>
<td>
<?php echo '&euro; '.number_format($art, 2)."\n";?>
</td>
</td>
<td>
<input type="text" name="txtinput[]" size="3" />
</td>
</tr>
<?php
}
?>
We includen deze lijsten.php terug in bestelformulier.php
bestelformulier.php:

<form method="post" action="">
<table width="250px">
<?php
include('lijsten.php');
?>
</table>
<input type="submit" value="submit" />
</form>

<?php
// output
// posten/rekenen

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

{
$totaal = 0;
echo '<table width="300px">';
foreach($_POST['txtinput'] as $postartikel => $val)
{
if(!empty($_POST['txtinput'][$postartikel]))
{

echo '<tr>';
echo '<td>'.array_keys($artikels_total)[$postartikel].'</td>&nbsp; <td>Aantal: '.$val. '</td>&nbsp;&nbsp; <td>Subtotaal: &euro;: ' .number_format($artikels_total[array_keys($artikels_total)[$postartikel]] * $val, 2). '</td>';
echo '</tr>';


}
$totaal += $artikels_total[array_keys($artikels_total)[$postartikel]] * $val;


}
echo '</table><br />';
echo 'Totaal:&nbsp;&euro; '.number_format($totaal, 2);
}
?>


Dit Topic is gesloten.