Problème envoi formulaire

Petit nouveau ! | 3 Messages

30 avr. 2015, 09:37

Bonjour,
J'essaye d'envoyer le contenu d'un formulaire sur une boite mail tout en affichant deux messages : "Email is sending" et "Email bien envoyé".
Avec le code suivant, j'arrive presque à ce que je veux faire mais un problème demeure : lorsque je valide l'envoi du formulaire en cliquant sur le bouton submit, les deux messages s'affichent correctement mais je reçois sur ma boite mail deux emails ! Un vide et un correct ..
En bidoullant le code, j'arrive soit à ne m'envoyer qu'un seul mail mais sans afficher les 2 messages "Email is sending" et "Email bien envoyé", soit à afficher les messages mais cela m'envoie 2 mails.
Je sais que d'autres sujets du même genre ont été déjà ouvert, et j'ai du en lire au moins une dizaine mais je bloque toujours.
Si vous avez des idées, merci d'avance de m'aiguiller !

Voici mes codes correspondant (envoi de deux mails + affichage des messages).

FORMULAIRE (contact.html) :
<form id="main-contact-form" class="contact-form" method="post" action="sendemail.php">
                    <div class="col-sm-5 col-sm-offset-1">
                        <div class="form-group">
                            <label>Name *</label>
                            <input type="text" name="nom" class="form-control" required="required">
                        </div>
                        <div class="form-group">
                            <label>Email *</label>
                            <input type="email" name="email" class="form-control" required="required">
                        </div>                  
                    </div>
                    <div class="col-sm-5">
                        <div class="form-group">
                            <label>Subject *</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">Envoyer</button>
                        </div>
                    </div>
                </form>

CODE PHP (sendemail.php) :
<?php

header('Content-type: application/json');
$status = array(
    'type'=>'success',
    'message'=>'Votre Email a été correctement envoyé'
);

$name = @trim(stripslashes($_POST['nom'])); 
$email = @trim(stripslashes($_POST['email'])); 
$subject = @trim(stripslashes($_POST['subject'])); 
$message = @trim(stripslashes($_POST['message']));

$email_from = $email;
$email_to = '[email protected]';//replace with your email

$body = 'Name: ' . $name . "\n\n" . 'Email: ' . $email . "\n\n" . 'Subject: ' . $subject . "\n\n" . 'Message: ' . $message;

$success = mail($email_to, $subject, $body, 'From: <'.$email_from.'>');

echo json_encode($status);
die;
?>
CODE JS (main.js) :

Code : Tout sélectionner

jQuery(function($) {'use strict', 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> Email is sending...</p>').fadeIn() ); } }).done(function(data){ $.post("sendemail.php", $(".contact-form").serialize()); form_status.html('<p class="text-success">' + data.message + '</p>').delay(3000).fadeOut(); }); }); });

Petit nouveau ! | 3 Messages

30 avr. 2015, 11:01

J'ai trouvé, voilà pour ceux que ça intéresse :

CODE JS :

Code : Tout sélectionner

var form = $('#main-contact-form'); form.submit(function(event){ event.preventDefault(); var form_status = $('<div class="form_status"></div>'); $.ajax({ type : "POST", cache : false, url : $(this).attr('action'), data : $(this).serialize(), beforeSend: function(){ form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Email is sending...</p>').fadeIn() ); } }).done(function(data){ form_status.html('<p class="text-success">' + data.message + '</p>').delay(3000).fadeOut(); }); });

Petit nouveau ! | 3 Messages

06 mai 2015, 15:50

Je relance le sujet parce que je suis de nouveau confronté à un problème.
J'aimerais mettre en place un deuxième formulaire sur une autre page du site, qui comporte en plus la possibilité d'attacher un fichier au mail envoyé (dépôt de CV).

J'ai donc les fichiers suivants :

Fichier PHP :
<?php

header('Content-type: application/json');
$status = array(
    'type' => '',
    'message' => 'Votre message a été correctement envoyé',
    'errorsyntax' => 'Au moins un des champs contient un lien ou les caractères interdits suivants : < >, [ ]',
    'errorhp' => 'Tu es tombé dans le pot de miel',
    'errorref' => 'Mauvais referer'
);

if ($_FILES["piece_jointe"]["name"] != null) {

    $gender = @trim(stripslashes($_POST['gender']));
    $name = @trim(stripslashes($_POST['name']));
    $firstname = @trim(stripslashes($_POST['firstname']));
    $email_from = @trim(stripslashes($_POST['email']));
    $addresshp = @trim(stripslashes($_POST['addresshp']));
    $phone = @trim(stripslashes($_POST['phone']));
    $subject = @trim(stripslashes($_POST['subject']));
    $message = @trim(stripslashes($_POST['message']));
    
    $fileatt = $_FILES['piece_jointe']['tmp_name'];
    $fileatt_type = $_FILES['piece_jointe']['type'];
    $fileatt_name = $_FILES['piece_jointe']['name'];




    $email_to = '[email protected]'; 



    

    if (is_uploaded_file($fileatt)) {
        // Read the file to be attached
        $file = fopen($fileatt, 'rb');
        $attachment = fread($file, filesize($fileatt));
        fclose($file);

        // Generate a boundary string
        $semi_rand = md5(time());
        $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";

        // Add the headers for a file attachment
        $headers = 'MIME-Version: 1.0' . "\n";
        $headers .= 'Content-Type: multipart/mixed; boundary="' . $mime_boundary . '"';


        // Add a multipart boundary above the plain message
        $body = "--{$mime_boundary}\n" .
                "Content-Type: text/html; charset=\"iso-8859-1\"\n" .
                "Content-Transfer-Encoding: 7bit\n\n" .
                $message . "\n\n";

        // Base64 encode the file data
        $attachment = chunk_split(base64_encode($attachment));

        // Add file attachment to the message
        $body .= "--{$mime_boundary}\n" .
                "Content-Type: {$fileatt_type};\n" .
                " name=\"{$fileatt_name}\"\n" .
                "Content-Disposition: inline;\n" .
                " filename=\"{$fileatt_name}\"\n" .
                "Content-Transfer-Encoding: base64\n\n" .
                $attachment . "\n\n" .
                "--{$mime_boundary}--\n";
                
        $status["type"] = "success";
        $success = mail($email_to, $subject, $body, $headers);
       
    }
    
     
    else {
        $status["type"] = "failhp";  // Fichier trop gros => gerer erreur
    }
}


echo json_encode($status);
die;

Formulaire html :
<form id="main-contact-form" class="contact-form" method="post" action="mailcandidat.php" onSubmit="document.getElementById('bouton').disabled=true;" enctype="multipart/form-data">
                        <div class="col-sm-5 col-sm-offset-1">
                            <div class="form-group">
                                <label>Civilité *</label>
                                <br>
                                <input type="radio" name="gender" value="Mme." required="required" onClick="document.getElementById('bouton').disabled=false">  Mme.&nbsp &nbsp &nbsp          
                                <?php if (isset($gender) && $gender=="female") echo "checked";?>
                                <input type="radio" name="gender" value="M." onClick="document.getElementById('bouton').disabled=false">  M.
                                <?php if (isset($gender) && $gender=="male") echo "checked";?>
                            </div>
                            <div class="form-group">
                                <label>Nom *</label>
                                <input type="text" name="name" class="form-control" required="required" onClick="document.getElementById('bouton').disabled=false">
                            </div>
                            <div class="form-group">
                                <label>Prénom *</label>
                                <input type="text" name="firstname" class="form-control" required="required" onClick="document.getElementById('bouton').disabled=false">
                            </div>
                            <div class="form-group">
                                <label>Email *</label>
                                <input type="email" name="email" class="form-control" required="required" onClick="document.getElementById('bouton').disabled=false">
                            </div>
                            <div class="form-group">
                                <label>Téléphone</label>
                                <input type="number" name="phone" class="form-control" onClick="document.getElementById('bouton').disabled=false">
                            </div>
                            <div class="form-group addresshp">
                                <label>Si vous êtes un humain, ne remplissez pas ce champ *</label>
                                <input type="text" name="addresshp" class="form-control" onClick="document.getElementById('bouton').disabled=false">
                            </div>                        
                        </div>
                        <div class="col-sm-5">
                            <div class="form-group">
                                <label>Sujet *</label>
                                <input type="text" name="subject" class="form-control" required="required" onClick="document.getElementById('bouton').disabled=false">
                            </div>
                            <div class="form-group">
                                <label>Message *</label>
                                <textarea name="message" id="message" required="required" class="form-control" rows="8" onClick="document.getElementById('bouton').disabled=false"></textarea>
                            </div>
                            <div class="form-group">
                                <label for="piece_jointe">Piece jointe</label>
                                <input type="hidden" name="MAX_FILE_SIZE" value="2000000" />
                                <input type="file" name="piece_jointe" id="piece_jointe" />
                            </div>
                            <div class="form-group">
                                <button id="bouton" type="submit" name="submit" class="btn btn-primary btn-lg">Envoyer</button>
                            </div>
                            <div class="form-group">
                                <p>Les champs marqués d'une * sont obligatoires</p>
                            </div>
                        </div>
                    </form>
Le JS :

Code : Tout sélectionner

var form = $('#main-contact-form'); form.submit(function(event){ event.preventDefault(); var form_status = $('<div class="form_status"></div>'); $.ajax({ type : "POST", cache : false, url : $(this).attr('action'), data : $(this).serialize(), beforeSend: function(){ form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Envoi en cours... </p>').fadeIn() ); } }).done(function(data){ if(data.type == 'success'){ form_status.html('<p class="alert alert-success">' + data.message + '</p>').delay(3000).fadeOut(); } else if(data.type == 'failref'){ form_status.html('<p class="alert alert-danger alert-dismissible"><button type=button" class="close" data-dismiss="alert" aria-label="Fermer"><span aria-hidden="true">&times;</span></button>' + data.errorref + '</p>'); } else if(data.type == 'failsyntax'){ form_status.html('<p class="alert alert-danger alert-dismissible"><button type=button" class="close" data-dismiss="alert" aria-label="Fermer"><span aria-hidden="true">&times;</span></button>' + data.errorsyntax + '</p>'); } else if(data.type == 'failhp'){ form_status.html('<p class="alert alert-danger alert-dismissible"><button type=button" class="close" data-dismiss="alert" aria-label="Fermer"><span aria-hidden="true">&times;</span></button>' + data.errorhp + '</p>'); } }); });

Si j'enlève la ligne

Code : Tout sélectionner

event.preventDefault();
du javascript, il y a la redirection sur ma page PHP avec l'affichage du tous les $status et le mail avec la pièce jointe s'envoie bien, mais du coup sur l'autre formulaire, je reçois deux mail.

Comment faire pour garder ce script JS et l'adapter afin qu'il fonctionne avec les deux formulaires ?

D'avance merci.