Inschrijvingsformulier met opstelsommen via PHP

Status
Niet open voor verdere reacties.

wouterd

Gebruiker
Lid geworden
14 sep 2009
Berichten
11
Hallo


Ik ben webmaster van een site van een voetbalclub en wil een inschrijvingsformulier maken voor het jaarlijkse "mosselfeest" :p

Een feedbackformulier in php heb ik al kunnen maken (dankzij thesitewizard.com) maar ik vind nergens hulp voor een inschrijvingsformulier met volgende mogelijkheden:

user moet kiezen uit verschillende menu's en aantallen aanduiden (2 x menu A + 1 menu B en dit op zaterdagavond bijv.). Het totaalbedrag zou dan naar de user worden gemaild met het rekeningnummer waarop gestort moet worden. Een kopie van de mail wordt ook naar de secretaris gestuurd.

Met welke code kan ik de user laten invullen hoeveel keer hij menu A, B, etc wilt en hoe kan php dit optellen aub?

Hier kan u de opmaak van het formulier zien: http://www.vlimmerensport.be/Mosselfeest/mosselfeest.html

Hartelijk dank om mij op weg te helpen of een script te sturen :thumb:
 
Hoeveel PHP kennis heb je? Het is niet super lastig, maar als je nog nooit wat met PHP gedaan hebt dan ben je nog wel even bezig :p
 
Als mensen een aantal in moeten kunnen vullen zul je daar toch velden voor moeten maken ;)

Het "live" berekenen van het totaal bedrag (bedrag * aantal = totaal) zul je met JavaScript moeten regelen, PHP kan het alleen nadat het formulier is verzonden.

Maar goed, als je dus invulvelden hebt gemaakt voor de aantallen werkt het verder net als een contact-formulier.

Kwestie van de juiste $_POST-waarde vermenigvuldigen met het juiste bedrag.
Ondertussen een variabele aanmaken die het totaalbedrag bijhoudt en een mail-tekst verzinnen waarin alle variabelen terugkomen.

Mailtjes versturen doe je via de mail()-functie van PHP, een kopie kan via BCC of gewoon nog een keer de mail-functie aanroepen maar dan richting de secretaris.
 
Alvast bedankt voor jullie reacties! Ik zal deze avond het formulier wat aanpassen (velden toevoegen :) ), "live" berekenen is eigenlijk niet nodig, zou willen proberen om enkel php te gebruiken.

Mijn kennis van php is (zeer) beperkt, heb een boek gekocht (jaja, voor dummies) en begrijp de code wel als ik ze zie, maar zelf alles programmeren kan ik (nog) niet.

Hopelijk kunnen jullie mij verder helpen als ik het formulier aangepast heb.

Nog eens bedankt, het zou dit weekend moeten klaar zijn :confused:
 
Ik was al begonnen met een voorbeeld en ik vind het zonde om de live berekening er nu weer uit te halen ;) Kijk maar of en wat je ermee doet:
PHP:
<?php
	$menu = array(
		1=>array("Kleine portie mosselen + brood",10),
		2=>array("Grote portie mosselen + brood",12),
		3=>array("Kleine portie mosselen + frieten ",12),
		4=>array("Grote portie mosselen + frieten",15),
		5=>array("Videe + brood ",10),
		6=>array("Videe + frieten ",12),
		7=>array("Koude schotel",8)
	);
	if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["naam"]) && isset($_POST["voornaam"]) && isset($_POST["email"]) && !empty($_POST["naam"]) && !empty($_POST["voornaam"]) && !empty($_POST["email"])) {
		//in de volgense 3 regels indien gewenst extra checks aanbrengen
		$naam = $_POST["naam"];
		$voornaam = $_POST["voornaam"];
		$email= $_POST["email"];
		
		$gerechten = "";
		$totaal = 0;
		foreach ($_POST["menu"] as $k => $v) {
			if (!empty($v) && array_key_exists($k, $menu)) {
				$gerechten .= $v." X ".$menu[$k][0]." a ".$menu[$k][1]." = EUR ".($v*$menu[$k][1])."\n";
				$totaal += $v*$menu[$k][1];
			}
		}
		$verwacht = "";
		foreach ($_POST["verwacht"] as $k => $v) {
			$verwacht .= $k."\n";
		}
		$onderwerp = "Reservering mosselfeest";
$bericht = "Beste ".$voornaam.",

Bedankt voor de reservering. Wij hebben onderstaande informatie ontvangen:

Naam: ".$naam."
Voornaam: ".$voornaam."
E-mail adres: ".$email."

Gerechten:
".$gerechten."
Totaalbedrag: EUR ".$totaal."

Wij verwachten u op:
".$verwacht."
Met vriendelijke groet,
Pieter Post";

		$headers = "From: dummie <dummie@someserver.net>\r\n";
		$headers .= "Bcc: penningmeester@someserver.net\r\n";
		if (mail($email, $onderwerp, $bericht, $headers)) {
			echo "Bedankt voor de reservering. U krijgt een email ter bevestiging.";
		} else {
			echo "Kan geen email sturen. reservering is NIET vastgeled.";
		}
		die();
	}
?>
<style>
	label {
		width: 100px;
		float:left;
	}
</style>
<script language="javascript" type="text/javascript">
	function gerecht(id, aantal, prijs) {
		if (isNaN(parseInt(aantal))) {
			document.getElementById("prijs"+id).value = "Vul een getal in"
		} else {
			document.getElementById("prijs"+id).value = aantal * prijs
		}
	}
	function totaal() {
		var totaal = 0
		for (var i=1; i <= <?php echo count($menu); ?>; ++i) {
			var waarde = document.getElementById("prijs"+i).value
			if (!isNaN(parseInt(waarde))) {
				totaal += parseInt(waarde)
			}
		}
		prijstotaal.value = totaal
	}
</script>
<h2>Inschrijvingsformulier Mosselfeest 23, 24 & 25 oktober</h2>
<form method="post" action="index.php">
	<table border='1'>
		<tr><td colspan='4'>Menus</td></tr>
		<tr><td>&nbsp;</td><td>Prijs</td><td>Aantal</td><td>Totaal</td></tr>
		<?php
			foreach ($menu as $k => $v) {
				echo "<tr><td>".$v[0]."</td><td>&euro;".$v[1]."</td><td><input type='text' name='menu[".$k."]' id='menu".$k."' onkeyup='gerecht(".$k.",this.value,".$v[1].");totaal();' /></td><td><input type='text' name='prijs".$k."' id='prijs".$k."' value='0' disabled='disabled' /></td></tr>\n";
		}
		?>
		<tr><td colspan='3'>ALGEMEEN TOTAAL:</td><td><input type='text' name='menutotaal' id='prijstotaal' value='0' disabled='disabled' /></td></tr>
	</table>
	<p>Wanneer wenst u te komen eten?</p>
	<input type="checkbox" name="verwacht[vrijdag]" /> Vrijdag<br />
	<input type="checkbox" name="verwacht[zaterdag middag]" /> Zaterdagmiddag<br />
	<input type="checkbox" name="verwacht[zaterdag avond]" /> Zaterdagavond<br />
	<input type="checkbox" name="verwacht[zondag middag]" /> Zondagmiddag<br />
	<input type="checkbox" name="verwacht[zondag avond]" /> Zondagavond<br />
	<label for="naam">Naam</label><input type="input" name="naam" /><br />
	<label for="voornaam">Vooraam</label><input type="input" name="voornaam" /><br />
	<label for="mail">E-mail</label><input type="input" name="email" /><br />
	<input type="submit" value="versturen" />
</form>
 
Laatst bewerkt:
Man man, wat een service! Hartstikke bedankt flitsflitsflits!

Ik test het deze avond als ik terug ben van mijn werk en kom dan waarschijnlijk terug met enkele bijkomende vragen.

Nogmaals :thumb:
 
flitsflitsflits, ik heb de volgende vragen:

1) ik weet niet goed of al uw code in één document moet staan? Want je verwijst naar <form ... action="index.php">, ik veronderstel dat er dus ook een index.php moet aangemaakt worden (dit heb ik vervangen door mosselfeest2.php).Ik heb daarin het eerste groot deel (uw php-code) gezet. Maar vermoed dat dit niet correct is want daarin staat deel van menu's ...

2) de bestanden die ik nu heb zijn
http://www.vlimmerensport.be/Mosselfeest/mosselfeest2.html
en
http://www.vlimmerensport.be/Mosselfeest/mosselfeest2.php
maar het is duidelijk dat het invulformulier niet correct is ...
Toch lukt het versturen van het formulier naar het e-mailadres van de user dat wordt ingevuld. Enkel de menu's aanduiden lukt niet.

3) kan ik ervoor zorgen dat de user slechts 1 checkbox kan aanklikken zodat hij slechts één moment kan kiezen (bijv. vrijdag)?

Hartelijk dank en excuses voor mijn amateurisme. Grts,


Wouter
 
3) kan ik ervoor zorgen dat de user slechts 1 checkbox kan aanklikken zodat hij slechts één moment kan kiezen (bijv. vrijdag)?



<input type="checkbox" name="verwacht[vrijdag]" /> Vrijdag<br />
vervangen door
hier even voor meer kijken


http://www.echoecho.com/htmlforms10.htm
 
Laatst bewerkt:
Bedankt Frenske123, ik heb het opgelost!
 
Laatst bewerkt:
PHP-bestanden moet je opslaan als .php niet als .html :)
 
Van:

HTML:
<input type="checkbox" name="verwacht[vrijdag]" /> Vrijdag<br />
<input type="checkbox" name="verwacht[zaterdag middag]" /> Zaterdagmiddag<br />
<input type="checkbox" name="verwacht[zaterdag avond]" /> Zaterdagavond<br />
<input type="checkbox" name="verwacht[zondag middag]" /> Zondagmiddag<br />
<input type="checkbox" name="verwacht[zondag avond]" /> Zondagavond<br />

kun je beter maken:

HTML:
<input type="checkbox" name="verwacht" value="vrijdag" /> Vrijdag<br />
<input type="checkbox" name="verwacht" value="zaterdagmiddag" /> Zaterdagmiddag<br />
<input type="checkbox" name="verwacht" value="zaterdagavond" /> Zaterdagavond<br />
<input type="checkbox" name="verwacht" value="zondagmiddag" /> Zondagmiddag<br />
<input type="checkbox" name="verwacht" value="zondagmiddag" /> Zondagavond<br />

Dan kun je in je PHP gewoon dit gebruiken:

PHP:
$verwacht = $_POST[ 'verwacht' ];

in plaats van:

PHP:
$verwacht = "";
        foreach ($_POST["verwacht"] as $k => $v) {
            $verwacht .= $k."\n";
        }
 
Bedankt ErikBooy en Frenske123!

Nu zou ik enkel nog het begin van het inschrijvingsformulier juist moeten hebben?

Kunnen jullie even kijken naar http://www.vlimmerensport.be/Mosselfeest/mosselfeest2.html en zeggen wat er verkeerd is in de code?

Moet ik de php-code bovenaan de html-pagina plakken?

<?php
$menu = array(
1=>array("Kleine portie mosselen + brood",10),
2=>array("Grote portie mosselen + brood",12),
3=>array("Kleine portie mosselen + frieten ",12),
4=>array("Grote portie mosselen + frieten",15),
5=>array("Videe + brood ",10),
6=>array("Videe + frieten ",12),
7=>array("Koude schotel",8)
);
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["naam"]) && isset($_POST["voornaam"]) && isset($_POST["email"]) && !empty($_POST["naam"]) && !empty($_POST["voornaam"]) && !empty($_POST["email"])) {
//in de volgende 3 regels indien gewenst extra checks aanbrengen
$naam = $_POST["naam"];
$voornaam = $_POST["voornaam"];
$email= $_POST["email"];

$gerechten = "";
$totaal = 0;
foreach ($_POST["menu"] as $k => $v) {
if (!empty($v) && array_key_exists($k, $menu)) {
$gerechten .= $v." X ".$menu[$k][0]." a ".$menu[$k][1]." = EUR ".($v*$menu[$k][1])."\n";
$totaal += $v*$menu[$k][1];
}
}
 
neem de code eens over van flits....... ,,,,en plak deze in een geheel lege pagina (de rest kan later)
sla die vervolgens eens op als b,v mosseltest.php of wat je wilt ... dus eindigt op .php

en geef na action de naam ook in (of hoe je de pagina hebt opgeslagen)...staat op ong. regel 83
<form method="post" action="mosseltest.php">

----------------------------

vul hier nou je eigen email account(s) in...

dummie@someserver.net
penningmeester@someserver.net

$headers = "From: dummie <dummie@someserver.net>\r\n";
$headers .= "Bcc: penningmeester@someserver.net\r\n";




Vul in.........verstuur en controleer je mail....
 
Laatst bewerkt:
Volgens mij ondersteunt je server geen PHP. De code komt namelijk letterlijk in de bron terecht.
 
Erik,

Ziehier wat "mijn" server ondersteunt: http://www.wimahosting.be/wimapack_on.php Ik heb al een ander (basic) feedbackformulier dat php gebruikt en dat werkt goed.

Wat bedoel je met "De code komt namelijk letterlijk in de bron terecht." Dat ik de php-code niet in hetzelfde document kan zetten als de rest van de code? Ik wil deze avond de stappen van frenske123 proberen zodat de menukeuze ook correct getoond wordt (en berekend), de rest van het inschrijvingsformulier werkt al (ook het verzenden via mail).

@flitsflitsflits: ik gebruik nu de radiobuttons, vind ik ook beter
 
Oh, het is al duidelijk.

Sla je bestand eens op als mosselfeest2.php . Je kunt niet zomaar PHP-code in een .html bestand neerkwakken. Dan wordt er niets mee gedaan.
 
Heren&dames

Hieronder de code die ik nu gebruik en die voor 99% perfect werkt! Alvast hartelijk dank voor jullie hulp.

http://www.vlimmerensport.be/Mosselfeest/mosselfeest3.php

Wat echter niet werkt is de live berekening van het totaal in Internet Explorer. Kan iemand hier even naar kijken :D
PHP:
<?php
    $menu = array(
        1=>array("Kleine portie mosselen + brood",10),
        2=>array("Grote portie mosselen + brood",12),
        3=>array("Kleine portie mosselen + frieten ",12),
        4=>array("Grote portie mosselen + frieten",15),
        5=>array("Vidée + brood ",10),
        6=>array("Vidée + frieten ",12),
        7=>array("Koude schotel",8)
    );
    if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["naam"]) && isset($_POST["voornaam"]) && isset($_POST["email"]) && !empty($_POST["naam"]) && !empty($_POST["voornaam"]) && !empty($_POST["email"])) {
        //in de volgende 3 regels indien gewenst extra checks aanbrengen
        $naam = $_POST["naam"];
        $voornaam = $_POST["voornaam"];
        $email= $_POST["email"];
        
        $gerechten = "";
        $totaal = 0;
        foreach ($_POST["menu"] as $k => $v) {
            if (!empty($v) && array_key_exists($k, $menu)) {
                $gerechten .= $v." X ".$menu[$k][0]." aan EUR ".$menu[$k][1]." = EUR ".($v*$menu[$k][1])."\n";
                $totaal += $v*$menu[$k][1];
            }
        }

$onderwerp = "Inschrijving mosselfeest";
$bericht = "Beste ".$voornaam.",


Bedankt voor de reservering. Wij hebben de volgende informatie van u ontvangen:
 
Voornaam: ".$voornaam."
Naam: ".$naam."
E-mailadres: ".$email."
 
Uw menukeuze:

".$gerechten."

Gelieve het totaalbedrag van EUR ".$totaal." te storten op rekeningnummer xxx-xxxxxxx-xx met de vermelding: 'Mosselfeest ".$voornaam." ".$naam."'.
 
Wij verwachten u op ".$verwacht.". Tot dan!

Met sportieve groeten,

Bestuur Vlimmeren Sport";
 
        $headers = "From: ".$voornaam." ".$naam." <".$email.">\r\n";
        $headers .= "Bcc: [email]xxx@hotmail.com[/email]\r\n";
        if (mail($email, $onderwerp, $bericht, $headers)) {
            echo "Bedankt voor de reservering. U krijgt een e-mail ter bevestiging. Gelieve het totaalbedrag te storten op rekeningnummer xxx-xxxxxxx-xx met vermelding van uw naam (zoals u die hier hebt ingegeven).";
        } else {
            echo "Kan geen e-mail versturen. De reservering is NIET vastgelegd. Probeer het opnieuw aub of contacteer ons via mail.";
        }
        die();
    }
?>
<style>
    label {
        width: 100px;
        float:left;
    }
</style>
<script language="javascript" type="text/javascript">
    function gerecht(id, aantal, prijs) {
        if (isNaN(parseInt(aantal))) {
            document.getElementById("prijs"+id).value = "Vul een getal in"
        } else {
            document.getElementById("prijs"+id).value = aantal * prijs
        }
    }
    function totaal() {
        var totaal = 0
        for (var i=1; i <= <?php echo count($menu); ?>; ++i) {
            var waarde = document.getElementById("prijs"+i).value
            if (!isNaN(parseInt(waarde))) {
                totaal += parseInt(waarde)
            }
        }
        prijstotaal.value = totaal
    }
</script>
<h2>Inschrijvingsformulier Mosselfeest 23, 24 & 25 oktober</h2>
<form method="post" action="mosselfeest3.php">
    <table border='1'>
        <tr><td colspan='4'>Menu's</td></tr>
        <tr><td>&nbsp;</td><td>Prijs</td><td>Aantal</td><td>Totaal</td></tr>
        <?php
            foreach ($menu as $k => $v) {
                echo "<tr><td>".$v[0]."</td><td>&euro;".$v[1]."</td><td><input type='text' name='menu[".$k."]' id='menu".$k."' onkeyup='gerecht(".$k.",this.value,".$v[1].");totaal();' /></td><td><input type='text' name='prijs".$k."' id='prijs".$k."' value='0' disabled='disabled' /></td></tr>\n";
        }
        ?>
        <tr><td colspan='3'>ALGEMEEN TOTAAL:</td><td><input type='text' name='menutotaal' id='prijstotaal' value='0' disabled='disabled' /></td></tr>
    </table>
    <p>Wanneer wenst u te komen eten?</p>
    <input type="radio" name="verwacht" value="vrijdag 23 oktober" /> Vrijdag<br />
    <input type="radio" name="verwacht" value="zaterdagmiddag 24 oktober" /> Zaterdagmiddag<br />
    <input type="radio" name="verwacht" value="zaterdagavond 24 oktober" /> Zaterdagavond<br />
    <input type="radio" name="verwacht" value="zondagmiddag 25 oktober" /> Zondagmiddag<br />
    <input type="radio" name="verwacht" value="zondagavond 25 oktober" /> Zondagavond<br />
    <label for="naam">Naam</label><input type="input" name="naam" /><br />
    <label for="voornaam">Vooraam</label><input type="input" name="voornaam" /><br />
    <label for="mail">E-mail</label><input type="input" name="email" /><br />
    <input type="submit" value="versturen" />
</form>
Mod: Gelieve PHP-tags om je code zetten :)
 
Laatst bewerkt door een moderator:
Maak van:

[JS]
prijstotaal.value = totaal
[/JS]

eens:

[JS]
document.getElementById('prijstotaal').value = totaal
[/JS]
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan