Bonjour,
J'ai un problème que je ne parviens pas à résoudre. je ne sais pas si il vient d'ajax (via $.getJSON) ou de mysql... j'ai donc choisi de poster dans le forum ajax.
Donc :
J'envoie des données à inserer dans une base mysql en utilisant $.getJSON. Les données sont envoyées à ajax_nature_ajouter.php.
Et le fichier ajax_nature_ajouter.php de traitement côté serveur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 $.getJSON( "ajax_nature_ajouter.php", { "nat_denomination" : $("#nat_denomination").val(), "nat_montant" : $("#nat_montant").val(), "id_client" : $("#id_client").val(), "id_dossier" : $("#id_dossier").val(), "id_formalite" : $("#id_formalite").val(), "id_participant" : $("#id_participant").val() }, function(data) { if(data['nature_ajoute']){ //MISE A JOUR DE L'AFFICHAGE DE LA LISTE DES APPORTS NATURE lnat=data['liste_apports_nature']; //String a afficher de la liste des apports natures var stnat=""; for (var i=0;i<lnat.length;i++){ //Génération de la string 'liste des apports nature' à afficher ensuite stnat=stnat+"<div class=\"col-md-4\">"+lnat[i]['nat_denomination']+"</div><div class=\"col-md-4 text-right\">"+lnat[i]['nat_montant']+" euros</div><br>"; //Génération des nouvelles options pour le menu select de suppression des apports opt=opt+"<option value=\""+lnat[i]['id']+"\">"+lnat[i]['nat_denomination']+"</option>"; } $("#liste_nature").empty(""); $("#liste_nature").html("<br>"+stripslashes(stnat)); $("#nat_denomination").val(''); $("#nat_montant").val(''); } } );
le but est d'enregistrer dans la base une dénomination (nat_denomination) et une valeur en euro (nat_montant).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 //données récupérées $nat_denomination=trim($_GET['nat_denomination']); $nat_montant=(int)trim($_GET['nat_montant']); $id_client=(int)trim($_GET['id_client']); $id_dossier=(int)trim($_GET['id_dossier']); $id_formalite=(int)trim($_GET['id_formalite']); $id_participant=(int)trim($_GET['id_participant']); $nature_ajoute=false; if( mysql_query("INSERT INTO `participants_apports_nature` ( id_client, id_dossier, id_formalite, id_participant, nat_denomination, nat_montant ) VALUES ( '".$id_client."', '".$id_dossier."', '".$id_formalite."', '".$id_participant."', '".protect_mysql($nat_denomination)."', '".$nat_montant."' )") ){ $nature_ajoute=true; //Nouvelle liste des apports en nature $req_nature=mysql_query("SELECT * FROM `participants_apports_nature` WHERE `id_participant`='".$id_participant."'"); $liste_apports_nature=array(); while($line=mysql_fetch_assoc($req_nature)){ $liste_apports_nature[]=$line; } } //Tableau du résultat $resultat=array( 'nature_ajoute'=>$nature_ajoute, 'liste_apports_nature'=>$liste_apports_nature ); //envoi des résultat à la page print(json_encode($resultat));
Quand on déclenche l'appel ajax en cliquant sur un bouton, les champs d'id nat_denomination et nat_montant sont lu et leurs valeurs passée en ajax à ajax_nature_ajouter.php avec d'autres valeurs (ces autres valeurs ne changent jamais, seuls nat_denomination et nat_montant peuvent être modifiées).
côté serveur ajax_nature_ajouter.php insert donc ces données dans la base. Puis il fait un SELECT pour trouver les autres entrées déjà faite par le même utilisateur. ajax_nature_ajouter.php renvoie alors true ou false pour savoir si l'insert à fonctionné. Il renvoit également un tableau qui contient les autres entrées faite par le même utilisateur.
je constate ce comportement bizarre :
- Quand j'execute une première fois tout ce bazar, tout marche super. Je rentre mes données dans nat_denomination (disons "un camion") et nat_montant (disons "40000") , je clique sur le bouton et je constate que dans la base de donnée une ligne a bien été insérée.
- Une autre ligne avec d'autres valeurs : tout est ok.
- par contre si j'essaye d'entrer une nouvelle fois des valeurs déjà entrée et bien ça ne marche pas... Autrement dit, si je rentre une deuxième fois "un camion" dans nat_denomination et "40000" dans nat_montant, rien ne s'insert dans la base... Une seule ligne avec "un camion" et "40000" apparait.
- le plus étrange c'est que si je le fait d'une autre machine avec les mêmes valeurs, là ca marche... Par contre si sur cette dernière machine je tente le coup une fois de plus et bin ça marche plus.
- encore plus étrange : si je supprime manuellement de la base la ligne qui contient "un camion" et "40000" (des fois que) et bien ça ne change rien du tout. Impossible d'entrer une seconde fois ces valeurs même à 2 heures d'interval (oui... j'ai émis les hypothèses les plus farfelues).
j'ai testé plein de trucs : récupérer les données dans ajax_nature_ajouter.php avec un $_GET, un $_REQUEST, un $_POST. Désactiver explicitement le cache mysql et d'autres trucs les plus tordus (vu que je n'ai plus d'idées...).
Il y a forcément quelque-chose qui ne va pas mais quoi ça...
Je penche plus pour un problème ajax car lorsque j'exécute ajax_nature_ajouter.php sans l'appeler par ajax, cela marche sans problèmes.
J'ai plein d'autres requêtes de ce type qui marchent parfaitement sur d'autre page de mon site et c'est la première fois que je rencontre ce problème.
Voilà... Si quelqu'un a une idée...
Partager