Door
Onbekende gebruiker
op 10-03-2017 11:09
gewijzigd op 10-03-2017 11:09
3.227 views
Doormiddel van Javascript kun je als je op een button klikt een nieuw input veld aanmaken. Deze krijgen allemaal dezelfde name en class. Alles wordt nu doormiddel van een mailtje naar de user gestuurd. Alleen pakt Javascript en PHP de laatst ingevulde input field. Dit is de code voor het aanmaken van een nieuw veld in Javascript:
Dit is de PHP code voor het verzenden voor de mail:
<?php
$naam = $_POST['naam'];
$email = $_POST['email'];
$number = $_POST['number'];
$option = $_POST['option'];
$to = $email; // Send email to our user
$subject = 'Web formulier'; // Give the email a subject
$message = '
Beste ,
'.$naam.' heeft de volgende personen nodig: '.$number.'x een '.$option.'.
We hopen u voldoende te hebben geinfomeerd!
?>
Het verzenden gaat goed, alleen pakt hij bij "volgende personen nodig" alleen de laatste ingevulde value's. Is het mogelijk om in een soort van loop te krijgen? Dat je krijgt: 4x een persoon1
2x een persoon2
Alle gegevens komen uit het form.
$_POST['number'] wordt nu steeds overschreven, dus moet je er een array van laten maken.
Dat kan heel simpel door name="number" in je HTML aan te passen naar: name="number[]"
Dan kan je uiteindelijk met een foreach() of implode() in je PHP de nummers ophalen die er ingevuld zijn.
?
Onbekende gebruiker
10-03-2017 11:50
In het HTML form heb ik de [] toegevoegd. In PHP heb ik de volgende code:
<?php
$naam = $_POST['naam'];
$email = $_POST['email'];
$datum = $_POST['datum'];
$to = $email; // Send email to our user
$subject = 'Web formulier'; // Give the email a subject
$message = '
Beste ,
'.$naam.' heeft de volgende personen nodig:';
foreach ($_POST["number"] as $numbers) {
' '.$numbers.' personen'; } 'voor '.$options.' op '.$datum.'.
We hopen u voldoende te hebben geinfomeerd!
?>
Alleen krijg ik een error dat hij de foreach nog niet verwacht.
Je echo's kloppen niet helemaal, en je foreach is een spaghetti-brei ;-)
<?php
$naam = $_POST['naam'];
$email = $_POST['email'];
$datum = $_POST['datum'];
$to = $email; // Send email to our user
$subject = 'Web formulier'; // Give the email a subject
$message = '
Beste ,
'.$naam.' heeft de volgende personen nodig:';
foreach ($_POST["number"] as $numbers) {
echo $numbers.' personen';
}
echo 'voor '.$options.' op '.$datum.'
We hopen u voldoende te hebben geinfomeerd!';
?>
?
Onbekende gebruiker
10-03-2017 12:03
Het werkt alleen worden de gegevens als echo op de pagina en niet meer als mail. En kan ik de option value na personen krijgen. Dat je krijgt: 4 personen voor functie, 2 personen voor functie2 enz.?
Ik zit dan aan twee loopjes te denken. Eentje om de functies te loopen, en eentje om de personen per functie te loopen. Het wordt dan een multi-dimensionale array.
Zo te zien zitten alleen "naam" en "option" in de loop. Deze vormen paren neem ik aan? Je kunt gebruik maken van de index (het volgnummer) van de velden om hiermee paren te maken:
<?php
foreach ($_POST['naam'] as $index => $value) {
echo $value.' keer een '.$_POST['option'][$index].'<br />';
}
?>
Om deze tekst in een string-variabele te vangen zou je de string stukje bij beetje aan elkaar kunnen rijgen met punten. Een alternatief is het opvangen van de output die op je scherm weergegeven wordt. Dit heet ook wel output buffering. Je zou het bovenstaande ook op de volgende manier in een string-variabele kunnen vangen:
<?php
ob_start(); // start output buffering
foreach ($_POST['naam'] as $index => $value) {
echo $value.' keer een '.$_POST['option'][$index].'<br />';
}
$bezetting = ob_get_clean(); // $bezetting bevat nu de tekst die je normaal op je scherm zou weergeven
?>
?
Onbekende gebruiker
10-03-2017 15:37
Ja het werkt! Dank je wel, alleen wordt de tekst op het scherm geecho't en ik wil het als een mail. Ook gebruik ik vaak ; om iets af te sluiten, daardoor wordt de mail afgebroken en wordt de tekst voor de helft gemaild.
in $bezetting staat dan je output. Die kan je in je mail verwerken.
?
Onbekende gebruiker
10-03-2017 15:58
Ik heb nu dit:
<?php
$to = $email; // Send email to our user
$subject = 'Web formulier'; // Give the email a subject
$message = '
Beste ,
'.$naam.' heeft de volgende personen nodig:';
ob_start(); // start output buffering
foreach ($_POST['number'] as $index => $value) {
echo $value.' keer een '.$_POST['option'][$index].'<br />';
}
$bezetting = ob_get_clean();
'op '.$datum.'
We hopen u voldoende te hebben geinfomeerd!';
?>
Alleen werkt de mail nog niet. De mail wordt afgekapt