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.     
<?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">×</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">×</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">×</span></button>' + data.errorhp + '</p>');
}
});
});
Si j'enlève la ligne
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.
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 :
[b][u]Fichier PHP :[/u][/b]
[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;[/php]
[u][b]Formulaire html : [/b][/u]
[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.     
<?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>[/html]
[b][u]Le JS [/u][/b]:
[code]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">×</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">×</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">×</span></button>' + data.errorhp + '</p>');
}
});
});[/code]
Si j'enlève la ligne [code] event.preventDefault();[/code] 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.