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

bewerkt za 15 mrt 2014 in PHP, MySQL Posts: 5
Hallo,
Ik ben bezig om een bestelformulier te maken, zodat mensen concert kaarten kunnen kopen.
Ik ben volgens mij al goed op weg, alleen wil ik dat hij een berekening maakt hoeveel de totaal prijs wordt.
De berekening moet worden:

het aantal kaarten * 17.50 + 2,50.

Dit is wat ik tot nu toe heb.

<form action="mailto:janne.boer@gmail.com" method="post" class="cmxform">
<?php
if ( isset($aErrors) and count($aErrors) > 0 ) {
print '<ul class="errorlist">';
foreach ( $aErrors as $error ) {
print '<li>' . $error . '</li>';
}
print '</ul>';
}
?>
<p>Please complete the form below. Mandatory fields marked <em>*</em></p>
<fieldset>
<legend>Gegevens</legend>
<ol>
<p><?php echo isset($aErrors['name']) ? '<li class="error">' : '<li>' ?>
<label for="name">Naam<em>*</em></label>
<input id="name" name="name" value="<?php echo isset($_POST['name']) ? htmlspecialchars($_POST['name']) : '' ?>" />
</li>
</p>
<p><?php echo isset($aErrors['email']) ? '<li class="error">' : '<li>' ?>
<label for="email">E-mail<em>*</em></label>
<input id="email" name="email" value="<?php echo isset($_POST['email']) ? htmlspecialchars($_POST['email']) : '' ?>" />
</li>
</p>
<p><?php echo isset($aErrors['address1']) ? '<li class="error">' : '<li>' ?>
<label for="address1">Adres<em>*</em></label>
<input id="address1" name="address1" value="<?php echo isset($_POST['address1']) ? htmlspecialchars($_POST['address1']) : '' ?>" />
</li>
</p>
<p><?php echo isset($aErrors['address2']) ? '<li class="error">' : '<li>' ?>
<label for="address2">Postcode<em>*</em></label>
<input id="address2" name="address2" value="<?php echo isset($_POST['address2']) ? htmlspecialchars($_POST['address2']) : '' ?>" />
</li>
</p>
<p><?php echo isset($aErrors['towncity']) ? '<li class="error">' : '<li>' ?>
<label for="towncity">Plaats<em>*</em></label>
<input id="towncity" name="towncity" value="<?php echo isset($_POST['towncity']) ? htmlspecialchars($_POST['towncity']) : '' ?>" />
</li>
</p>
<p><?php echo isset($aErrors['aantal']) ? '<li class="error">' : '<li>' ?>
<label for="aantal">Aantal kaarten<em>*</em></label>
<input id="aantal" name="aantal" value="<?php echo isset($_POST['aantal']) ? htmlspecialchars($_POST['aantal']) : '' ?>"
/>
<p><?php echo isset($aErrors['uitkomst']) ? '<li class="error">' : '<li>' ?>
<label for="uitkomst">Prijs</label>
<input id="uitkomst" name="uitkomst" value="<?php

if($_SERVER['REQUEST_METHOD'] == 'POST')
$waarde = 17.50;
$i = 'aantal';
$waarde2 = 2.50;

$uitkomst = $i * $waarde + $waarde2 ;
echo "De uitkomst is: ".$uitkomst; {
}
?>""<?php echo isset($_POST['aantal']) ? htmlspecialchars($_POST['aantal']) : '' ?>" />



</p>
</li>

</ol>


<input type="submit" value="Verstuur" />

</fieldset>

</form>

Ook wil ik als je dit formulier heb ingevuld en verstuurd heb, worden doorgestuurd naar een volgende pagina. In de pagina moet vermeld worden hoeveel je moet betalen aan welk rekening nummer en wat er in de omschrijving vermeld moet worden.

Heeft een van jullie een idee??

Reacties

  • bewerkt ma 17 mrt 2014
    PMPosts: 162
    je actie op de form: een mailto zal de default emailclient openen. Niet iedereen heeft dit goed ingesteld en bovendien kun je met deze actie niet doorsturen naar een volgende pagina.
    Ook doe je er goead aan om de form onder de php afwerking te plaatsen.
    Ik heb je een opzetje gemaakt:

    <?php
    // functie spamcheck
    function spamcheck($field)
    {
    //filter_var() sanitizes the e-mail
    //address using FILTER_SANITIZE_EMAIL
    $field=filter_var($field, FILTER_SANITIZE_EMAIL);

    //filter_var() validates the e-mail
    //address using FILTER_VALIDATE_EMAIL
    if(filter_var($field, FILTER_VALIDATE_EMAIL))
    {
    return TRUE;
    }
    else
    {
    return FALSE;
    }
    }

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

    // definieren variabelen
    $ontvanger = "jouw@emailadres.nl"; // HIEW JOUW EMAIL INVULLEN
    $onderwerp = "Bestelformulier";
    $name = $_POST['name'];
    $address1 = $_POST['address1'];
    $address2 = $_POST['address2'];
    $towncity = $_POST['towncity'];
    $email = $_POST['email'];
    $aantal = $_POST['aantal'];
    $prijs = 17.5;
    $totaal = $aantal * $prijs + 2.5;
    $betalingskenmerk = $name.uniqid();
    // headers opmaken
    $headers = 'MIME-Version: 1.0';
    $headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";
    $headers .= 'From: '.$email;


    // body voor de email opmaken
    $body = "";
    $body .= "Naam: ";
    $body .= $name;
    $body .= "\n";
    $body .= "Email: ";
    $body .= $email;
    $body .= "\n";
    $body .= "Adres: ";
    $body .= $address1;
    $body .= "\n";
    $body .= "Postcode: ";
    $body .= $address2;
    $body .= "\n";
    $body .= "Plaats: ";
    $body .= $towncity;
    $body .= "\n";
    $body .= "Aantal: ";
    $body .= $aantal;
    $body .= "\n";
    $body .= "Prijs:&nbsp;&euro; ";
    $body .= $totaal;
    $body .= "\n";
    $body .= "Betalingskenmerk: ";
    $body .= $betalingskenmerk;
    $body .= "\n";

    // mailcheck, wordt later gechecked
    $mailcheck = spamcheck($_POST['email']);
    // verplichte velden
    $verplicht = array('name', 'email', 'address1', 'address2', 'towncity', 'aantal');

    // check de inputvelden, er mag geen veld leeg zijn
    $error = false;
    foreach($verplicht as $veld) {
    if (empty($_POST[$veld])) {
    $error = true;
    }
    }
    if ($error) {
    echo "U dient alle velden met een * in te vullen!";
    }
    // checken of een robot ons bestelformulier bezoekt
    elseif($_POST['robot'] != 'test_spambot') {
    die();
    }
    //check of email geldig is en geldige input is geleverd

    elseif ($mailcheck==FALSE) {
    echo 'Ongeldige input emailveld';
    }
    // check of het veld aantal een geheel getal bevat
    elseif (!(preg_match('/^[0-9]+$/', $_POST['aantal']))) {
    echo 'Het aantal kaarten moet een geheel getal zijn!';
    }
    else {

    // email verzenden met bestelgegevens
    $formsent = mail($ontvanger, $onderwerp, $body, $headers);

    // echo's als bestelling geplaatst is
    if ($formsent){
    echo 'Uw bestelformulier is successvol verstuurd!<br /><br />';
    echo 'Uw bestellingsoverzicht:<br /><br />';
    echo 'Aantal kaarten:&nbsp;'.$aantal.'<br />';
    echo 'Totaalprijs:&nbsp;&euro;'.$totaal.'<br />';
    // rekeningnummer hieronder zelf in te vullen
    echo 'Uw bestelling gaarne overmaken op volgende rekeningnummer: <b>1231456789</b> met als betalingskenmerk:&nbsp;<b>'.$betalingskenmerk.'</b><br />';
    echo 'Bedankt voor uw bestelling';

    }
    else{
    echo 'Sorry, maar er is iets misgegaan met het versturen, probeer het later nog eens.';
    }
    }
    } // eind server request
    ?>

    <script type="text/javascript">

    // kaartenprijs
    function multiply()
    {

    var theForm = document.forms["bestelling"];

    var envelop = document.getElementById("aantal").value;

    return envelop*17.5 + 2.5; // voorbeeld 17.50 euro per kaart en 2.50 erbovenop
    }

    //totaal calculation
    function calculateTotal()
    {
    var totaalPrijs = multiply();


    var divobj = document.getElementById('totaal');
    divobj.style.display='block';
    divobj.innerHTML = "Uw prijs: <b>&euro;&nbsp;"+totaalPrijs+",-</b>";

    }

    function mirror(v){
    document.getElementById('totaal').innerHTML="Uw prijs: <b>&euro;&nbsp;0,-</b>";
    }

    </script>

    <form id="bestelling" action="" method="post" class="cmxform">

    <p>Please complete the form below. Mandatory fields marked <em>*</em></p>
    <fieldset>
    <legend>Gegevens</legend>
    <input type="hidden" id="robot" name="robot" value="test_spambot" />
    <p>
    <label for="name">Naam<em>*</em></label>
    <input id="name" name="name" value="" />

    </p>
    <p>
    <label for="email">E-mail<em>*</em></label>
    <input id="email" name="email" value="" />

    </p>
    <p>
    <label for="address1">Adres<em>*</em></label>
    <input id="address1" name="address1" value="" />

    </p>
    <p>
    <label for="address2">Postcode<em>*</em></label>
    <input id="address2" name="address2" value="" />

    </p>
    <p>
    <label for="towncity">Plaats<em>*</em></label>
    <input id="towncity" name="towncity" value="" />

    </p>
    <p>
    <label for="aantal">Aantal kaarten<em>*</em></label>
    <input id="aantal" name="aantal" onkeyup="calculateTotal()" value="" />

    <div id="totaal"></div>



    <p>
    <input type="reset" value="Reset" onclick="mirror(this.value)">
    <input type="submit" value="Bestelling plaatsen" />
    </p>
    </fieldset>

    </form>

    DEMO

    De meeste fouten ontstaan tussen de monitor en de rugleuning van je stoel!
  • Bedankt! Ik ga hiermee aan de slag!
  • Is het ook nog mogelijk om een bevestigingsmail te sturen?
  • bewerkt vr 21 mrt 2014
    PMPosts: 879
    yep, een paar regels toevoegen aan bovenstaand script:
    Uitgaande van bovenstaande code voeg je onderstaande code toe:
    Op regel 40 plaats je deze code erbij:

    // besteller krijgt een noreply
    $headers_submitter = 'MIME-Version: 1.0';
    $headers_submitter .= 'Content-type: text/html; charset=UTF-8' . "\r\n";
    $headers_submitter .= 'From: '.'noreply@jouwdomein.nl';
    Op regel 68 plaats je deze code erbij:

    // besteller krijgt andere body voor email
    $body_submitter = "";
    $body_submitter .= "Hartelijk dank voor uw bestelling. Hieronder staan uw gegevens:";
    $body_submitter .= "\n\n";
    $body_submitter .= "Naam: ";
    $body_submitter .= $name;
    $body_submitter .= "\n";
    $body_submitter .= "Email: ";
    $body_submitter .= $email;
    $body_submitter .= "\n";
    $body_submitter .= "Adres: ";
    $body_submitter .= $address1;
    $body_submitter .= "\n";
    $body_submitter .= "Postcode: ";
    $body_submitter .= $address2;
    $body_submitter .= "\n";
    $body_submitter .= "Plaats: ";
    $body_submitter .= $towncity;
    $body_submitter .= "\n";
    $body_submitter .= "Aantal: ";
    $body_submitter .= $aantal;
    $body_submitter .= "\n";
    $body_submitter .= "Prijs: ";
    $body_submitter .= $totaal;
    $body_submitter .= "\n";
    $body_submitter .= "Gelieve bedrag dat vermeld staat bij Prijs over te maken op bankrekeningnummer: 123456789 onder vermelding van dit betalingskenmerk: ";
    $body_submitter .= $betalingskenmerk;
    $body_submitter .= "\n\n";

    $body_submitter .= "Met vriendelijke groet,";
    $body_submitter .= "\n\n";

    $body_submitter .= "Janneboer";
    En tot slot vervang je regel 99 en 100 met deze code:

    // email verzenden met bestelgegevens
    $formsent = mail($ontvanger, $onderwerp, $body, $headers)
    .mail($_POST['email'], 'Ontvangsbevestiging', $body_submitter, $headers_submitter); //emailbevestiging naar besteller
  • Bedankt iedereen voor zijn hulp jullie hebben me hiermee ontzettend geholpen :)
Login of Registreer om te reageren.