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');
}


?>
In de $aData array staan de waardes.

Deze kan je met implode() samenlijmen tot een bijv. Met komma gescheiden string.

Ook kan je deze met foreach uitlezen en de inhoud samenvoegen tot één string. Die string is dan de body van de mail.
Bedankt voor je snelle antwoord.

Zou de volgende code kloppen?

<?php
foreach($aData as $gegevens) {

Hier komt de mailer in..?

}
?> 



- Ariën - op 05/04/2016 08:37:13

In de $aData array staan de waardes.

Deze kan je met implode() samenlijmen tot een bijv. Met komma gescheiden string.

Ook kan je deze met foreach uitlezen en de inhoud samenvoegen tot één string. Die string is dan de body van de mail.


Op lijn 41 moet je de mail()-functie plaatsen. Je wilt immers dat alle validaties zijn goedgekeurd, en er dus geen errors zijn.
Precies, dus als error 0 is moet hij de mailfunctie uitvoeren.

Ik kwam de volgende fucntie tegen: http://phpmailer.worxware.com/index.php?pg=examplebmail

Kan ik deze gebruiken, of is deze voor een beginner te uitgebreid?

- Ariën - op 05/04/2016 09:10:06

Op lijn 41 moet je de mail()-functie plaatsen. Je wilt immers dat alle validaties zijn goedgekeurd, en er dus geen errors zijn.


phpMailer zou ik zeker aanbevelen. met mailen gaat een stuk gemakkelijker en minder foutgevoeliger waardoor het minder sneller als spam kan worden aangemerkt vanwege foute/missende headers.
Allright, dan ga ik die gebruiken. Excuus voor de vele opvolgende vragen, maar dit is de eerste keer dat ik PHPmailer in ga bouwen. Ik zal het even proberen en het script posten. Zo iemand daarna willen kijken of hij goed geimplenteerd is?

Alvast bedankt voor de hulp, super :D

- Ariën - op 05/04/2016 09:16:40

phpMailer zou ik zeker aanbevelen. met mailen gaat een stuk gemakkelijker en minder foutgevoeliger waardoor het minder sneller als spam kan worden aangemerkt vanwege foute/missende headers.


Je kan het natuurlijk ook zelf uittesten ;-)
Krijg nog een paar foutmeldingen. Loop er even tegen aan waar ik die Foreach om die array uit te lezen plaats.

Meldingen:

Warning: file_get_contents(Test): failed to open stream: No such file or directory in C:\xampp\htdocs\formulier.php on line 55

//De body lees ik dus nog niet goed uit.

Deprecated: Function eregi_replace() is deprecated in C:\xampp\htdocs\formulier.php on line 56

//Geen idee

Fatal error: Call to undefined method PHPMailer::SetFrom() in C:\xampp\htdocs\oefening\formulier.php on line 60

//Geen idee


 
<?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!';
        }
    }
    
    //    
    foreach($aData as $gegevens) {
        
        echo $gegevens . '<br />';
    }
   
    
    // Controleren of er geen fouten opgetreden zijn
    if(empty($aErrors))
    {
		
		// PHPmailer
		
		require_once('_lib/class.phpmailer.php');

		$mail             = new PHPMailer(); // defaults to using php "mail()"

		$body             = file_get_contents($gegevens);
		$body             = eregi_replace("[\]",'',$body);

		$mail->AddReplyTo("[email protected]","First Last");

		$mail->SetFrom('[email protected]', 'First Last');

		$mail->AddReplyTo("[email protected]","First Last");

		$address = "[email protected]";
		$mail->AddAddress($address, "John Doe");

		$mail->Subject    = "Aanvraag afspraak maken";

		$mail->AltBody    = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test

		$mail->MsgHTML($body);

		if(!$mail->Send()) {
		  echo "Mailer Error: " . $mail->ErrorInfo;
		} else {
		  echo "Message sent!";
		}
			
        // 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');
}


?>

De eerste melding komt voor doordat de variabele $gegevens alleen binnen je foreach bestaat, en niet daarbuiten. Dit is makkelijk op te lossen door een nieuwe variabele aan te maken en de velden en waardes daar steeds verder aan toe te voegen.


<?php
    $inhoud = "De ingevoerde gegevens zijn:".PHP_EOL;
    foreach($aData as $veld=>$waarde) {
        $inhoud .= ucfirst($veld).": ".$waarde.PHP_EOL;
    }
?>

De variabele $inhoud kan je dan gebruiken om die in je mail te plaatsen.

Over de melding over eregi: Deze functie is verouderd en moet worden herschreven naar preg_*():

<?php
$body             = preg_replace("#[\]#",'',$body);
?>

Fatal error: Call to undefined method PHPMailer::SetFrom() in C:\xampp\htdocs\oefening\formulier.php on line 60

SetFrom is nog niet zo'n heel oude functie in PHPMailer.
Welke versie van PHPMailer heb je gebruikt?

Probeer de laatste eens

Reageren