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 :

Récupération d'un champ de base de donnée mysql


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 428
    Par défaut Récupération d'un champ de base de donnée mysql
    Bonjour je fait cet ajax:

    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
    $(".testhover").hover(function(){
     
      $.ajax({    //create an ajax request to display.php
            type: "post",
            url: "ombre.php",  
            //data: {ombre: $('[ombre="ombre"]').text()},           
            //dataType: "json",   //expect html to be returned                
            success: function(data){                    
                 console.log("data :",  data);
                alert(data);
                if(data == 'non'){
     
                  alert('non');
                }
     
     
          }
     
        });
    });
    et le fichier ombre.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
    <?php
    session_start();
    include 'fonctions.php';
    $pseudo = $_SESSION['pseudo'];
    $bdd=bdd();
    $result=$bdd->query("SELECT * FROM personne WHERE per_pseudo='$pseudo'");
    $data1=$result-> fetch();
    $data2=$data1['ombre'];
    echo $data2;
    //$Response = $data2;
     
    //echo json_encode($Response);
    ?>

    le champ de la base contient non

    la console me renvoie bien non

    mais le test dans le ajax
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(data == 'non'){
    alert('non');
    }
    data contient bien non mais le test ne passe pas il n'y a pas l'alert?

    merci si vous y voyez une erreur

  2. #2
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Bonjour,

    C'est pas très lisible comme code donc pas facile d'aider

    Je conseillerais cependant de faire une réponse en JSON, d'autant que (comme c'est écrit en commentaire dans le code d'ailleurs) le datatype par défaut d'une réponse AJAX de jQuery est du JSON
    Cela peut donc influer le test de la condition

    De plus, pour être certain de l'index qu'on va tester, on va lui donner un nom manuellement comme pour une variable.

    Ci-dessous, un code qui permet d'output une réponse JSON assez proprement en PHP suivi de la modification du code de base
    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
    <?php
    /**
     * Output JSON response encoded with headers
     * 
     * @param json $response
     */
    function json_response($response = null) {
        // End AJAX return if no data.
        if ($response == null)
            exit;
        // Proper headers for json output.
        header('Content-Type: application/json');
        // Output our response.
        echo json_encode($response);
        exit;
    }
     
    session_start();
    include 'fonctions.php';
    $response = ['success' => false];
    $pseudo = $_SESSION['pseudo'];
    $bdd = bdd();
    $result = $bdd->query("SELECT * FROM personne WHERE per_pseudo='$pseudo'");
    $row = $result->fetch();
    if (!empty($row)) {
        $response['success'] = true;
        $response['personne'] = $row;
    }
    json_response($response);

    il suffit alors de tester la réponse dans le retour AJAX :
    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
    $(".testhover").hover(function(){
     
      $.ajax({    //create an ajax request to display.php
            type: "post",
            url: "ombre.php",  
            //data: {ombre: $('[ombre="ombre"]').text()},           
            //dataType: "json",   //expect html to be returned                
            success: function(data){                    
                 console.log("data :",  data);
                if(data.success && data.personne.ombre == 'non'){
     
                  alert('non');
                }
     
     
          }
     
        });
    });

  3. #3
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 208
    Par défaut
    Bonjour,
    dans ton code :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    echo $data2;
    //$Response = $data2;
      //                                                <- ici il y a un blanc en début de ligne
    //echo json_encode($Response);
    ?>
    il existe un blanc qui est également envoyé.

    Tu peux donc supprimer tous les espaces « parasites » côté serveur ou tester en appliquant un trim(data) sur la donnée reçu ou encore tester la présence du non dans la chaîne avec indexOf() ...

    Le renvoie d'un JSON, comme dit par darkstar123456 reste quand même une excellente solution, autre exemple :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    echo json_encode(array(
        "status" => 200,
        "statusText" => "Le texte en retour"
      ));

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 428
    Par défaut
    un grand merci pour vos solutions, problème résolut

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 428
    Par défaut
    ce problème est résolu mais je dois faire quelque chose en fonction de la réponse qui est juste maintenant mais ça ne marche pas, voici le nouveau script:
    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
     $(".testhover").hover(function(){
     
      $.ajax({    //create an ajax request to display.php
            type: "post",
            url: "ombre.php",  
            //data: {ombre: $('[ombre="ombre"]').text()},           
            //dataType: "json",   //expect html to be returned                
            success: function(data){                    
                 console.log(data);
                //alert(data);
                if(data.success && data.personne.ombre == 'oui'){
                  var ombre='oui';
     
                }else{
                  var ombre='non';
                }
     
     
          }
     
        });
      if(ombre=='oui'){
        var divShadow = $(this).find('.card');
        divShadow.css("box-shadow", "0 0 30px #000000");
     
        var divShadow = $(this).find('.card-footer');
        divShadow.css("height", "65px");
        divShadow.css("font-weight" , "bolder");
        divShadow.css("font-size" , "20px");
    });

  6. #6
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Vous ne pouvez pas exécuter du code en dehors de la fonction $.ajax() de cette façon

    AJAX signifie : Asynchronous JavaScript and XML

    Cela veut dire que le code est asynchrone. Or vous avez écrit du code "synchrone" (l'un en dessous de l'autre)

    Pour que le code soit exécuté en fonction de la réponse AJAX, il doit être dans la réponse AJAX (soit du code directement, soit appeler une fonction à partir de cet endroit)

    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
    23
    24
    25
    26
    27
    28
    29
    $(".testhover").hover(function () {
        // On va créer cette variable car $(this) ne représentra pas notre .testhover dans la réponse AJAX
        var $this = $(this);
        $.ajax({//create an ajax request to display.php
            type: "post",
            url: "ombre.php",
            //data: {ombre: $('[ombre="ombre"]').text()},           
            //dataType: "json",   //expect html to be returned                
            success: function (data) {
                console.log(data);
                //alert(data);
                if (data.success && data.personne.ombre == 'oui') {
                    // J'ai simplifié l'écriture car on peut passer un objet à la méthode css() de jQuery
                    // Cependant, généralement, on va plutôt écrire du CSS à part dans un fichier CSS et ajouter/supprimer des classes (addClass() & removeClass())
                    // C'est beaucoup plus souple de travailler de la sorte
                    $this.find('.card').css("box-shadow", "0 0 30px #000000");
                    $this.find('.card-footer').css({
                        "height": "65px",
                        "font-weight": "bolder",
                        "font-size": "20px",
                    });
     
                }
     
     
            }
     
        });
    });

    Actuellement, le code que vous avez écrit (if(ombre=='oui'){ // etc..) est exécuté avant même la réponse AJAX car JavaScript n'attend pas qu'une instruction ait complètement été terminée pour passer à la suite (sauf si on lui demande spécifiquement)
    De plus, si vous regardez la console du navigateur, vous y verrez probablement une erreur car à ce stage, var ombre n'existe pas, il doit donc y avoir une erreur de type undefined variable 'ombre'

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 19/08/2008, 09h49
  2. [MySQL] Récupération d'une base de données Mysql
    Par metador dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 13/06/2008, 09h38
  3. champ de Base de données
    Par Michel85 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 03/06/2008, 10h31
  4. nom bouton=champs dans base de données
    Par lg022 dans le forum VB.NET
    Réponses: 5
    Dernier message: 30/04/2008, 07h56
  5. [MySQL] Récupération de base de données mysql
    Par davidb1967 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 31/01/2008, 23h15

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