Problemen met php contact formulier

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jan Smit

Jan Smit

19/07/2016 18:19:24
Quote Anchor link
Hoi,

Ik ben geen goede webmaster maar een beginner.
Ik heb een email template gedownload van een website. Alles werkt behalve wanneer ik het ingevulde formulier wil versturen geeft het een foutmelding namelijk "Could not send mail! Please check your PHP mail configuration."

Kan iemand mij hiermee helpen? Ik heb er al weken aan besteed voor de oplossing maar het lukt niet... :-(
Ik hoop dat jullie me verder kunnen helpen.

HTML CODE:
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
<!-- Contact section -->
<section id="contact" class="contact content-section no-bottom-pad">
<div class="container">
<div class="row text-center">
<div class="col-md-12">
<h2>Contact</h2>
<h3 class="caption gray">Neem gerust contact met ons op als je denkt dat wij je ergens mee kunnen helpen.</h3>
</div><!-- /.col-md-12 -->

</div><!-- /.row -->
</div><!-- /.container -->

<div class="container">
<div class="row form-container">

<div class="col-md-8 contact-form">
<h3>Laat een bericht achter</h3>
<form class="ajax-form" id="contactForm" method="post" action="assets/php/contact.php">
<div class="form-group">
<input type="text" class="form-control" id="name" name="name" placeholder="Jouw naam..." value="" required>
</div>
<div class="form-group">
<input type="email" class="form-control" id="email" name="email" placeholder="Jouw email..." value="" required>
</div>
<div class="form-group">
<input type="phone" class="form-control" id="phone" name="phone" placeholder="Jouw telefoonnummer..." value="" required>
</div>
<div class="form-group">
<textarea class="form-control" rows="4" name="message" placeholder="Jouw bericht..." required></textarea>
</div>
<div class="form-group">
<button type="submit" name="submit" class="btn btn-default"><i class="fa fa-paper-plane fa-fw"></i>Verzenden</button>
</div>
</form>
</div><!-- /.contact-form -->


PHP CODE:
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
<?php
header('Content-type: application/json');

if($_POST)
{

$to_email = "[email protected]"; //Recipient email, Replace with own email here

//check if its an ajax request, exit if not

if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {

$output = json_encode(array( //create JSON data
'type'=>'error',
'text' => 'Sorry Request must be Ajax POST'
));
die($output); //exit script outputting json data
}

//Sanitize input data using PHP filter_var().
$user_name = filter_var($_POST["name"], FILTER_SANITIZE_STRING);
$user_email = filter_var($_POST["email"], FILTER_SANITIZE_EMAIL);
$phone_number = filter_var($_POST["phone"], FILTER_SANITIZE_NUMBER_INT);
$message = filter_var($_POST["message"], FILTER_SANITIZE_STRING);

//additional php validation
if(strlen($user_name)<4){ // If length is less than 4 it will output JSON error.
$output = json_encode(array('type'=>'error', 'text' => 'Naam is te kort of leeg'));
die($output);
}


if(!filter_var($user_email, FILTER_VALIDATE_EMAIL)){ //email validation
$output = json_encode(array('type'=>'error', 'text' => 'Vul alsjeblieft een geldig email in'));
die($output);
}



if(!filter_var($phone_number, FILTER_SANITIZE_NUMBER_FLOAT)){ //check for valid numbers in phone number field
$output = json_encode(array('type'=>'error', 'text' => 'Voer alleen cijfers in'));
die($output);
}


if(strlen($message)<3){ //check emtpy message
$output = json_encode(array('type'=>'error', 'text' => 'Sorry, een te kort bericht. Vul iets in'));
die($output);
}


//email subject
$subject ='Bericht via de website Force 10';

//email body
$message_body = $message."\r\n\r\n-".$user_name."\r\n\r\nEmail : ".$user_email."\r\nPhone Number : ". $phone_number ;

//proceed with PHP email.
$headers = 'From: '.$user_name.'<'.$user_email.'>'."\r\n" .
'Reply-To: '.$user_name.'<'.$user_email.'>' . "\r\n" .
'X-Mailer: PHP/' . phpversion();

$send_mail = mail($to_email, $subject, $message_body, $headers);

if(!$send_mail)
{

//If mail couldn't be sent output error. Check your PHP email configuration (if it ever happens)
$output = json_encode(array('type'=>'error', 'text' => 'Could not send mail! Please check your PHP mail configuration.'));
die($output);
}
else{
$output = json_encode(array('type'=>'success', 'text' => 'Hi '.$user_name .', Bedankt voor je bericht. We zullen zsm contact opnemen.'));
die($output);
}
}



?>

Gelieve in het vervolg bij code de [code][/code]-tags gebruiken. Quote-tags zijn uitsluitend bedoeld voor citaten.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt![/modedit]
Gewijzigd op 19/07/2016 20:19:15 door Jan Smit
 
PHP hulp

PHP hulp

24/11/2024 06:45:19
 
- Ariën  -
Beheerder

- Ariën -

19/07/2016 18:40:13
Quote Anchor link
Draai je dit bij een webhosting of op een eigen (ontwikkel)server?

PS: Om spam te voorkomen heb ik je e-mailadres uit je bericht gehaald.
Gewijzigd op 19/07/2016 18:41:06 door - Ariën -
 
Michael -

Michael -

19/07/2016 20:15:55
Quote Anchor link
Heb je meer bestanden? Misschien een config bestand waarin je een SMTP server in moet vullen? Zo niet, zijn de SMTP gegevens van de server goed ingevuld? Kun je wel een mail naar jezelf sturen met de functie mail() ?
 
Jan Smit

Jan Smit

19/07/2016 20:26:33
Quote Anchor link
Hoi,

Alvast bedankt dat jullie me willen helpen.

Ik draai alles op de server van mijn webhost. Niets zelf aangemaakt.

Waar in de code zou ik de SMTP gegevens in moeten invullen dan? Moet ik misschien niet bepaalde SMTP parameters aan de code toevoegen? Zo ja, welke en waar?

Hoe stuur ik een mail naar mijzelf met de functie mail()
(een groentje ben ik he :-))

Ik heb ook nog een code gevonden mbt contact form in een JavaScript. Maar volgens mij heeft dat niets met uitgaande mail server te maken toch?

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
// Contact form
$(function() {
    // validate contact form on keyup and submit
    $("#contactForm").validate({
        rules: {
            name: {
                required: true,
                minlength: 2,
                lettersonly: true
            },
            email: {
                required: true,
                minlength: 6,
                email: true
            },
            phone: {
                required: true,
                digits: true,
                minlength: 10,
                maxlength: 15
            },
            message: {
                required: true,
                minlength: 6
            }
        },
        messages: {
            name: {
                required: "Vul aub je naam in",
                minlength: "Minimaal 2 karakters",
                lettersonly: "Alleen letters aub!"
            },
            email: {
                required: "Vul aub je emailadres in",
                minlength: "Minimaal 6 karakters",
                email: "Dat is een ongeldige email"
            },
            phone: {
                required: "Vul aub je telefoonnummer in",
                digits: "Alleen cijfers. Geen spaties aub",
                minlength: "Minimaal 10 karakters",
                maxlength: "Maximaal 15 karakters"
            },
            message: {
                required: "Vul aub je bericht in",
                minlength: "Minimaal 6 karakters"
            }
        },
        success: function(label) {
            label.addClass("valid").text("Dat ziet er goed uit!");
        },
        submitHandler: function(element) {

            var ajaxform = $(element),
                url = ajaxform.attr('action'),
                type = ajaxform.attr('method'),
                data = {};

            $(ajaxform).find('[name="submit"]').html('<i class="fa fa-circle-o-notch fa-spin fa-fw"></i> Aan het versturen...');


            ajaxform.find('[name]').each(function(index, value) {
                var field = $(this),
                    name = field.attr('name'),
                    value = field.val();

                data[name] = value;

            });

            $.ajax({
                url: url,
                type: type,
                data: data,
                success: function(response) {
                    if (response.type == 'success') {
                        $("#contactForm").before("<div class='alert alert-success' role='alert'><a href='#' class='close' data-dismiss='alert'>&times;</a>" + response.text + "</div>");
                        $(ajaxform).each(function() {
                            this.reset();
                            $(this).find('[name="submit"]').html('<i class="fa fa-paper-plane fa-fw"></i> Send');
                        }).find('.valid').each(function() {
                            $(this).remove('label.valid');
                        })
                    } else if (response.type == 'error') {
                        $("#contactForm").before("<div class='alert alert-danger' role='alert'><a href='#' class='close' data-dismiss='alert'>&times;</a>" + response.text + "</div>");
                        $(ajaxform).find('[name="submit"]').html('<i class="fa fa-paper-plane fa-fw"></i> Send');
                    }
                }
            });

            return false;
        }
    });

});
 
- Ariën  -
Beheerder

- Ariën -

19/07/2016 20:50:58
Quote Anchor link
Die code is inderdaad niet relevant.

Werkt een normale mail wel, volgens Sample #1?
http://php.net/manual/en/function.mail.php
 
Frank Nietbelangrijk

Frank Nietbelangrijk

19/07/2016 20:52:41
Quote Anchor link
Hoi Eelco,

Ik denk dat je even een zijsprongetje moet maken. Jouw script dat je als eerste gepost hebt maakt gebruik van de php mail() functie op regel 57 van het tweede stukje script. Als je nu op php.net naar deze functie kijkt en dan kijkt wat deze functie terug kan geven dan kun je lezen dat dit TRUE is als het aanleveren voor verzending goed gaat of FALSE als het niet lukt. In jouw situatie krijg je dus blijkbaar een FALSE terug. Hoogstwaarschijnlijk komt dat omdat jouw provider de mail() functie heeft uitgeschakeld. Je zou dit in de FAQ van je provider terug moeten kunnen vinden of anders middels de support.
De kans bestaat dat je te horen krijgt dat je de email via SMTP moet versturen. In dat geval is dit script niet toereikend genoeg en kun je het beste gebruik maken van PHPMailer. Dit zal je waarschijnlijk erg ingewikkeld overkomen maar met een beetje hulp van ons is dit wel te doen.
 
Jan Smit

Jan Smit

21/07/2016 10:52:03
Quote Anchor link
Hoi,

Ik heb wederom contact gehad met mijn host. Ivm veiligheidsmaatregelen kan het formulier niet verstuurd worden vanuit een ander emailadres. Dit moet altijd een eigen server adres zijn (in mijn geval @force10.tv

Zij zeggen: "...omdat je formulier momenteel dusdanig in elkaar zit dat het het ingevulde e-mail adres (bijvoorbeeld het @hotmail adres wat je noemt) als afzender adres gebruikt, maar dit mag dus niet (het from: adres). Het afzender adres moet altijd, in dit geval, een @force10.tv adres zijn, dit moet als statische waarde worden ingesteld."

Wanneer ik een @force10.tv adres in het formulier invul, dan wordt het formulier wel verstuurd.

Verder zeggen zij:" ...maar je zult wel nog zelf het formulier moeten aanpassen zodat de afzender (het FROM en REPLY-TO adres) altijd een @force10.tv adres is."

Maar hoe geef ik in de php code aan dat From: een @force10.tv adres moet zijn? Kan iemand mij helpen met het toevoegen/plaatsen van deze parameters in de code?

Alvast heel erg veel dank!

Groet,
Eelco
 
Jan Graneker

Jan Graneker

21/07/2016 11:06:16
Quote Anchor link
$phpMailer->SetFrom("[email protected]", "standaard e-mail naam");

Toevoeging op 21/07/2016 12:12:14:

Ik dat je geen PHPmailer gebruikt, dan kan je dit aanpassen:

$headers = 'From: 'JOUWNAAM'<'JOUW E-mail'>'."\r\n" .
 
Jan Smit

Jan Smit

21/07/2016 19:26:46
Quote Anchor link
Hoi,

Ik heb de regel aangepast maar het formulier wordt nog niet weg gezonden.


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
$headers = 'From: 'Force 10' <'[email protected]'>'."\r\n" .
    'Reply-To: '.$user_name.' <'.$user_email.'>' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();


Doe ik nog iets verkeerd?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

21/07/2016 19:36:28
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$headers
= 'From: 'Force 10' <'info@force10.tv'>'."\r\n" .
?>


versus
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$headers
= 'From: [email protected]' . "\r\n" .
?>


Let eens goed op de quotes (' en ")!
en download een php editor zoals bijvoorbeeld Netbeans
zodat er direct dit soort fouten getoond worden.
 
Jan Smit

Jan Smit

21/07/2016 19:42:56
Quote Anchor link
Hi Frank,

Dank voor je antwoord.

Waar zit de fout in dan? Want in de code wordt " en ' afwisselend gebruikt?

Toevoeging op 21/07/2016 19:50:40:

Hi,

Het is verholpen! Het formulier werkt nu succesvol.

Juiste code is:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
$headers = 'From: [email protected]' . "\r\n" .
    'Reply-To: '.$user_name.' <'.$user_email.'>' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();
 
Frank Nietbelangrijk

Frank Nietbelangrijk

21/07/2016 19:55:31
Quote Anchor link
Eelco als je naar de single quotes kijkt dan zie je er vijf in deze string:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
'From: 'Force 10' <'info@force10.tv'>'
?>

En dit terwijl het er twee zouden moeten zijn om het begin en het einde van het tekstblok (of string) aan te geven. Bijvoorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$name
= 'Eelco Versteeg';
?>

Heb je nu toch een ' teken nodig midden in een string dan zul je die moeten escapen met een backslash (\).

Voorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$city
= '\'s-Gravenhage';
?>


Hetzelfde heb je met double quotes alleen kun je met double quotes wat meer trucjes uithalen waaronder de "\r" en "\n" die voor carriage return en new line staan.

Om deze reden schrijf ik mijn database queries (Opdrachten) het liefst tussen double quotes omdat single quotes in de queries gebruikt worden.

Bijvoorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$query
= "UPDATE users SET name='Frank' WHERE id=1";
?>
 
Jan Smit

Jan Smit

21/07/2016 22:16:49
Quote Anchor link
Bedankt voor je duidelijke uitleg! PHP is zoveel anders dan html. Pfieuw... Oefening baart kunst! :-)
 



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.