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


?>
Langzaam komen we er dan, toch best lastig die forms.

De Preg_replace heeft nog niet het gewenste resultaat. Ook krijg ik nog een melding op lijn 56: $body = file_get_contents($inhoud);

Toevoeging op 05/04/2016 11:50:18:

De laatste versie: FE v4.11

Ivo P op 05/04/2016 11:31:10

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


Is het niet setFrom()?

En welke melding krijg je?
Nogmaals er bedankt voor je tijd. Wil het graag leren en al druk mee bezig, maar krijg het maar niet voor elkaar met die mailer.

Meldingen:

Warning: file_get_contents(De ingevoerde gegevens zijn: Firstname: Voornaam Street: Test 12 Email: [email protected] Surname: TestNijveldt Place: test Phonenumber: 0612345678 Licenseplate: 83-ie-93 Comment: Test ): failed to open stream: Invalid argument in C:\xampp\htdocs\oefening\formulier.php on line 55

Warning: preg_replace(): Compilation failed: missing terminating ] for character class at offset 3 in C:\xampp\htdocs\oefening\formulier.php on line 56

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



<?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;
    }
        
        // PHPmailer
        
        require_once('_lib/class.phpmailer.php');

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

        $body             = file_get_contents($inhoud);
		$body             = preg_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 "Bedankt, uw aanvraag is verstuurd.";
        }
            
        // 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 laatste versie: FE v4.11 "

PHPMailer heeft volgens mij nooit een versie 4 gehad....

De recentste versie is 5.2.14
Almost there. Krijg nu de volgende fouten nog:

Warning: file_get_contents(De ingevoerde gegevens zijn: Firstname: Voornaam Street: Test 12 Email: [email protected] Surname: dfasdf Place: test Phonenumber: 0612345678 Licenseplate: sdasd Comment: asds ): failed to open stream: Invalid argument in C:\xampp\htdocs\oefening\formulier.php on line 65

Mailer Error: Message body empty
$body = file_get_contents($inhoud);

Dat betekent dat $inhoud naar een file moet wijzen.

$inhoud bevat bij jouw script echter een stuk tekst mbt de ingevoerde gegevens
zie regel 46
Klopt inderdaad. Ik heb dit er nu van gemaakt:

$mail->msgHTML($body = $inhoud; );


Ivo P op 05/04/2016 13:12:34

$body = file_get_contents($inhoud);

Dat betekent dat $inhoud naar een file moet wijzen.

$inhoud bevat bij jouw script echter een stuk tekst mbt de ingevoerde gegevens
zie regel 46

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

zit me alleen af te vragen wat die preg_replace() nu precies zou moeten doen.

Alle \ vervangen? maar dan zou het mi. \\ moeten zijn.
En dan zou str_replace() een goedkopere functie zijn.

Reageren