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:

function addForm()
		{
			var newDiv = document.createElement("div");
			newDiv.innerHTML+='<div id="new_'+addNumber()+'"><input type="number" name="number" id="number" value="number"/> <select class="form-control" name="option[]" id="option"><option>Chefkok</option><option>Barman</option><option>Bediening</option></select> <input type="button" value="X" onclick="deleteParentElement(this)"></div>';
			container.appendChild(newDiv);
		}


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.

Alvast bedankt!
Staat je error_reporting en display_errors wel aan, en onderdruk je dus geen foutmeldingen?

Zet dit helemaal bovenaan:
<?php
error_reporting(-1);
ini_set('display_errors',true);
?>

Laat anders eens je hele code zien van dit script.
Ook met de error reporting niks. Dit is mijn code:


<?php
error_reporting(-1);
ini_set('display_errors',true);
$naam      = $_POST['naam'];
$email     = $_POST['email'];
$datum     = $_POST['datum'];

$to      = $email; // Send email to our user
$subject = 'Web formulier'; // Give the email a subject
ob_start(); // start output buffering
$message = '
Beste ,
            
'.$naam.' heeft de volgende personen nodig:';

echo "<pre>".print_r($_POST['number'],true)."</pre>"; foreach ($_POST['number'] as $index => $value) {
        echo $value.' keer een '.$_POST['option'][$index].'<br />';
        print_r($_POST['number']);
    }
    echo 'op '.$datum.'
We hopen u voldoende te hebben geinfomeerd!';
$bezetting = ob_get_clean(); 
$headers = 'From:[email protected]' . "\r\n"; // Set from headers

if(mail($to, $subject, $message, $headers)) {
    echo "Email is verzonden!";
} else {
    echo "Er is een probleem opgetreden. Probeer opnieuw!";
}
?>


[size=xsmall]Toevoeging op 13/03/2017 10:26:51:[/size]

Julian Rouw op 13/03/2017 10:25:51

Ook met de error reporting niks. Dit is mijn code:


<?php
error_reporting(-1);
ini_set('display_errors',true);
$naam      = $_POST['naam'];
$email     = $_POST['email'];
$datum     = $_POST['datum'];

$to      = $email; // Send email to our user
$subject = 'Web formulier'; // Give the email a subject
ob_start(); // start output buffering
$message = '
Beste ,
            
'.$naam.' heeft de volgende personen nodig:';

echo "<pre>".print_r($_POST['number'],true)."</pre>"; foreach ($_POST['number'] as $index => $value) {
        echo $value.' keer een '.$_POST['option'][$index].'<br />';
        print_r($_POST['number']);
    }
    echo 'op '.$datum.'
We hopen u voldoende te hebben geinfomeerd!';
$bezetting = ob_get_clean(); 
$headers = 'From:[email protected]' . "\r\n"; // Set from headers

if(mail($to, $subject, $message, $headers)) {
    echo "Email is verzonden!";
} else {
    echo "Er is een probleem opgetreden. Probeer opnieuw!";
}
?>



Kijk eens goed. Je zet nu alleen de $message in de mail, en niet de output van de buffering ;).
Nu werkt de foreach wel in de mail. Alleen wanneer ik dit neerzet: mail($to, $subject, $message, $bezetting, $headers)
Gaat hij naar de else functie, dus een fout.
Kijk eens goed op php.net/mail en kijk dan eens goed naar de syntax. Want je mail-functie klopt nog steeds niet.

Die $message is onbelangrijk voor je mail. Die zit al in je outputbuffering.
Als ik $message weglaat krijg ik alleen de foreach gegevens. Dus niet meer: "Beste, xxx heeft de volgende personen nodig:".
Gebruik $bezetting in het derde argument van je mail().
Ik heb nu dit: mail($to, $subject, $bezetting, $headers) maar krijg alleen dit:
6 keer een Chefkok<br/>2 keer een Barman<br/>4 keer een Bediening<br/>op 12-03-2017
We hopen u voldoende te hebben geinfomeerd!
in de mail.
Vergeet $message ook niet te echo'en binnen je output-buffering.
Heel erg bedankt! Het werkt, alleen de vormgeving nog een beetje aanpassen.

Reageren