Formulaire html/php chargé par Ajax

Résolu
cs_studiolapomme Messages postés 19 Date d'inscription mardi 13 février 2007 Statut Membre Dernière intervention 8 juin 2008 - 7 juin 2008 à 17:02
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 - 8 juin 2008 à 17:32
Error convertoring HTML to XHTML: System.ArgumentException: The empty string '' is not a valid name.
at System.Xml.XmlTextWriter.ValidateName(String name, Boolean NCName)
at System.Xml.XmlTextWriter.InternalWriteProcessingInstruction(String name, String text)
at System.Xml.XmlTextWriter.WriteProcessingInstruction(String name, String text)
at System.Xml.XmlWriter.WriteNode(XmlReader reader, Boolean defattr)
at FreeTextBoxControls.Support.Formatter.HtmlToXhtml(String input)

26 réponses

cs_studiolapomme Messages postés 19 Date d'inscription mardi 13 février 2007 Statut Membre Dernière intervention 8 juin 2008
8 juin 2008 à 11:52
Aaaaaah zut, en fait ce matin j'ai posté toute la solution qui marche, mais comme j'avais laissé mes mails dedans j'ai ecrit à l'admin pour qu'ils les enlève mais il ont carrément viré mon post.... mais ont laissé le prmier post de ce sujet qui n'est qu'un bug à cause de la textbox "évoluée". Enfin j'dis pas ca pour critiquer. Alors ma solution, et qui marche je la reposte :) :

_Ajax.js

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
";
}
}
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);
}



_Contact.html

<?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.';
}
?>


_Verif.php



<form method="POST" id="formail">




Nom:


E-mail:


Sujet:


Message:


<textarea rows="5" cols="25" class="textarea" id="fmessage" name="fmessage"></textarea>



Annuler
[javascript:envoiformulaire() Envoyer]




</form>





Et voilà, avec ça tout marche, c'est top !
Sauf qu'en fait, je devait envoyer des mails en format text ET HTML mais ca ne marche pas correctement alors j'ai viré du code qui le faisait dans verif.php... c'est sur ce site que j'ai pris la source.

Bon dimanche messieur!
3
cs_studiolapomme Messages postés 19 Date d'inscription mardi 13 février 2007 Statut Membre Dernière intervention 8 juin 2008
7 juin 2008 à 17:04
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:

// Formulaire en ligne:

//

// <form method="POST" onSubmit="load_form(this.?verif);return false;" id="formail">
//
//

//
Nom:

//
E-mail:

//
Sujet:

//
Message: <textarea rows="5" cols="25" class="textarea" name="mess"></textarea>

//

// Annuler
// [# Envoyer]
//

//

// </form>
//



-page verif.php

//

// <?
// $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é');
// ?>
//



_fonction ajax

// 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 ...
";
// }
// }
// 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.
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
7 juin 2008 à 18:40
Bonjour,

    que cherches tu as faire ?
    envoyer le formulaire vers le php ?
      
Formulaire en ligne:

<form method= "POST" id="formail"
            action="verif.php" >
   
        Nom:

        E-mail:

        Sujet:

        Message: <textarea rows="5" cols="25" class="textarea" name="mess"></textarea>

       
   
</form>

    verif.php reçoit et traite $_POST['subject'] $_POST['nom'] $_POST['mail']
             $_POST['titremessage'] $_POST['mess']

    rien d'autres !

    si tu veux contrôler des choses coté javascript

<script>
    function ctr()
    {   contrôles voulus
         return false pour ne pas envoyer le formulaire
         return true pour l'envoyer
</script>
<form method="POST" id="formail"
          onsubmit="return ctr();"

            action="verif.php" >

    ou alors tu veux utiliser ajax,
       et dans ce cas : pas de formulaire

                         pour la méthod post

       xhr2.open("POST","http://....verfi.php", true)
       les paramètres sont envoyés dans send("subject ="+document.getElementById("formail").value+
                                                                   "&nom="+document.getElementById(id du champ).value+
                                                                    ....

       et dans l'open dans la method get
           xhr2.open("POST","http://....verfi.php/?subject="+document.getElementById("formail").value+....
                    , true);

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
7 juin 2008 à 18:54
Salut,

Bonjour a toi bultez,

Je crois que ce qu'il veut et n'arrive pas a faire c'est charger le résulat de la page "verif.php" dans le div, sans recharger la page donc sans changer de page...

a++

Si la réponse vous convient, pensez : Réponse acceptée !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_studiolapomme Messages postés 19 Date d'inscription mardi 13 février 2007 Statut Membre Dernière intervention 8 juin 2008
7 juin 2008 à 19:02
Wow! T'es plus calé que moi quand même hein! :)

En fait ce que je veux c'est ne jamais charger la page verif.php seule. Je veux l'inclure dans ma div id="form" sans rechargement total de ma page, facon ajax avec xhr.
Mais là tu me dis donc de ne pas utiliser de formulaire. Du coup je suis carrément perdu :/ Je planche dessus depuis plusieurs heures pourtant. L'"autodidactie" n'est pas le meilleur chemin pour arriver à la maîtrise, loin de là, j'ai l'impression de plus rien comprendre d'un coup!

Merci de ton aide, tu ressembles à une lumière au bout du couloir là :)
0
cs_studiolapomme Messages postés 19 Date d'inscription mardi 13 février 2007 Statut Membre Dernière intervention 8 juin 2008
7 juin 2008 à 19:03
OUi c'est ça nicomilville, j'été sur la page depuis un bout de temps, j'avais pas vu ta réponse
0
cs_studiolapomme Messages postés 19 Date d'inscription mardi 13 février 2007 Statut Membre Dernière intervention 8 juin 2008
7 juin 2008 à 19:21
J'ai juste remplacé dans le fichier ajax.js les deux dernieres lignes par:

xhr2.open("POST","./verif.php", true);
send("subject="+document.getElementById("formail").value+"Name="document.getElementsByName("nom").value+"Mail="document.getElementsByName("mail").value+"Sujet="document.getElementsByName("titremessage").value+"Message="document.getElementsByName("mess").value, true);

Mais ca fait carrément tout planter car aucune fonctions ajax ne marche maintenant... j'ai fais une erreur de syntaxe?
0
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
7 juin 2008 à 19:21
pas grave, je vais te proposer une autre version :

  <script type="text/javascript">
  <!--
  function actualisation(){
  var xhr_object = null;
  if(window.XMLHttpRequest)
  xhr_object = new XMLHttpRequest();
  else if(window.ActiveXobject)
  xhr_object = new ActiveXobject("Microsoft.XMLHTTP");
  else{
  alert("Votre navigateur n'est pas compatible avec XMLHttpRequest");
  return;
  }
  xhr_object.open("POST", "verif.php", true);
  xhr_object.onreadystatechange = function ()
 {   if (xhr_object.readyState4 && xhr_object.status 200)
  {
         document.getElementById("form").innerHTML = xhr_object.responseText;
  }
 }
xhr_object.send(null);
};
//-->
  </script>

Si la réponse vous convient, pensez : Réponse acceptée !
0
cs_studiolapomme Messages postés 19 Date d'inscription mardi 13 février 2007 Statut Membre Dernière intervention 8 juin 2008
7 juin 2008 à 19:42
Je viens de faire ce que tu as dis en mettant dans ma page qui accueille la div a actualiser:



<form method="POST" onSubmit="actualisation();return false;" id="formail">




Nom:


E-mail:


Sujet:


Message: <textarea rows="5" cols="25" class="textarea" name="mess"></textarea>



Annuler
[# Envoyer]




</form>



Mais ca reload toute la page et me fait revenir à l'index en fait.
Merci a toi aussi de ta contribution!
0
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
7 juin 2008 à 20:13
c'est pas comme ça qu'il faut faire, il faut le mettre dans le onclick de ton liens... Car si tu fais un submit ça rechargera automatiquement ta page...

a++

Si la réponse vous convient, pensez : Réponse acceptée !
0
cs_studiolapomme Messages postés 19 Date d'inscription mardi 13 février 2007 Statut Membre Dernière intervention 8 juin 2008
7 juin 2008 à 20:30
Excuse moi, peux tu me mettre l'exemple? Je veux pas qu'on me mache le travail hein, mais là j'ai pas quitté mon fauteuil depuis 11h ce matin, et sur ce probleme ca doit faire 6h que je planche dessus... Et après tout ce temps a faire des essai, j'ai l'impression d'avoir tout mélangé un peu.
En fait il faut que je mette dans mon html:



<form method="POST" id="formail">




Nom:


E-mail:


Sujet:


Message: <textarea rows="5" cols="25" class="textarea" name="mess"></textarea>



Annuler
[javascript:actualisation() Envoyer]




</form>



et dans mon ajax, le code de "function actualisation()" que tu m'a donné plus haut.

J'ai bon? En tout cas, je teste...
0
cs_studiolapomme Messages postés 19 Date d'inscription mardi 13 février 2007 Statut Membre Dernière intervention 8 juin 2008
7 juin 2008 à 20:44
Excellent ça marche mais par contre plus aucun contenu récupéré du formulaire dans le mail qui est envoyé :/

Je fais un bilan de mes codes:

html:



<form method="POST" id="formail">




Nom:


E-mail:>


Sujet:


Message: <textarea name="mess"></textarea>



Annuler
[javascript:actualisation() Envoyer]




</form>



ajax:

function actualisation() {
var xhr_object = null;
if(window.XMLHttpRequest)
xhr_object = new XMLHttpRequest();
else if(window.ActiveXobject)
xhr_object = new ActiveXobject("Microsoft.XMLHTTP");
else{
alert("Votre navigateur n'est pas compatible avec XMLHttpRequest");
return;
}
xhr_object.open("POST", "verif.php", true);
xhr_object.onreadystatechange = function ()
{
if (xhr_object.readyState4 && xhr_object.status 200)
{
document.getElementById("form").innerHTML = xhr_object.responseText;
}
}
xhr_object.send(null);
};


php:

<?
$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é. ');
?>


Merci de votre dévouement!, en plus de voir le bout, je crois que je commence a comprendre :) Je dis je crois hein!
0
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
7 juin 2008 à 21:40
Re,

tes variables ne sont pas déclarés...

ce n'est pas $nom mais $_POST['nom']; a moins que tu ne les ai déclaré plus haut dans le script...

a++

Si la réponse vous convient, pensez : Réponse acceptée !
0
cs_studiolapomme Messages postés 19 Date d'inscription mardi 13 février 2007 Statut Membre Dernière intervention 8 juin 2008
7 juin 2008 à 22:07
Merdoum ca marche pas!
C'est bien ça que tu me dis de faire:

<?
$headers="De: ".$_POST['nom'];
$message="Sujet: ".$_POST['titremessage']." Message: ".$_POST['mess']." De: ".$_POST['nom']." (".$_POST['$mail']." )";
mail("contact@studiolapomme.com",$_POST['titremessage'],$_POST['message'],$_POST['headers']);
echo ('Votre message a bien été envoyé.>');
?>


C'est bien ca que tu me dis de faire non?
0
cs_studiolapomme Messages postés 19 Date d'inscription mardi 13 février 2007 Statut Membre Dernière intervention 8 juin 2008
7 juin 2008 à 23:46
Avec ça, ça ne passe toujours pas grrrrrrrrrr:

<?php
$nom = $_POST['nom'];
$mailexp = $_POST['mail'];
$sujet = $_POST['titremessage'];
$message = $_POST['mess'];

$headers ='From: "LaPomme Website"<xxxxx@xxxx.com>'."\n";
$headers .='Reply-To: '.$mailexp.";

if(mail('monmail@monsite.com', 'Sujet', $message, $headers))
{
echo 'Le message a bien été envoyé';
}
else
{
echo 'Le message n\'a pu être envoyé';
}
?>

Mais il m'affiche quand même que le mail est bien envoyé, d'ailleurs, il l'est! Mais aucune variable ne passe.
0
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
8 juin 2008 à 09:18
ok, désolé de ne pas avoir pu t'aider !

a++

Si la réponse vous convient, pensez : Réponse acceptée !
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
8 juin 2008 à 09:54
comment veux-tu traiter  quelque chose dans dans php ?
    tu ne lui envoies rien !

xhr_object.open("POST", "verif.php", true);
   // rien derrière l'url, donc $_GET inutilisable
...
xhr_object.send(null);
   // rien dans l'envoie, donc $_POST inutilisable
 

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
cs_studiolapomme Messages postés 19 Date d'inscription mardi 13 février 2007 Statut Membre Dernière intervention 8 juin 2008
8 juin 2008 à 11:55
(J'ai inversé contact.html et verif.php, vous l'aurez compris :D ) Mais me suis couché taaaard tres tard! Un peu avant que vous vous reveilliez... vers 8h..! Ca m'a vraiment pris du temps à lire tout ces tuto! Boudi! :)
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
8 juin 2008 à 14:17
ah ben moi... j'avais rien compris...
    j'avais vu nulle part ce contact.php....
    peut-être ai-je mal lu... c'est probable...
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
8 juin 2008 à 14:44
non, je te rassure bultez, moi non plus, au moins on est deux...

a++

Si la réponse vous convient, pensez : Réponse acceptée !
0
Rejoignez-nous