Php formulier mailen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Jan Graneker

Jan Graneker

05/04/2016 08:28:40
Quote Anchor link
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?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?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');
}



?>
[/CODE]
Gewijzigd op 05/04/2016 08:30:04 door Jan Graneker
 
PHP hulp

PHP hulp

04/12/2024 20:50:05
 
- Ariën  -
Beheerder

- Ariën -

05/04/2016 08:37:13
Quote Anchor link
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.
 
Jan Graneker

Jan Graneker

05/04/2016 09:07:36
Quote Anchor link
Bedankt voor je snelle antwoord.

Zou de volgende code kloppen?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?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.
Gewijzigd op 05/04/2016 09:08:33 door - Ariën -
 
- Ariën  -
Beheerder

- Ariën -

05/04/2016 09:10:06
Quote Anchor link
Op lijn 41 moet je de mail()-functie plaatsen. Je wilt immers dat alle validaties zijn goedgekeurd, en er dus geen errors zijn.
 
Jan Graneker

Jan Graneker

05/04/2016 09:14:03
Quote Anchor link
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.
 
- Ariën  -
Beheerder

- Ariën -

05/04/2016 09:16:40
Quote Anchor link
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.
 
Jan Graneker

Jan Graneker

05/04/2016 09:47:46
Quote Anchor link
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.
 
- Ariën  -
Beheerder

- Ariën -

05/04/2016 09:52:57
Quote Anchor link
Je kan het natuurlijk ook zelf uittesten ;-)
 
Jan Graneker

Jan Graneker

05/04/2016 10:39:17
Quote Anchor link
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


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102

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



?>


[/CODE]
 
- Ariën  -
Beheerder

- Ariën -

05/04/2016 11:10:22
Quote Anchor link
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?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_*():
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$body
             = preg_replace("#[\]#",'',$body);
?>
 
Ivo P

Ivo P

05/04/2016 11:31:10
Quote Anchor link
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
 
Jan Graneker

Jan Graneker

05/04/2016 11:49:41
Quote Anchor link
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
 
- Ariën  -
Beheerder

- Ariën -

05/04/2016 12:01:39
Quote Anchor link
Is het niet setFrom()?

En welke melding krijg je?
 
Jan Graneker

Jan Graneker

05/04/2016 12:08:43
Quote Anchor link
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



Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
<?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');
}



?>
[/CODE]
Gewijzigd op 05/04/2016 12:09:20 door Jan Graneker
 
- Ariën  -
Beheerder

- Ariën -

05/04/2016 12:15:00
Quote Anchor link
Gebruik dan eens deze expressie: #\[\]#, hopelijk werkt die wel.

Gebruik verder bij voorkeur de GitHub versie: https://github.com/PHPMailer/PHPMailer
En kijk dan eens naar deze example.
 
Ivo P

Ivo P

05/04/2016 12:40:07
Quote Anchor link
"De laatste versie: FE v4.11 "

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

De recentste versie is 5.2.14
 
Jan Graneker

Jan Graneker

05/04/2016 13:00:44
Quote Anchor link
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
Gewijzigd op 05/04/2016 13:09:12 door Jan Graneker
 
Ivo P

Ivo P

05/04/2016 13:12:34
Quote Anchor link
$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
 
Jan Graneker

Jan Graneker

05/04/2016 13:29:37
Quote Anchor link
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
Gewijzigd op 05/04/2016 13:31:20 door Jan Graneker
 
- Ariën  -
Beheerder

- Ariën -

05/04/2016 13:31:18
Quote Anchor link
Ja, maar het is nog beter om gewoon geen inhoud uit variabelen te kopiëren, en dus gewoon $inhoud te gebruiken in je mail.
 
Ivo P

Ivo P

05/04/2016 13:32:01
Quote Anchor link
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.
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.