11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour, mon probleme est le suivant, je cherche a envoyer un formulaire avec jquery, mais en ayant le controle sur les données..

Alors ça fonctionne bien, le seul probleme est que je reçois le forrmulaire en double, tripple, ou quadripple;
Je reçois les données plusieurs fois, je ne comprends pas.
J'envoie un email a la sortie, donc a cause de cela plusieurs email partent en meme temps , au lieu d'un seule, et quand je veux remplir une base de données par exemple, vu que je reçois pluiseurs fois les memes données, donc ma base reçoit plusieurs fois les memes données

Voici mon code:

La page "add_message_prive.php" reçoit juste les données et les mets dans une base de données, j'ai essayé en envoyant sur une page qui envoie un email de test, mais j'ai le meme comportement




<script type"text/javascript"> 
function sende_prive_base() {
$(document).ready(function(){
	$("form#form_prive").submit(function cool() {
	// we want to store the values from the form input box, then send via ajax below
	 var pseudo_envoyeur     = $('#pseudo_envoyeur').attr('value');  
    var pseudo_receveur    = $('#pseudo_receveur').attr('value');   
	var message_prive     = $('#message_prive').attr('value');  
	var message_prive = message_prive.replace(/\+/g,' plus ');
		var message_prive = message_prive.replace(/&/g,' et ');
		
		$.ajax({
			type: "POST",
			url: "add_message_prive.php",
            data: "pseudo_receveur="+ pseudo_receveur +"&message_prive="+ message_prive +"&pseudo_envoyeur="+ pseudo_envoyeur ,  
			success: function cool(){
			
			           document.getElementById('message_prive').value = '';

		//ici on fait juste des trucs, si le formulaire est bien envoyé, mais pas obligatoire
                                //$('form#form_prive').hide();
				//$('form#form_prive :input').val("");
				///$('div.success').fadeIn();
			}
		});
	return false;
	});
});
}
</script> 





le formulaire est le suivant:



<form id="form_prive" method="post">
  <input name="message_prive" type="text" class="boiteFormulaire" id="message_prive" size="45"  maxlength="250" />
  <input name="pseudo_envoyeur" type="hidden" id="pseudo_envoyeur" value="<? echo $pseudo_cook ;?>" />  
  <input name="pseudo_receveur" type="hidden" id="pseudo_receveur" value="<? echo $pseudo_receveur;?>" /> 
<input type="submit" class="boiteFormulaire" value="env" onclick="sende_prive_base();"/>
        </form>




Merci de m'aider,
A bientôt
En faisant comme ceci ça semble fonctionner
c'est quand meme bizarre



<script type"text/javascript">  
function sende_prive_base() { 
$(document).ready(function(){ 
    $("form#form_prive").submit(function cool() { 
    // we want to store the values from the form input box, then send via ajax below 
     var pseudo_envoyeur     = $('#pseudo_envoyeur').attr('value');   
    var pseudo_receveur    = $('#pseudo_receveur').attr('value');    
    var message_prive     = $('#message_prive').attr('value');   
    var message_prive = message_prive.replace(/\+/g,' plus '); 
        var message_prive = message_prive.replace(/&/g,' et '); 

document.getElementById('message_prive').value = ''; 
         
        $.ajax({ 
            type: "POST", 
            url: "add_message_prive.php", 
            data: "pseudo_receveur="+ pseudo_receveur +"&message_prive="+ message_prive +"&pseudo_envoyeur="+ pseudo_envoyeur ,   
            success: function cool(){ 
 
        //ici on fait juste des trucs, si le formulaire est bien envoyé, mais pas obligatoire 

            } 
        }); 
    return false; 
    }); 
}); 
} 
</script>


Bonjour,

J'utilise également JQUERY et je rencontre un problème similaire :
J'envoie une requête Ajax qui me permet d'insérer une ligne dans ma table de la base.

Code :

//Début requete AJAX
$.ajax({
type:"get",
url:"../ajax/req_parfum_ajout.php?matricule="+matricule,
dataType:"html",
success:function(html){ AjouteOK(html);},
error:function(msg){RequeteAjaxNOK();}
});//fin AJAX
}

Cela fonctionne très bien avec FireFox mais lorsque j'utilise IE ( de 6 à 8 !), je me retrouve avec 2 lignes insérer dans la table ( à quelques minutes d'interval ) .... mystère ....

Je suppute un problème de proxy et de IE , car chez moi cela fonctionne dans tous les cas (je n'ai pas de proxy à la maison ! ).

J'ai déjà essayé sans succès:
- de vider le cache avec header("Cache-Control: no-cache, must-revalidate"); (dans la page qui contient le code ajax)
- réduire la taille de la réponse de la page appeler par ajax

Bref, je sèche.
Merci d'avance de prendre le temps de lire ma prose.
Salut,
le seule moyen que j'ai trouvé, c'est de tricher un peu , comme ça;
par exemple, dans ma page qui reçoit j'ai un

$truc=$_POST["truc"] ;

je traite :

1. if $truc<>""
2.incérer truc dans table
faire $truc="";

donc apres avoir traiter on vide la variable , donc comme il est vide, il n'est pas rajouté dans la base.

Mais ça reste arcaique et pure bricolage.

A bientôt
Bonjour,

Je viens d'essayer avec la méthode POST, cela fonctionne parfaitement.

Conclusion :
IE + ajax GET + proxy = de gros soucis.

J'ai rajouté également :
if (isset ($_POST["truc"]) ) {
$truc=$_POST["truc"] ;
}
else {
$truc='';
}


Merci du conseil
Une petite remarque...

Au lieu de ça...
 $.ajax({  
            type: "POST",  
            url: "add_message_prive.php",  
            data: "pseudo_receveur="+ pseudo_receveur +"&message_prive="+ message_prive +"&pseudo_envoyeur="+ pseudo_envoyeur ,    
            success: function cool(){  
  
            }  


Tu devrais mettre :
data:{'pseudo_receveur':pseudo_receveur,
'message_prive':message_prive,
'pseudo_envoyeur':pseudo_envoyeur}


Ça évitera les problèmes le jour ou "message_prive" contiendra un "&"...

EDIT : je n'avais pas vu

    var message_prive = message_prive.replace(/\+/g,' plus ');  
        var message_prive = message_prive.replace(/&/g,' et ');  

Smiley biggol
Modifié par icareo (27 May 2010 - 17:17)
Bonjour à tous,

J'ai exactement le même problème et je désespère.
Une fois mon formulaire rempli et vérifié par un plug-in Jquery, je désire envoyer ce formulaire dans ma base de donnée. Je clic une fois sur le bouton : rien, une deuxième fois : un "envoi", et une inscription dans ma BDD, une troisième fois : DEUX envois et donc DEUX inscriptions, troisième clic, trois envois et trois inscriptions (soit un total à ce moment là a 6 inscriptions pour 4 clic T_T) Et c'est crescendo...
Voici les différentes parties de l'application, je pense que l'erreur vient de la première partie mais je ne vois rien...

Je dois de préférence rester en Ajax.

Merci à ceux qui pourront m'aider, à ceux qui auront essayé ou qui ont juste pris le temps de lire Smiley cligne

Partie Jquery/ajax

Partie Html

Partie php (=> inster.php)
Le problème ne peut venir que d'un évènement déclarer plusieurs fois.

exemple :


function test() {
   $('#monForm').submit(function(){
      .......
   });
}

test();
test();


Aura pour effet de submit 2 fois le formulaire.
car .submit() se cumul et ne se remplace pas.

a ta ligne 7 essayes déjà de mettre $("#signupForm").unbind("submit").submit(....

Ça devrait éviter que le submit se lance plusieurs fois.
Le crescendo s'est arrété grâce au unbind, je n'ai "que" deux envois à chaque clic, il doit encore avoir un évènement qui se répète quelque part. Je vais continuer à chercher.
Merci Kaen, tu m'as bien aidé ^^ !


Edit si ca peut servir ^^ :

Effectivement c'était bien du à une sorte de double submit, le premier étant contenu dans le plugin validate que j'utilise. J'ai donc :
- supprimé la ligne 7 (y compris le Unbind, désolée kaen, en fait c'est la ligne toute entière qui me faisait double post ^^')
- mis toute la partie "$.validator.setDefaults" dans "$(document).ready(function()"
(attention aux accolades, parenthèses et autres...)
- et remplacé "s = $(this).serialize();" par " s = $('#signupForm').serialize();"
(signupForm etant l'id de mon form)

voila Smiley smile
Modifié par Liliou (07 Jun 2010 - 16:17)