Goedemorgen PHP-ers,

Via PHPtutsDOTnl http://www.phptuts.nl/view/39/8/ heb ik een tutorial gevolgd om een contactformulier te maken. Dit is de code geworden:

Nu wil ik graag een mailfunctie inbouwen, zodat de ingevulde velden via de mail verstuurd worden. Heeft iemand hier een tutorial of tip voor?

<?php

// Controle of een formulier gepost is
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
    // Arrays declareren voor opslag van fouten en data
    $aErrors = array();
    $aData = array();
    
    // Velden die in het formulier aanwezig moeten zijn
  	$aFormulierenVelden = array ("firstname", "street", "email", "surname", "place", "phonenumber", "licenseplate", "comment");
    
    // Alle formuliervelden doorlopen
    foreach($aFormulierenVelden as $sVeld)
    {
        // Controleren of er een waarde voor het formulierveld bestaat
        if(isset($_POST[$sVeld]))
        {    
            // Spaties aan begin en eind weghalen
            $sValue = trim($_POST[$sVeld]);
            
            // Controle of variabele gevuld is
            if($sValue == '')
            {
                // Foutmelding toevoegen
                $aErrors[] = 'Je bent vergeten om '.$sVeld.' in te vullen';
            }
            
            // Ingevulde waarden aan data array toevoegen
            $aData[$sVeld] = $sValue;
        }
        else
        {
            $aErrors[] = 'Het veld '.$sVeld.' is niet gepost!';
        }
    }
    
    // Controleren of er geen fouten opgetreden zijn
    if(empty($aErrors))
    {
        // Formulier succes!
        echo '<p>Bedankt, uw aanvraag is verstuurd.</p>';
    }
    else
    {
        // Fouten opgetreden: weergeven en terug naar home
        header('Refresh: 3; url=afspraak_maken.html');
        foreach($aErrors as $sError)
        {
            echo '<p style="color:red">'.$sError.'</p>';
        }
    }
}
else
{
    // Verwerk.php mag nog niet bezocht worden, terug naar het formulier
    header('Location: afspraak_maken.html');
}


?>
- Ariën - op 05/04/2016 13:31:18

Ja, maar het is nog beter om gewoon geen inhoud uit variabelen te kopiëren, en dus gewoon $inhoud te gebruiken in je mail.


Ik ben geen gevorderde. Je bedoel dat ik $inhoud kan verwerking in

mail -> $inhoud?

of message ->$inhoud ?

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

De enige foutmelding die ik nu nog krijg is: Mailer Error: Could not instantiate mail function. Ik neem aan dat dit door Xammp veroorzaakt word?
Nee, je kan gewoon $inhoud overal gebruiken, want waarom zou je dit nog eens in een $body kopiëren?

Ik vermoed dat je mail in XAMPP (php.ini) niet goed is ingesteld. Maar je kan ook in phpMailer een andere SMTP server gebruiken, of de server van Gmail. In de manuals staan er vast een hoop examples van.
In dit geval wilde ik alle mailfuncties zoveel mogelijk in takt houden. Ik snap je punt dat ik overal de $inhoud kan opvragen.

Het ligt inderdaad aan Xammp.

Wil je er bedanken voor je tijd en hulp. Kan ik nog een +1 geven?

Voor iedereen hier het script:


HTML:

                        <!-- / form box \ -->
                        <div class="formBox">
                          <form action="formulier.php" method="post">
                                <fieldset>
                                    <div class="holder">
									
                                        <div class="block">
                                            <label class="label">Voornaam</label>
                                            <input type="text" name="firstname" required />
                                            <label class="label">Straatnaam + Huisnummer</label>
                                            <input type="text" name="street" required />
                                            <label class="label">E-mailadres</label>
                                            <input type="text" name="email" required />
                                        </div>
										
                                        <div class="block">
                                            <label class="label">Achternaam</label>
                                            <input type="text" name="surname" required />
                                            <label class="label">Woonplaats</label>
                                            <input type="text" name="place" required />
                                            <label class="label">Telefoonummer</label>
                                            <input type="text" name="phonenumber" required />
                                        </div>
                                    </div>
									
                                    <div class="clear"></div>
									
                                    <label class="label">Kenteken</label>
                                    <input type="text" name="licenseplate" required />
                                    <label class="label">Opmerking</label>
                                    <textarea rows="5" cols="5" class="textarea" name="comment" ></textarea>
                                    
									<input type="submit" value="VERSTUREN" class="button" /> 
                                </fieldset>
                            </form>
                        </div>
                        <!-- \ form box / -->



Php (formulier.php)

<?php

// Controle of een formulier gepost is
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
    // Arrays declareren voor opslag van fouten en data
    $aErrors = array();
    $aData = array();
    
    // Velden die in het formulier aanwezig moeten zijn
      $aFormulierenVelden = array ("firstname", "street", "email", "surname", "place", "phonenumber", "licenseplate", "comment");
    
    // Alle formuliervelden doorlopen
    foreach($aFormulierenVelden as $sVeld)
    {
        // Controleren of er een waarde voor het formulierveld bestaat
        if(isset($_POST[$sVeld]))
        {    
            // Spaties aan begin en eind weghalen
            $sValue = trim($_POST[$sVeld]);
            
            // Controle of variabele gevuld is
            if($sValue == '')
            {
                // Foutmelding toevoegen
                $aErrors[] = 'Je bent vergeten om '.$sVeld.' in te vullen';
            }
            
            // Ingevulde waarden aan data array toevoegen
            $aData[$sVeld] = $sValue;
        }
        else
        {
            $aErrors[] = 'Het veld '.$sVeld.' is niet gepost!';
        }
    }
    

    
    // Controleren of er geen fouten opgetreden zijn
    if(empty($aErrors))
    {
		
	$inhoud = "De ingevoerde gegevens zijn:".PHP_EOL;
    foreach($aData as $veld=>$waarde) {
        $inhoud .= ucfirst($veld).": ".$waarde.PHP_EOL;
    }
        
	/**
	 * This example shows sending a message using PHP's mail() function.
	 */
	require 'PHPMailer-master/PHPMailerAutoload.php';
	//Create a new PHPMailer instance
	$mail = new PHPMailer;
	//Set who the message is to be sent from
	$mail->setFrom('[email protected]', 'First Last');
	//Set an alternative reply-to address
	$mail->addReplyTo('[email protected]', 'First Last');
	//Set who the message is to be sent to
	$mail->addAddress('[email protected]', 'John Doe');
	//Set the subject line
	$mail->Subject = 'PHPMailer mail() test';
	//Read an HTML message body from an external file, convert referenced images to embedded,
	//convert HTML into a basic plain-text alternative body
	$mail->msgHTML($body = $inhoud);
	//Replace the plain text body with one created manually
	$mail->AltBody = 'Offerte aanvraag:';

	//send the message, check for errors
	if (!$mail->send()) {
		echo "Er is een fout opgetreden: " . $mail->ErrorInfo;
	} else {
		echo "Uw aanvraag is verstuurd! Wij nemen z.s.m contact met u op.";
	}
        
    }
    else
    {
        // Fouten opgetreden: weergeven en terug naar home
        header('Refresh: 3; url=afspraak_maken.html');
        foreach($aErrors as $sError)
        {
            echo '<p style="color:red">'.$sError.'</p>';
        }
    }
}
else
{
    // Verwerk.php mag nog niet bezocht worden, terug naar het formulier
    header('Location: afspraak_maken.html');
}


?> 




- Ariën - op 05/04/2016 14:01:20

Nee, je kan gewoon $inhoud overal gebruiken, want waarom zou je dit nog eens in een $body kopiëren?

Ik vermoed dat je mail in XAMPP (php.ini) niet goed is ingesteld. Maar je kan ook in phpMailer een andere SMTP server gebruiken, of de server van Gmail. In de manuals staan er vast een hoop examples van.


Dit voldoet al prima:

    $mail->msgHTML($inhoud);


Je moet php.ini goed instellen. Of anders een SMTP van je provider met de SMTP-functies van phpMailer.
Zie ook de examples:
https://github.com/PHPMailer/PHPMailer/tree/master/examples

Dus dit kan je anders toevoegen, met de juiste waardes dan uiteraard:

//Tell PHPMailer to use SMTP
$mail->isSMTP();
//Enable SMTP debugging
// 0 = off (for production use)
// 1 = client messages
// 2 = client and server messages
$mail->SMTPDebug = 2;
//Ask for HTML-friendly debug output
$mail->Debugoutput = 'html';
//Set the hostname of the mail server
$mail->Host = "mail.example.com";
//Set the SMTP port number - likely to be 25, 465 or 587
$mail->Port = 25;
//Whether to use SMTP authentication
$mail->SMTPAuth = true;
//Username to use for SMTP authentication
$mail->Username = "[email protected]";
//Password to use for SMTP authentication
$mail->Password = "yourpassword";
//Set who the message is to be sent from
Bedankt voor de hulp, waardeer het zeer.

PHPHULP, PHPHULP!
Graag gedaan!

Reageren