Aide - Recherche - Membres - Calendrier
Version complète : Formulaire html/php chargé par Ajax
Forum Développeur - Administration serveur, programmation et base de données > Programmation > Javascript et AJAX
LaPomme
Bonjour,

J'ai un méga soucis avec un formulaire! Je m'explique:
J'ai un formulaire tout simple nom/mail/sujet/message
et je souhaite que lorsque je clique sur envoyer cela ne charge pas la page "verif.php" (ou se trouve mon code php pour l'envoi du mail) mais la charge au sein de la div qui contient le formulaire.
J'utilise donc Ajax pour réaliser ça... mais... ça marche pas. :/

Voici le code:

-page du formulaire:

PHP

<h4>Formulaire en ligne:</h4> 
<div id="form">
<form method="POST" onSubmit="load_form(this.?verif);return false;" id="formail">
<input type=hidden name=subject value=formmail>
<div class="text">
<div>Nom: <input type="text" class="form" value="" name="nom"></div>
<div>E-mail: <input type="text" class="form" value="" name="mail"></div>
<div>Sujet: <input type="text" class="form" value="" name="titremessage"></div>
<div>Message: <textarea rows="5" cols="25" class="textarea" name="mess"></textarea></div>
<div>
<a href="#form" onclick="document.getElementById('formail').reset()">Annuler</a>
<a href="#" onclick="document.getElementById('formail').submit()">Envoyer</a>
</div>
</div>
</form>
</div>


-page verif.php

PHP

<div> 
<?
$headers="De: ".$nom;
$message="Sujet: ".$titremessage." Message: ".$mess." De: ".$nom." (".$mail." )";
mail("monmail@monsite.com",$titremessage,$message,$headers);
echo ('Votre message a bien été envoyé');
?>
</div>


_fonction ajax

PHP

function load_form(select) { 
var xhr2 = new_xhr();//On crée un nouvel objet XMLHttpRequest
xhr2.onreadystatechange = function(){
if ( xhr2.readyState == 4 ){//Actions executées une fois le chargement fini
if(xhr2.status != 200){//Message si il se preoduit une erreur
document.getElementById("form").innerHTML ="Erreur code " + xhr2.status;
} else {//On met le contenu du fichier externe dans la div "main"
var c= document.getElementById("form");
c.innerHTML = xhr2.responseText;
var allscript = c.getElementsByTagName('script');
for(var i=0;i< allscript.length;i++){
eval(allscript[i].text);
}
}
} else {//Message affiché pendant le chargement
document.getElementById("form").innerHTML = "Chargement en cours ...<br /><img src='./images/images/loading.gif' alt=''/>";
}
}
xhr2.open("GET", select.split('?')[1]+".php", true);//Appel du fichier externe
xhr2.send(null);
}


Je planche dessus depuis trop de temps en ayant essayé trop de choses sans succès je commence à devenir sénile je crois!
Merci de votre aide!
Antho.
LaPomme
Je vais me répondre à moi même...

ajax.js

PHP


function new_xhr(){
var xhr_object = null;
if(window.XMLHttpRequest) // Firefox et autres
xhr_object = new XMLHttpRequest();
else if(window.ActiveXObject){ // Internet Explorer
try {
xhr_object = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
}
}
else { // XMLHttpRequest non supporté par le navigateur
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
xhr_object = false;
}
return xhr_object;
}
function envoiformulaire() {
var xhr3 = new_xhr();//On crée un nouvel objet XMLHttpRequest
xhr3.open("POST", "verif.php", true);//Appel du fichier externe
xhr3.onreadystatechange = function (){
if ( xhr3.readyState == 4 ){//Actions executées une fois le chargement fini
if(xhr3.status != 200){//Message si il se preoduit une erreur
document.getElementById("form").innerHTML ="Erreur code " + xhr3.status;
} else {//On met le contenu du fichier externe dans la div "form"
document.getElementById("form").innerHTML = xhr3.responseText;
}
} else {//Message affiché pendant le chargement
document.getElementById("form").innerHTML = "Envoie du message en cours<br /><img src='./images/images/loading.gif' alt='chargement'/>";
}
}
xhr3.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xhr3.send("subject="+document.getElementById("formail").value+"&fnom="+document.getElementById("fnom").value+"&fmail="+document.getElementById("fmail").value+"&fsujet="+document.getElementById("fsujet").value+"&fmessage="+document.getElementById("fmessage").value);
}


verif.php

PHP


<?php
//-----------------------------------------------
//DECLARE LES VARIABLES
//-----------------------------------------------

$nom_expediteur=$_POST['fnom'];
$email_expediteur=$_POST['fmail'];
$email_reply=$_POST['fmail'];
$sujet = $_POST['fsujet'];
$message = $_POST['fmessage'];
$destinataire='xxxxxxxx@xxxxxxxx.com';

$message_texte='Message: '.$message."\n\n".'Message de: '.$nom_expediteur."\n".'Mail de réponse: '.$email_expediteur;

//-----------------------------------------------
//HEADERS DU MAIL
//-----------------------------------------------

$headers = 'From: "'.$nom_expediteur.'"<'.$email_expediteur.'>'."\n";
$headers .= 'Bcc: <xxxxx@xxxxxxx.com>'."\n";
$headers .= 'Return-Path: <'.$email_reply.'>'."\n";
$headers .= 'MIME-Version: 1.0'."\n";
$headers .= 'Content-Type: multipart/alternative; boundary="'.$frontiere.'"';

//-----------------------------------------------
//MESSAGE TEXTE
//-----------------------------------------------
$message = 'This is a multi-part message in MIME format.'."\n\n";

$message .= '--'.$frontiere.'--'."\n";
$message .= 'Content-Type: text/plain; charset="utf-8"'."\n";
$message .= 'Content-Transfer-Encoding: 8bit'."\n\n";
$message .= $message_texte."\n\n";


if(mail($destinataire,$sujet,$message,$headers))
{
echo 'Merci '.$nom_expediteur.' votre message a bien été envoyé.';
}
else
{
echo 'Désolé '.$nom_expediteur.' mais votre message n\'a pas pu être envoyé. Veuillez recommencer.';
}
?>


contact.html

PHP


<div id="form">
<form method="POST" id="formail">
<input type=hidden name=subject value=formmail>
<div class="text">
<div class="formlabel i blue">Nom:<input type="text" class="form" id="fnom" value="" name="fnom"></div>
<div class="formlabel"><span class="i blue">E-mail:</span> <input type="text" class="form" id="fmail" value="" name="fmail"></div>
<div class="formlabel"><span class="i blue">Sujet:</span> <input type="text" class="form" id="fsujet" value="" name="fsujet"></div>
<div class="formlabel"><span class="i blue">Message:</span></div>
<div class=""><textarea rows="5" cols="25" class="textarea" id="fmessage" name="fmessage"></textarea></div>
<div class="formlink " align="center">
<a href="#form" onclick="document.getElementById('formail').reset()">Annuler</a>
<a href="java script:envoiformulaire()">Envoyer</a>
</div>
</div>
</form>
</div>



Cette réponse est fonctionnelle... sympa non, merci de votre contribution wink.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2008 Invision Power Services, Inc.