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

jQuery Discussion :

Changement nombre ajax - résultat aléatoire


Sujet :

jQuery

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2017
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2017
    Messages : 78
    Points : 36
    Points
    36
    Par défaut Changement nombre ajax - résultat aléatoire
    Bonjour, je vous explique mon problème.

    J'ai un champ de type input "nom", quand je le rempli, il créer une ligne dans ma base de donnée avec le nom que j'ai mis dans le champ, et ensuite il l'affiche en dessous.

    Pour ça aucun soucis, le problème c'est que au dessus de tout ça, j'ai un div "Liste des élèves" avec le nombre d'élèves total de ma table, pour afficher le nombre total aucun soucis non plus, mon problème c'est au moment d'ajouter un élève, il me change bien le nombre total mais en gros, il change un peu n'importe comment, assez aléatoirement. (je précise que le changement se fait sans actualiser la page)

    Par aléatoirement je veux dire par exemple:
    • Je vais avoir 0 élève, je vais en ajouter un , et là ça va passer directement à 1 élève.
    • Je vais avoir 0 élève, je vais en ajouter un , et là ça va rester à 0 (mais si j'actualise, il me passe bien a 1 élève)
    • Je vais avoir 0 élève, je vais en ajouter un, et ça va rien faire, je vais en rajouter un autre, et là il y aura 2 élèves, il va bien faire le changement.



    Sauriez vous de quoi ça peut venir ?

    merci d'avance.


    Voici mon code:

    eleves.php (form + jquery/ajax)

    Code HTML : 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
    <?php
    session_start();
     
    include "../inc/db.php";
     
    $req = $bdd->query("SELECT * FROM eleve");
    $reponse = $req->fetchAll();
     
     
    $req_nombre = $bdd->query("SELECT * FROM eleve");
    $nombre_eleve = $req_nombre->rowCount();
     
    ?>
     
     
    <?php include "../inc/header.php"; ?> 
     
    <div class="breadcrumbs">
            <div class="page-header float-left">
                <div class="page-title">
                    <h1>Listes des élèves - <span id="nombre_eleve"><?= $nombre_eleve ?></span> enregistré(s)</h1>
                </div>
            </div>
    </div>
     
     
    <div class="content mt-3">
        <form method="POST" action="">
            <input type="text" id="liste_nom" placeholder="Nom" />
            <input type="submit" value="Ajouté" id="submit">
        </form>
     
        <div id="all_eleve">
            <?php 
     
            $req = $bdd->query("SELECT * FROM eleve ORDER BY id DESC");
            $resultats = $req->fetchAll();
            ?>
     
            <?php foreach($resultats as $r) { ?>
                 Nom: <?= $r['liste_nom']; ?><br>
            <?php } ?>
        </div>
    </div>
     
     
     
    <script>
        
    $("#submit").click(function (e) {
     
    e.preventDefault();
     
    var liste_nom= $("#liste_nom").val();
     
        if(liste_nom) {
     
            $.ajax({
                type: "POST",
                url: "fetch.php",
                data:
                {
                    liste_nom:liste_nom
                },
                success: function(response) {
                    document.getElementById("all_eleve").innerHTML=response+document.getElementById("all_eleve").innerHTML;
                }
            });
     
     
            $.ajax({
                type: "POST",
                url: "nombre_eleve.php",
                data:
                {
                    liste_nom:liste_nom
                },
                success: function(data) {
                    $("#nombre_eleve").html(data);
                }
            });
        }
    });
    </script>
     
    </body>
    </html>

    fetch.php (traitement pour l'ajout d'un élève)

    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
    <?php
    include "../inc/db.php";
     
     
    if(isset($_POST['liste_nom'])) {
     
    $liste_nom = $_POST['liste_nom'];
    $insert = $bdd->prepare("INSERT INTO eleve (liste_nom) VALUES ('$liste_nom')");
    $insert->execute();
     
    $select = $bdd->query("SELECT * FROM eleve WHERE liste_nom='$liste_nom'");
    $response = $select->fetchAll();
     
     
     
    if($select) {
        foreach($response as $r) { 
         echo 'Nom: '.$r["liste_nom"].'<br>';
        }
      }
    }
     
    ?>

    nombre_eleve.php (traitement pour changer le nombre total d'élève)

    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
    <?php
    include "../inc/db.php";
     
     
    if(isset($_POST['liste_nom'])) {
     
    $liste_nom = $_POST['liste_nom'];
     
     
    $req_nombre_eleve = $bdd->query("SELECT * FROM eleve");
    $nombre_eleve = $req_nombre_eleve->rowCount();
     
     
      if($req_nombre_eleve) {
         echo ''.$nombre_eleve.'';
      }
     
    }
     
    ?>

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 396
    Points : 4 825
    Points
    4 825
    Par défaut
    pourquoi utiliser 2 fonctions ajax successivement, si la première est déjà en traitement?
    c’est faisable avec une seule fonction ajax et un seul fichier php, il est temps que tu utilises dataType:'json' dans ajax :

    index.php
    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
    $("#submit").click(function (e) {
     
    e.preventDefault();
     
    var liste_nom= $("#liste_nom").val();
     
        if(liste_nom!="") {
     
            $.ajax({
                type: "POST",
                url: "traitement.php",
    	    dataType:'json',//important
                data:
                {
                    liste_nom:liste_nom
                },
                success: function(reponse) {
                    console.log(JSON.stringify(reponse));
    		$("#nombre_eleve").text(reponse.nbr_eleve);
    		$('#all_eleve').append('<br/>'+reponse.dernier_name_inserer);
                },
    	   error:function(err){alert(err.responseText);}
            });
        }
    });

    traitement.php :
    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
     
    <?php
    include "../inc/db.php";
    $rep=["nbr_eleve"=>[],"dernier_name_inserer"=>""];
     
    if(isset($_POST['liste_nom'])) {
     
    	$liste_nom = $_POST['liste_nom'];
    	$insert = $bdd->prepare("INSERT INTO eleve (liste_nom) VALUES ('$liste_nom')");
    	$insert->execute();
    	if($bdd->lastInsertId()>0){
    		$select = $bdd->query("SELECT * FROM eleve WHERE liste_nom='$liste_nom'");
    		$response = $select->fetchAll(); 
     
    		if($select->rowCount()>0) {
    			$rep['dernier_name_inserer']=$response[0]["liste_nom"];
    		}
    		$req_nombre_eleve = $bdd->query("SELECT * FROM eleve");
    		$nombre_eleve = $req_nombre_eleve->rowCount();
    		if($nombre_eleve>=0) {
    			$rep['nbr_eleve']=$nombre_eleve;
    		}
    	}
    }
    echo json_encode($rep);//important (aucun "echo" ne doit apparaître dans le fichier, appart celle-là)
     
    ?>

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- même si tu veux conserver les 2 appels Ajax :

    • il faut que le 2ème se fasse DANS le "success" du 1er, puisqu'il dépend du 1er


    Explication : au cas où tu ne l'aurais pas compris, les appels Ajax sont asynchrone.
    Il peut donc y avoir un "décalage" entre l'appel et le resultat ("success").

    Ce qui explique tes résultats "aléatoires".


    2- la solution de Toufik83 permet de ramener plusieurs résultats avec un seul appel Ajax.
    Cette solution est a privilégier.

    3- cela dit, la méthode "classique" pour compter (les élèves) est :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT COUNT(*) AS total FROM eleve"
    Dernière modification par Invité ; 03/11/2018 à 09h24.

Discussions similaires

  1. [AJAX] Résultat avec Ajax
    Par incao dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 13/05/2006, 23h14
  2. Réponses: 2
    Dernier message: 08/02/2006, 17h54
  3. [sql]Limiter le nombre de résultats
    Par Mimo dans le forum Oracle
    Réponses: 3
    Dernier message: 31/01/2006, 16h53
  4. [XSL] limiter le nombre de résultat ?
    Par MatMeuh dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 31/10/2004, 20h14

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