IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AJAX Discussion :

[AJAX] Erreurs aléatoires d'exécution d'une XMLHttpRequest


Sujet :

AJAX

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut [AJAX] Erreurs aléatoires d'exécution d'une XMLHttpRequest
    Bonjour,

    Je m'évertue depuis le début de la journée à faire fonctionner une requête... j'ai des "manqués" lors de l’exécution de ma requête XMLHttpRequest.

    Ci-dessous, le fichier PHP ouvert par le serveur lors de l'envoi de la méthode, qui effectue un enregistrement dans ma base de données, puis renvoi un fichier XML pour le retour d'informations.

    Le souci, c'est que parfois, l'enregistrement ne s'effectue pas correctement.

    J'ai donc créé une fonction sensé vérifier la bonne écriture dans la base de données, renvoyant une info par XML. Et là, comble de l'étrange, j'ai un retour positif, même en cas de loupé !

    Quelqu'un aurait-il une idée de mon erreur ?



    Code php : 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
    <?php
    header("Content-Type: text/xml");
     
    echo '&lt;?xml version="1.0" encoding="utf-8"?&gt;';
    echo '<root>';
     
    try{
        $bdd = new PDO('mysql:host=localhost;dbname=qual', 'root', 'IdentIt');
    }
    catch (Exception $e){
        die('Erreur : ' . $e->getMessage());
    }
     
    $heure=date("Y-m-d H:i:s");
    $donneesoperateur=$bdd->query("SELECT * FROM login where machine='".$_GET['machine']."' AND heurearrivee<'".$heure."' AND heuredepart>='".$heure."'")->fetch();
    $donneessoustestqual=$bdd->query("SELECT * FROM soustestqual where idsoustestqual='".$_GET["idsoustest"]."'")->fetch();
    $donneestestqual=$bdd->query("SELECT * FROM testqual where idtestqual='".$donneessoustestqual["idtestqual"]."'")->fetch();
     
    if(isset($_GET['type'])){
    	$i=0;
    	$requeteverif=$bdd->query('SELECT * FROM verif WHERE DATE(date)="'.date("Y-m-d").'" AND DATE_FORMAT(date,"%H")="'.date("H").'" AND idsoustestqual="'.$_GET['idsoustest'].'" AND idmachine="'.$_GET['machine'].'"');
    	while($donneesverif=$requeteverif->fetch()){
    		$resultat=intval($donneesverif['reponse'])+1;
    		$bdd->exec('UPDATE verif SET reponse="'.$resultat.'", date="'.$heure.'" WHERE idverif="'.$donneesverif['idverif'].'"');
    		$i=1;
    	}
    	if($i==0){
    		$requeteenregistrer = $bdd->prepare('INSERT INTO verif (idsoustestqual, idmachine, reponse, date, operateur) VALUES(?, ?, ?, ?, ?)');
    		$requeteenregistrer->execute(array($_GET['idsoustest'], $_GET['machine'], 1 ,$heure, $donneesoperateur['idoperateur']));
    	}
    }
    else{
    	$requeteenregistrer = $bdd->prepare('INSERT INTO verif (idsoustestqual, idmachine, reponse, date, operateur) VALUES(?, ?, ?, ?, ?)');
    	$requeteenregistrer->execute(array($_GET['idsoustest'], $_GET['machine'], $_GET['reponse'] ,$heure, $donneesoperateur['idoperateur']));
    }
     
    $requeteverification=$bdd->query("SELECT * FROM verif WHERE date='".$heure."' AND idsoustestqual='".$_GET['idsoustest']."' and idmachine='".$_GET['machine']."'");
    if($verification=$requeteverification->fetch()){
    	echo '<verification name="true" />';
    }
    if($donneestestqual['soustestlies']==1){
    	$requetesoustestqualsuivant=$bdd->query('SELECT * FROM soustestqual WHERE idtestqual="'.$donneestestqual["idtestqual"].'" AND idsoustestqual>"'.$donneessoustestqual["idsoustestqual"].'"');
    	if($donneessoustestqualsuivant=$requetesoustestqualsuivant->fetch()){
    		echo '<donnees name="'.$donneessoustestqualsuivant["typereponse"].'" />';
    		echo '<donnees name="'.$donneessoustestqualsuivant["idsoustestqual"].'" />';
    		echo '<donnees name="'.addslashes(htmlentities($donneessoustestqualsuivant["nomsoustestqual"])).'" />';
    		echo '<donnees name="'.$donneessoustestqualsuivant["idtestqual"].'" />';
    	}
    }
    echo '</root>';
    ?>

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Bonjour,

    nous ne sommes pas dans ta tête et nous ne pouvons pas deviner de quoi tu parles.
    Tu es beaucoup trop vague.

    Je constate aussi que tu poses une question à propos de XMLHttpRequest... Et que tu ne nous montres que du PHP et du SQL. XMLHttpRequest et AJAX n'ont donc rien à voir avec ta question ? Dans ce cas, pourquoi avoir dit le contraire ?

    Citation Envoyé par antoineesm Voir le message
    Le souci, c'est que parfois, l'enregistrement ne s'effectue pas correctement.
    Mais encore ? Il se passe quoi au lieu de quoi et comment le sais-tu ?

    Citation Envoyé par antoineesm Voir le message
    J'ai donc créé une fonction sensé vérifier la bonne écriture dans la base de données, renvoyant une info par XML.
    Comment est-il possible de vérifier une telle chose ? Quelle est l'idée derrière cette vérification ?

    Citation Envoyé par antoineesm Voir le message
    Et là, comble de l'étrange, j'ai un retour positif, même en cas de loupé !
    Mais encore ? Il se passe quoi au lieu de quoi et comment le sais-tu ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Tout d'abord, merci de ta réponse.

    Si je parlais d'AJAX/Javascript/XMLHttpRequest, c'est que j'en utilise !

    Je vais donc vous expliquer plus en détail l'objet de mon code :

    j'envoi, via donc un XMLHttpRequest trois données par methode GET :"machine", "idsoustest", et "reponse".

    Le code que je vous ai donné est donc la page PHP indiquée dans mon code Javascript, dans le "open".

    J'effectue ensuite un "send" pour envoyer cette requete.

    Dans cette requete (écrite donc en PHP), J'effectue donc une écriture dans une BDD mysql (après quelques requêtes qui viennent compléter les informations envoyées avant l'enregistrement).

    Initialement, je ne renvoyait que quelques information en XML sous les balises "donnees" (et encore, dans certains cas, c'est à dire si ma variable "$donneestestqual['soustestlies']" était égale à 1). Je viens ensuite récupérer ces données via mon code JS dans mon application (tout cela marche admirablement bien, je n'ai pas de souci de ce côté).


    Voici donc mon réel problème :Il y a parfois des loupés dans l'enregistrement dans ma base de données.

    Afin de mieux cerner le problème, j'ai voulu mettre un contrôle en effectuant une lecture de ce que je venais d'écrire. Je renvoi donc en cas de réussite un paramètre dans une balise "verification", paramètre que je viens lire dans mon code JS. Seulement, voilà, même en cas de défaut d'écriture, le paramètre "vérification" est tout de même renvoyé ! Et c'est là que je me creuse la tête depuis maintenant deux jours...

    Pour rappel de mon premier message, le code marche "parfois", parfois pas ! c'est là le pire !

    Ci dessous, l'une des pages contenant le code Javascript dont je parle :

    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    <script type="text/javascript" src="oXHR.js"></script>
    <script>
    function envoireponsecnc(reponse) {
    var xhr = getXMLHttpRequest();
    xhr.open("GET", "enregistrement/envoireponseserveur.php?machine=<?=$_GET['machine']?>&idsoustest="+idsoustest+"&reponse="+reponse, true);
    xhr.send(null);
    	xhr.onreadystatechange = function() {
    		if ((xhr.readyState == 4) && (xhr.status == 200 || xhr.status == 0)) {
    			var verification = xhr.responseXML.getElementsByTagName("verification");
    			if(verification[0].getAttribute("name")){
    				document.getElementById("chargement").style.visibility = "hidden";
    				document.getElementById("formulairecnc").style.visibility = "hidden";
    				var ligne = document.getElementById("test"+idtest).rows; 
    				var l = ligne.length;
    				var colonne = document.getElementById("test"+idtest).rows; 
    				var l = ligne.length;
    				largeur=ligne[l-1].cells.length;
    				var p=1;
    				var i=1;
    				while(p<ligne[2].cells.length){
    					if(ligne[2].cells[p].id == "titresoustest"+idsoustest){
    					debutzonesoustest=i;
    					finzonesoustest=i+ligne[2].cells[p].colSpan-1;
    				}
    				i=i+ligne[2].cells[p].colSpan;
    				p=p+1;
    			}			
    			var k=debutzonesoustest;
    			var maxAtteint=0;
    			while (k<=finzonesoustest){
    				if (ligne[l-1].cells[k].innerHTML == ""){
    					if (reponse == "ok"){
    						ligne[l-1].cells[k].innerHTML = "<img src='images/check.png' style='height : 15px;'>";
    					}
    					else{
    						ligne[l-1].cells[k].innerHTML = "<img src='images/nok.jpg' style='height : 15px;'>";
    					}
    					maxAtteint=1;
    					k=largeur+1;
    				}
    				k=k+1;
    			}
    			if (maxAtteint==0){
    				var i=3;
    				while(i<l-1){
    					var td = ligne[i].insertCell(finzonesoustest+1);
    					td.innerHTML = "";
    					td.className = "tdtest";
    					td.style.borderLeft = "1px solid black";
    					i=i+1;
    				}
    				var td = ligne[i].insertCell(finzonesoustest+1);
    				if (reponse == "ok"){
    					td.innerHTML = "<img src='images/check.png' style='height : 15px;'>";
    				}
    				else{
    					td.innerHTML = "<img src='images/nok.jpg' style='height : 15px;'>";
    				}
    				td.className = "tdtest";
    				td.style.borderLeft = "1px solid black";
    				i=i+1;
    				//augmentation du colspan du titre
    				colspan = document.getElementById("titretest"+idtest).colSpan;
    				colspan = colspan + 1 ;
    				document.getElementById("titretest"+idtest).colSpan = colspan;
    				//augmentation du colspan du champs de période
    				colspan = document.getElementById("frequencetest"+idtest).colSpan;
    				colspan = colspan + 1 ;
    				document.getElementById("frequencetest"+idtest).colSpan = colspan;
    				//augmentation du colspan du sous-titre
    				colspan = document.getElementById("titresoustest"+idsoustest).colSpan;
    				colspan = colspan + 1 ;
    				document.getElementById("titresoustest"+idsoustest).colSpan = colspan;
    			}
    			if(lies=="1"){
    				var nodes = xhr.responseXML.getElementsByTagName("donnees");
    				formulaire(nodes[0].getAttribute("name"),nodes[1].getAttribute("name"),nodes[2].getAttribute("name"),nodes[3].getAttribute("name"),1);
    			}
    		}
    	}
    	else{
    		document.getElementById("chargement").style.visibility = "visible";
    	}
    };
    }
    </script>
    <?php
     
    $width=500;
    $height=200;
     
    $demiwidth=-$width/2;
    $demiheight=-$height/2;
    ?>
     
    <div class="enregistrement" id="formulairecnc" style="width : <?php echo $width; ?>px; padding-top : 20px; margin-left : <?php echo $demiwidth;?>px;  margin-top : <?php echo $demiheight;?>px; visibility:hidden;">
     
    <input type=image src="./images/annuler.png" onclick='document.getElementById("formulairecnc").style.visibility = "hidden";' style="margin : -30px -<?php echo $width;?>px 0 0; height : 30px; vertical-align : middle; margin-left : -10px; margin-bottom : 5px; border-radius : 15px; border : 1px solid black;">
     
    <div id="nomsoustestqualcnc" style="font-size : 22px; font-weight : bold; margin-top : 10px;" ></div>
     
     
     
    <img src="images/ok.png" onclick="envoireponsecnc('ok');" style="width : 80px; height : 80px; margin : 35px; border : 0px;">
     
    <img src="images/nok.png" onclick="envoireponsecnc('non ok');" style="width : 80px; height : 80px; margin : 35px; border : 0px;">
     
    </div>
    Ce code peut parettre un peu lourd, la majorité des fonctions JS servant à mettre en forme un tableau. Encore une fois, cette partie marche très bien, là n'est pas mon problème.

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    je me rend compte que je n'ai pas inclus mon fichier oXHR.js

    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
    function getXMLHttpRequest() {
    	var xhr = null;
     
    	if (window.XMLHttpRequest || window.ActiveXObject) {
    		if (window.ActiveXObject) {
    			try {
    				xhr = new ActiveXObject("Msxml2.XMLHTTP");
    			} catch(e) {
    				xhr = new ActiveXObject("Microsoft.XMLHTTP");
    			}
    		} else {
    			xhr = new XMLHttpRequest(); 
    		}
    	} else {
    		alert("Votre navigateur ne supporte pas l'objet XMLHTTPRequest...");
    		return null;
    	}
     
    	return xhr;
    }

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    if($verification=$requeteverification->fetch())
    fetch() ne renvoie false qu'en cas d'erreur... donc pas de raison de ne pas entrer dans la condition, même s'il n'y a pas de résultat...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par antoineesm Voir le message
    Si je parlais d'AJAX/Javascript/XMLHttpRequest, c'est que j'en utilise !
    Ah... Tu n'utilises donc pas de clavier ? Ni de chaussure ni de chaussette ? Parce que bon, tu ne nous en as pas parlé, pas de pointure, pas d'épaisseur de semelle...

    Ton problème n'a aucun rapport avec AJAX, c'était une question d'utilisation des fonctions SQL de PHP -_-°.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    fetch() renvoi false en cas d'erreur, mais aussi lorsqu'aucune donnée n'est trouvée !

    Mais ta remarque m'a donné la voie vers où chercher. J'ai donc modifié ma requête de vérification, et désormais, ma requete m'indique bien quand il y a un bug d'enregistrement !

    Je n'ai pas encore trouvé la raison de mon problème, toutefois, je sens que je chauffe... Je cherche encore un peu ce soir et j'espère trouver

    Merci de votre aide,

    Antoine

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/01/2013, 14h16
  2. Erreur 1292 à l'exécution d'une procedure stockée
    Par pbatty1 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 04/01/2012, 19h18
  3. Réponses: 3
    Dernier message: 26/10/2011, 10h15
  4. Erreur de l'exécution d'une requête
    Par ngatchou dans le forum WinDev
    Réponses: 3
    Dernier message: 11/06/2009, 16h47
  5. Erreur dans l'exécution d'une requête
    Par ouinih dans le forum SQL
    Réponses: 3
    Dernier message: 11/06/2008, 23h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo