Problème de formulaire de contact - d'email vide

Petit nouveau ! | 3 Messages

25 nov. 2014, 12:31

Bonjour,

Je rencontre un problème lors de l'envoi du mail via le formulaire de contact de mon site.
Le mail est correctement envoyé, mais les champs sont vides !

Ce que je reçois :

(sans objet)
(expediteur inconnu)
Nom:
Email:
Téléphone:
Société:
Sujet:
Message:


Le code HTML :
<div class="row contact-wrap"> 
                <div class="status alert alert-success" style="display: none"></div>
                <form id="main-contact-form" class="contact-form" name="contact-form" method="post" action="sendemail.php">
                    <div class="col-sm-5 col-sm-offset-1">
                        <div class="form-group">
                            <label>Nom *</label>
                            <input type="text" name="name" class="form-control" value="name" required pattern="[a-zA-Z -]{3,40}" required="required">
                        </div>
                        <div class="form-group">
                            <label>Email *</label>
                            <input type="email" name="email" class="form-control" required="required">
                        </div>
                        <div class="form-group">
                            <label>Téléphone</label>
                            <input type="number" name="tel" class="form-control">
                        </div>
                        <div class="form-group">
                            <label>Société</label>
                            <input type="text" name="ste" class="form-control">
                        </div>                        
                    </div>
                    <div class="col-sm-5">
                        <div class="form-group">
                            <label>Sujet *</label>
                            <input type="text" name="subject" class="form-control" required="required">
                        </div>
                        <div class="form-group">
                            <label>Message *</label>
                            <textarea name="message" id="message" required="required" class="form-control" rows="8"></textarea>
                        </div>                        
                        <div class="form-group">
                            <button type="submit" name="submit" class="btn btn-primary btn-lg submit" required="required">Envoyer !&nbsp; &nbsp; &nbsp;<i class="fa fa-paper-plane" style="color:#12A99A;"></i></button>
                        </div>
                    </div>
                </form> 
            </div>
Le PHP :
<?php
	header('Content-type: application/json');
	$status = array(
		'type'=>'success',
		'message'=>'Merci pour votre message, je vous recontacte rapidement ! '
	);

    $name = @trim(stripslashes($_POST["name"]));
    $email = @trim(stripslashes($_POST["email"]));
    $tel = @trim(stripslashes($_POST["tel"]));
    $ste = @trim(stripslashes($_POST["ste"]));
    $subject = @trim(stripslashes($_POST["subject"]));
    $message = @trim(stripslashes($_POST["message"])); 

    $email_from = $email;
    $email_to = '[email protected]';

    $body = "Nom: " . $name . "\n\n" . "Email: " . $email . "\n\n" . "Téléphone: " . $tel . "\n\n" . "Société: " . $ste . "\n\n" . "Sujet: " . $subject . "\n\n" . "Message: " . $message;
    
    $mail_OK=mail($email_to, $subject, $body, 'From: <'.$email_from.'>');

    echo json_encode($status);
    die;
    
Le js :

[javascript]var form = $('#main-contact-form');
form.submit(function(event){
event.preventDefault();
var form_status = $('<div class="form_status"></div>');
$.ajax({
url: $(this).attr('action'),

beforeSend: function(){
form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Envoi en cours...</p>').fadeIn() );
}
}).done(function(data){
form_status.html('<p class="text-success">' + data.message + '</p>').delay(3000).fadeOut();
});
});
[/javascript]

(pour tenter de vous aiguiller, j'ai remplacé pour un test les lignes $name = @trim(stripslashes($_POST["name"])); par $name = test; , ça apparait bien dans le mail...)

Voila, ça fait un moment que je galère, merci d'avance pour votre aide !

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

25 nov. 2014, 13:05

Bonjour,

Pour débuguer ton code :
1/ Affiche les outils de développement dans ton navigateur (Ctrl+Maj+I sous Firefox), va dans l'onglet Réseau et soumet ton formulaire pour voir ce qui est envoyé à ton serveur et sous quel forme (GET ou POST).

2/ Ensuite, dans ton code PHP, supprime les arobases qui justement masquent les messages d'erreurs et affiche ce qui est reçu, par exemple avec un var_dump($_POST).

Ça devrait te permettre de comprendre ce qui est envoyé par ton navigateur et ce qui est reçu par ton serveur.
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 3 Messages

25 nov. 2014, 14:27

(j'ai créer un compte entre temps)

La méthode c'est GET (a cause du js je suppose ?).

Le var_dump($_POST) fait tout planter, c-a-d que le formulaire n'envoie rien, il affiche envoi en cours indéfiniment.
En remplaçant $message = trim(stripslashes($_POST["message"])); par $message = $_GET["message"]; j'obtiens le même résultat (email vide)

Ce n'est peut être pas la manip' que tu me proposais, auquel cas c'est que je ne t'ai pas compris.

Merci quand même de ta réponse rapide !

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

25 nov. 2014, 14:42

Dans les outils de développement, onglet réseau, tu peux cliquer sur chaque requête et voir les paramètres qui sont envoyés et la réponse renvoyée par le serveur.
C'est là que tu verras le contenu de ton var_dump (qui fait planter ton formulaire ensuite mais ça c'est pas grave, on le retirera après le debug)

:!: Un point important à avoir en-tête :
Ton script tel que tu l'as posté contient une faille de sécurité qui pourra (et sera) exploité par des spammeurs (et pas que vis à vis de toi mais ils se serviront de ton site comme plateforme d'envoi). Une fois que tu auras débugé ton script pour qu'il fonctionne, il faudra que tu filtres tous les champs reçu en entrée.
Voici l'explication de la faille : http://www.phpbuilder.com/columns/ian_g ... 60412.php3
Et un lien vers les fonctions filter qui te permettront de faire cela facilement : http://php.net/manual/fr/book.filter.php
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 3 Messages

25 nov. 2014, 15:23

Alors en reponse j'ai :
JSON.parse : unexpected character at line 1 column 1 of the JSON data
suivis de ces lignes de code :
array(0) {
}
{"type":"success","message":"Merci pour votre message, je vous recontacte rapidement ! "}
Et merci pour l'avertissement de sécurité, je corrige ça le jour ou le formulaire marche ^^

ynx
Mammouth du PHP | 586 Messages

25 nov. 2014, 15:31

Salut,

Le problème vient simplement du fait que ta requête ajax n'envoie aucune données à ton script php : http://api.jquery.com/jquery.ajax/#send ... -to-server

Pour envoyer les données en utilisant la méthode POST, il faut renseigner le paramètre type ou utiliser la fonction jQuery $.post à la place de $.ajax : http://api.jquery.com/jquery.post
Pour envoyer les données du formulaire, il faut utiliser le paramètre data. Il est possible de le faire très simplement avec la fonction serialize() : http://api.jquery.com/jquery.post/#example-3

Bonne journée