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 met php

bewerkt di 21 apr 2015 in PHP, MySQL Posts: 879
ben bezig met een bestelformulier en daarin heb ik per product een output die ge-echood wordt.


// waarde product 1, spatie + value van de input + value input product 1 * prijs product 1, op 2 decimalen afronden
if(!empty($_POST[$product1])) {
$product1_output = $product1.' '.$_POST[$product1].' stuks Prijs € '.number_format($_POST[$product1]*$prijs[$product1], 2);
echo $product1_output;
}

if(!empty($_POST[$product2])) {
$product2_output = $product2.' '.$_POST[$product2].' stuks Prijs € '.number_format($_POST[$product2]*$prijs[$product2], 2);
echo $product2_output;
}

if(!empty($_POST[$product3])) {
$product3_output = $product3.' '.$_POST[$product3].' stuks Prijs € '.number_format($_POST[$product3]*$prijs[$product3], 2);
echo $product3_output;
}
// ect. t/m 25
De variable $output_totaal moet een verzameling zijn van deze alle 25 product outputs.


$output_totaal = $product1_output;
$output_totaal .= $product2_output;
$output_totaal .= $product3_output;
// t'm 25

Kan dit niet korter?

Wat betrteft het bestelformulier: ik probeer het zo te maken dat de er maar op 1 plaats een wijziging hoeft plaats te vinden (gemakzucht voor de gebruiker) en dat de waardes in de form worden overgenomen. Ik heb die form als volgt gemaakt maar weet niet of dit de goede methode is om het zo efficient mogelijk te doen:

<?php
include ('prijzen.php');

if($_SERVER['REQUEST_METHOD'] == 'POST')
{
include ('output.php');
}

?>
<!doctype html>

<html lang="en">
<head>
<title><!-- Insert your title here --></title>
</head>
<body>
<form id="bestelformulier" method="post" action="">
<table width="260px">
<tr>
<td><b>Broodjes</b></td>
<td><b>Prijs</b></td>
<td><b>Aantal</b></td>
</tr>
<tr><td></td></tr> <!-- whitespace -->
<tr>
<td><?php echo $product1 ?></td>
<td>&euro; <?php echo number_format($prijs[$product1], 2); ?></td>
<td><input type="text" name="<?php echo $product1 ?>" size="3" /></td>
</tr>
<tr>
<td><?php echo $product2 ?></td>
<td>&euro; <?php echo number_format($prijs[$product2], 2); ?></td>
<td><input type="text" name="<?php echo $product2 ?>" size="3" /></td>
</tr>
<tr>
<td><?php echo $product3 ?></td>
<td>&euro; <?php echo number_format($prijs[$product3], 2); ?></td>
<td><input type="text" name="<?php echo $product3 ?>" size="3" /></td>
</tr>
<tr>
<td><?php echo $product4 ?></td>
<td>&euro; <?php echo number_format($prijs[$product4], 2); ?></td>
<td><input type="text" name="<?php echo $product4 ?>" size="3" /></td>
</tr>
<tr>
<td><?php echo $product5 ?></td>
<td>&euro; <?php echo number_format($prijs[$product5], 2); ?></td>
<td><input type="text" name="<?php echo $product5 ?>" size="3" /></td>
</tr>
<tr><td></td></tr> <!-- whitespace -->
<tr><td></td></tr> <!-- whitespace -->

prijzen.php

<?php
// producten
$product1 = 'Broodje-Ham';
$product2 = 'Broodje-Kaas';
$product3 = 'Brodje-Gezond';
$product4 = 'Broodje-Tonijn';
$product5 = 'Broodje-Zalm';

// dranken
$product6 = 'Cola';
$product7 = 'Fanta';
$product8 = 'Bitter-lemon';
$product9 = 'Spa-rood';
$product10 = 'Spa-blauw';

//prijzen van producten
$prijs = array(
$product1 => 3.5, // prijs 3.50
$product2 => 3.5,
$product3 => 3.5,
$product4 => 4.5,
$product5 => 4.5,
$product6 => 2.0,
$product7 => 2.0,
$product8 => 2.5,
$product9 => 1.5,
$product10 => 1.5,

);

?>

output.php:

<?php
// waarde product 1, spatie + value van de input + value input product 1 * prijs product 1, op 2 decimalen afronden
if(!empty($_POST[$product1])) {
$product1_output = $product1.'&nbsp;'.$_POST[$product1].'&nbsp;stuks&nbsp;Prijs&nbsp;&euro;&nbsp;'.number_format($_POST[$product1]*$prijs[$product1], 2);
echo $product1_output;
}

if(!empty($_POST[$product2])) {
$product2_output = $product2.'&nbsp;'.$_POST[$product2].'&nbsp;stuks&nbsp;Prijs&nbsp;&euro;&nbsp;'.number_format($_POST[$product2]*$prijs[$product2], 2);
echo $product2_output;
}

if(!empty($_POST[$product3])) {
$product3_output = $product3.'&nbsp;'.$_POST[$product3].'&nbsp;stuks&nbsp;Prijs&nbsp;&euro;&nbsp;'.number_format($_POST[$product3]*$prijs[$product3], 2);
echo $product3_output;
}
// .........

$output_totaal = $product1_output;
$output_totaal .= $product2_output;
$output_totaal .= $product3_output;
// t'm 25

?>

Getagd:

Reacties

  • bewerkt ma 20 apr 2015
    PMPosts: 415
    korter zal lastig worden, wie doet er mee?

    <?php
    //aanvullen naar behoefte
    $artikels = array(
    'cola' => 1.2,
    'patat' => 1.3,
    'broodje niks' => 1.5
    );
    ?>

    <form method="post" action="">
    <table>
    <?php
    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[]" />
    </td>
    </tr>
    <?php
    }
    ?>
    </table>
    <input type="submit" value="hopla" />
    </form>

    <?php
    //posten/rekenen
    if($_SERVER['REQUEST_METHOD'] == 'POST')
    {
    $totaal = 0;
    foreach($_POST['txtinput'] as $postartikel => $val)
    {
    if(!empty($_POST['txtinput'][$postartikel]))
    {
    echo array_keys($artikels)[$postartikel].', aantal: '.$val. ", subtotaal: &euro;: " .number_format($artikels[array_keys($artikels)[$postartikel]] * $val, 2). "<br>\n";
    }
    $totaal += $artikels[array_keys($artikels)[$postartikel]] * $val;
    }
    echo 'totaal: '.number_format($totaal, 2);
    }
    nuet
  • bewerkt ma 20 apr 2015
    PMPosts: 879
    Dit is gewqeldig efficient opgezet!!! Ik was zelf ook wat aan het stoeien met multidimensionele array: ik had dit gemaakt tot dusverre:

    <?php
    error_reporting(0);
    if($_SERVER['REQUEST_METHOD'] == 'POST')
    {


    include('array.php');

    echo 'Product:&nbsp;'.$product[0][0].'&nbsp;&nbsp;Prijs:&nbsp;&euro;&nbsp;'.number_format($product[0][1], 2).'&nbsp;Aantal:&nbsp;'.$product[0][2].'<br />';
    echo 'Product:&nbsp;'.$product[1][0].'&nbsp;&nbsp;Prijs:&nbsp;&euro;&nbsp;'.number_format($product[1][1], 2).'&nbsp;Aantal:&nbsp;'.$product[1][2].'<br />';
    echo 'Product:&nbsp;'.$product[2][0].'&nbsp;&nbsp;Prijs:&nbsp;&euro;&nbsp;'.number_format($product[2][1], 2).'&nbsp;Aantal:&nbsp;'.$product[2][2].'<br />';
    echo 'Product:&nbsp;'.$product[3][0].'&nbsp;&nbsp;Prijs:&nbsp;&euro;&nbsp;'.number_format($product[3][1], 2).'&nbsp;Aantal:&nbsp;'.$product[3][2].'<br />';

    }
    include('array.php');
    ?>

    <form method="post" action="">
    <table>
    <tr>
    <td><?php echo $product[0][0] ?></td>
    <td><?php echo '&euro;&nbsp;'.number_format($product[0][1], 2) ?></td>
    <td><input type="text" name="aantal1" /></td>

    </tr>
    <tr>
    <td><?php echo $product[1][0] ?></td>
    <td><?php echo '&euro;&nbsp;'.number_format($product[1][1], 2) ?></td>
    <td><input type="text" name="aantal2" /></td>
    </tr>
    <tr>
    <td><?php echo $product[2][0] ?></td>
    <td><?php echo '&euro;&nbsp;'.number_format($product[2][1], 2) ?></td>
    <td><input type="text" name="aantal3" /></td>
    </tr>
    <tr>
    <td><?php echo $product[3][0] ?></td>
    <td><?php echo '&euro;&nbsp;'.number_format($product[3][1], 2) ?></td>
    <td><input type="text" name="aantal4" /></td>
    </tr>
    <tr>
    <td>
    <input type="submit" value="Submit" />
    </td>
    </tr>

    </table>


    </form>

    array.php

    <?php
    $product = array
    (
    // array("naam van het product"',"prijs","aantal",
    array("Broodje ham", 2.5, $_POST['aantal1']),
    array("Broodje kaas", 3.5, $_POST['aantal2']),
    array("Cola", 4.5, $_POST['aantal3']),
    array("Fanta", 5.5, $_POST['aantal4'])
    );
    ?>

    @vinTage Jouw voorbeeld moet ik eens ff rustig gaan bestuderen, dat is zeer efficient opgezet zo te zien


  • bewerkt di 21 apr 2015
    PMPosts: 879
    Ik heb even wat zitten stoeien met dat script en het werkt geweldig. Als je product bijvoegd in de array parsed ie ook gelijk een nieuwe row erbij met dat product.
    Waar ik nu tegenaanloop is het volgende: Stel je wilt om de zoveel rows een koptekst met bv Broodjes
    Broodjes
    Dan weer 7 of 8 producten en dan weer een koptekst:
    Drankjes
    Dan zul je helaas afstand moeten doen van die foreach toch die de table rows produceert?
  • nuet schreef:: Als je product bijvoegd in de array parsed ie ook gelijk een nieuwe row erbij met dat product.
    What else you did expect? :D

    [2e keus optie, lees verder]
    Je kunt per 'categorie' een array aanmaken en dus per categorie dus ook de for-loops aanroepen, dan is de code nog altijd maar een fractie van de opzet code.
    nuet schreef:: Ik was zelf ook wat aan het stoeien met multidimensionele array
    Mijn code bevat geen multidimensionale array, enkel een associatieve array.

    Om nu dus categorie??n te gaan toevoegen kun je wel multidimensionaal gaan, waarbij je de array naam als 'koptextje' zou kunnen gaan gebruiken.
    Ik zal er binnenkort nog eens mee gaan knoeien.
    nuet
  • bewerkt di 21 apr 2015
    PMPosts: 879
    Die rows dmv foreach "laten produceren" is echt uniek. Zo hoeft een gebruiker alleen maar het product en prijs uit de array te halen en het wordt daardoor ook automatisch uit de form gehaald. Hoeft ie de form niet ook nog eens aan te passen. Dat is nog eens efficient coderen =D>
  • Ik wil echt niet vervelend overkomen, maar dit is volgens mij de normaalste zaak van de wereld (al zou ik er een database aan hangen ipv de klant elke keer een bestand laten aanpassen/ftp-??n etc)

    Misschien dat nu mijn uitleg voor dat gastenboek (admin gedeelte) ook iets duidelijker is?
  • PMPosts: 879
    @vinTage Ja dat is natuurlijk wel zo, maar vaak is het zo dat er een lijst is met producten en als de gebruiker dan het product wil veranderen of product wil toevoegen, moet ie de form ook aanpassen.
    Ik wil eerst ff dit bestelformulier goed werkend krijgen met kopteksten hier en daar erin en daarna pak ik het gastenboek weer op.
  • bewerkt wo 22 apr 2015
    PMPosts: 879
    ik heb nu 3 aparte arrays gemaakt:

    // 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;

    In de form:

    <?php
    /* 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[]" />
    </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[]" />
    </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[]" />
    </td>
    </tr>
    <?php
    }
    ?>

    En bij de verwerking:

    if(!empty($_POST['txtinput'][$postartikel]))
    {
    echo array_keys($artikels_total)[$postartikel].'&nbsp; Aantal: '.$val. "&nbsp;&nbsp; Subtotaal: &euro;: " .number_format($artikels_total[array_keys($artikels_total)[$postartikel]] * $val, 2). "<br>\n";

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

    Dit werkt goed.
  • bewerkt wo 22 apr 2015
    PMPosts: 415
    nuet schreef:: maar vaak is het zo dat er een lijst is met producten en als de gebruiker dan het product wil veranderen of product wil toevoegen, moet ie de form ook aanpassen.
    Nee, want het form genereer je ook vanuit de database while(fetch){....}

    En met een verschrikkelijk simpel cmsje beheerd de klant de database, ipv ftp/texteditor/ftp
  • PMPosts: 879
    Ik heb hem bij de T&S gezet: http://webprofis.nl/bestelformulier
    Graag feedback zo waar nodig
Login of Registreer om te reageren.