Bonjour,
Me voici devant un nouveau problème qui reste à ce jour sans solution.
Je code actuellement une application et je bloque sur un bug...qui n'est pas constant en plus !

En gros, j'ai une page sur laquelle on rédige un compte-rendu comprenant de multiples champs.

Lors de la rédaction de ce compte-rendu, il y a un module de sauvegarde automatique qui me permet de l'insérer en base de données la première fois et ensuite, de l'update toutes les 5 secondes. Il y a également un bouton de sauvegarde présent sur le compte-rendu permettant l'insert ou l'update en base de données.

C'est là que mon problème arrive parfois : le clic sur le bouton de sauvegarde n'entraine pas forcement une action de sauvegarde. Il peut fonctionner 10 fois de suite et à la 11ème, ne rien faire. Également, lors du clic, il arrive qu'un doublon de compte-rendu soit créé. Là encore, c'est très variable. La sauvegarde via le bouton va fonctionner 10 fois...et créer un doublon la onzième...

Je me suis trituré le cerveau dans tous les sens, je ne saisis pas le grain de sable qui vient parasiter ces fonctions.

Voici donc un extrait de ma page de compte-rendu :
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
<input class="info" type="hidden" code_info="type_cr" value="<?php echo $type; ?>"></input>
<input class="info" type="hidden" code_info="date" value="<?php echo $sgu->formateDate($df); ?>"></input>
 
<script type="text/javascript" src="cr/commun.js"></script>
<script type="text/javascript" src="cr/FOOT/creation.js"></script>

La page commun.js concernant l'insertion en base :
Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
   // appel au php d'insertion en base
  $.post("cr/"+type_doc+"/creationDAO.php",variablesPost,function(data) {
    // recuperation de la version consultation du cr en passant en parametre l'id du cr
    $.post("cr/"+type_doc+"/consultation.php",{
      "id_cr":trim(data)
      })

La page FOOT/creation.js
Code javascript : 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
/* JS CREATION CR FOOT */
/* ------------------------------ */
$(document).ready(function() {
 
    /* CLIC SUR ENREGISTRER */
    $("ul.libelle li.save").click(function() {
        if($("ul#cr li.zone_cr_content ul.libelle li.type_cr").eq(0).text() == "(creation)") {
            alert("Vous créez un compte-rendu pensez à l'exporter en PDF.");
        }
        var variablesPost = recupererDonnees();
 
        // appel au php d'insertion en base
        $.post("cr/FOOT/creationDAO.php",variablesPost,function(data) {
            // on retourne a la liste
            $("ul#cr").hide();
            $("ul#liste").show();
            stopMenuFluide();
            // on actualise le menu docs du patient selectionne
            actualiseMenuDoc("compterendu");
        })
    })
})

La page FOOT/creationDAO.php
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
<?php
// recuperation des variables postées
$map = array_map('strip_tags', $_REQUEST);
// Construction de la date
$df = date("Y-m-d");
$d = $_REQUEST['date'];
// Construction de l'objet CR
$c = new CrFoot();
$c->setType($map["type_cr"]);
$c->setDate($d);
$c->setRedacteur($map["redacteur"]);
$cdao = new CrFootDAO();
 
// si on effectue une modif, l'id_cr est passé en parametre
if (isset($_REQUEST["id_cr"])) { 
	$c->setIdCrFoot($map['id_cr']);
	$c->setExportPdf($_REQUEST['export_pdf']);
	$cdao->modifierCrFoot($c);    
} else {
    $c->setExportPdf("non");
    $cdao->ajouterCrFoot($c);    
}
 
//Utilisé pour le save auto
echo $c->getIdCrFoot();
?>
Et la page de fonction CrFootDAO.php
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?php 
class CrFootDAO {
    /**
     * Creation d'un cr foot
     * @param c
     */
    function ajouterCrFoot($c) {
 
	$bdd = connexion_db_prod();
 
		//Mise en forme des champs avant insertion
		$redacteur = miseForme($c->getRedacteur());
		$copie = miseForme($c->getCopie());
		$date_=dateFR2US($c->getDate());
 
		//REQUETE D'INSERTION
		$q = "INSERT INTO cr_foot (type, date, redacteur, copie, export_pdf) VALUES (";
		$q .= "'" . $c->getType() . "',";
		$q .= "'" . $date_ . "',";
		$q .= "'" . $redacteur . "',";			
		$q .= "'" . $copie ."',";
		$q .= "'" . $c->getExportPdf() . "'";		
		$q .= ")";	
 
		$q_result = $bdd->query($q);	
 
		if (!$q_result) die (" ECHEC : IMPOSSIBLE DE CREER LE COMPTE RENDU DANS LA DB" . mysql_error());		
 
		//Nettoyage
		$c->setIdCrFoot($bdd->lastInsertId());
		$q_result->closeCursor(); // Termine le traitement de la requête }
 
     /**
     * Modification d'un cr foot
     * @param c
     */
    function modifierCrFoot($c) {
 
		$bdd = connexion_db_prod();
 
		//Mise en forme des champs avant insertion		
		$redacteur = miseForme($c->getRedacteur());
		$copie = miseForme($c->getCopie());
		$date_=dateFR2US($c->getDate());
 
		//REQUETE DE MISE A JOUR
		$q ="UPDATE cr_foot SET ";			
		$q .= "type='" . $c->getType() . "',";
		$q .= "date='" . $date_ . "',";
		$q .= "redacteur='" . $redacteur . "',";		
		$q .= "copie='" . $copie ."',";
		$q .= "export_pdf='" . $c->getExportPdf() . "'";		
		$q .= " WHERE id_cr_foot = '".$c->getIdCrFoot()."'";	
 
		$q_result = $bdd->query($q);		
 
		if (!$q_result) {
			die (" ECHEC : IMPOSSIBLE DE MODIFIER LE COMPTE RENDU DANS LA DB" . mysql_error());
		}	
 
		//Nettoyage
		$q_result -> closeCursor(); // Termine le traitement de la requête 
		}
?>
Alors voilà, je sais que c'est un peu lourd comme ça mais si quelqu'un voit "un truc" énorme qui me serait passé à coté, qu'il n'hésite pas car là, je m'arrache les cheveux...

Merci d'avance.