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] Insertion de variable dans la BDD


Sujet :

AJAX

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2011
    Messages : 6
    Points : 4
    Points
    4
    Par défaut [AJAX] Insertion de variable dans la BDD
    Hey everyone !

    Voilà, j'ai un petit soucis, j'ai élaboré un script AJAX qui appelle un script PHP et qui lui donne des variables en POST.

    Le script PHP doit normalement insérer ces variables dans ma base de donnée (je fais un plugin Wordpress, d'où la syntaxe particulière).

    Le problème, c'est que cette insertion ne se fait pas alors que mes variables sont bien reconnues par le script PHP (j'ai fait un test en écrivant les variables dans un fichier, et ça fonctionne parfaitement).

    L'instruction pour écrire dans la BDD fonctionne aussi car si je met d'autres valeurs dans mes variables, ça marche !

    (exemple : avec $date = '2012-24-11', la date rentrera dans la base de donnée)

    Voici mon code :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    global $wpdb;
    $var = explode(',', $_POST['var']);
    $date = $var[0];
    $heure = $var[1];
    $salle = $var[2];
    $renard = 'renard';
    $wpdb->insert("{$wpdb->prefix}plugin_reservation", array('date' => $date, 'heure' => $heure, 'salle' =>$salle));
     
    //Test d'existence de la variable
    $monfichier = fopen('fichier.txt', 'a+');
    fputs($monfichier, $date);
    fclose($monfichier);<br><br>

    Et les scripts Javascript :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var tabReserv = new Array(date, heure, salle);
    ajax('wp-content/plugins/plugin/plugin_reservation.php', tabReserv);
    Avec la fonction :

    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
    function ajax(page, varJS){
        var xhr = getXMLHttpRequest();
        // Constructeur codé séparemment
        if(xhr && xhr.readyState != 0){
           xhr.abort();
        }
     
        //vide pour l'instant
        xhr.onreadystatechange = function(){
           if(xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)){
           }
           else if(xhr.readyState == 2 || xhr.readyState == 3){ // traitement non fini
           }
        }
     
        xhr.open("POST", page, true);
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xhr.send("var="+varJS);
    }
    Voilà, ça fait quelques heures que je m'arrache le cerveau sur ce problème, alors que j'ai l'impression que tout est bien fait !

    Alors si quelqu'un a une idée, je crois que ça pourrait bien m'aider !

    Merci d'avance !!

  2. #2
    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
    A supposer que les variables date, heure et salle soient correctement valorisées dans ton code, il s'agit d'un tableau JavaScript et tu ne peux pas passer un tableau en paramètre d'une requête AJAX.
    Pour rappel, AJAX utilise le protocole HTTP pour communiquer avec le serveur et je te laisse te renseigner sur la signification du premier T de l'acronyme.

    Au passage,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // Constructeur codé séparemment
    if(xhr && xhr.readyState != 0){
       xhr.abort();
    }
    ne sert strictement à rien puisque xhr est une variable (correspondant à une instance de l'objet XMLHttpRequest) que tu viens d'instancier, il n'y a aucune chance qu'elle ai déjà servi à envoyer une requête.
    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

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2011
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Merci pour la réponse !

    Alors apparemment, AJAX ne peut pas envoyer de tableau. Chose que j'ignorais (mais bien le Text de HTTP !).
    Seulement, il résout le problème de lui-même en remplaçant un tableau passé en paramètre et en le changeant en string.

    Pour preuve ce que me donne la console de Firebug quand je fais ma requête AJAX :

    Nom : ajax.PNG
Affichages : 230
Taille : 4,7 Ko

    Donc ma variable est bien passée, et reconnue sous la forme d'un String.
    Du coup, dans mon Script php, je transforme ce String pour recréer un tableau et récupérer mes variables dans leur état de base :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $var = explode(',', $_POST['var']);
    $date = $var[0];
    $heure = $var[1];
    $salle = $var[2];

    Bref, ce tableau existe bien dans ma page PHP car je peux écrire ces 3 variables dans un fichier facilement :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $monfichier = fopen('fichier.txt', 'a+');
    fputs($monfichier, $date); 
    fclose($monfichier);

    Ce code fonctionne parfaitement. Du coup, je suis toujours perdu et ne sais toujours pas pourquoi je n'arrive pas à les rentrer dans la base de donnée.

    PS : J'ai quand même essayer d'envoyer un String en AJAX, mais cela n'a pas changé le problème ..

  4. #4
    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
    Oula... je te déconseille fortement de procéder comme ça !
    Il existe des méthodes standards et éprouvées pour passer plusieurs paramètres dans une requête AJAX et ta façon de faire n'en fait pas partie.

    Déjà, le fait de transformer ton tableau en chaine n'est pas du tout standard, c'est donc Firefox (et depuis peu il me semble) qui décide de procéder ainsi, mais rien ne te garantit que tous les navigateurs (et toutes les versions) feront de même.
    Pour passer plusieurs paramètres, le plus logique serait de créer une chaine de requête avec plusieurs paramètres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xhr.send('date=' + date + '&heure=' + heure + '&salle=' + salle);
    Au pire, tu peux utiliser un format JSON, qui est, lui aussi, standardisé.
    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

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2011
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Okay, merci pour ces précisions, j'utiliserai un peu mieux AJAX désormais.
    Donc j'ai changé et j'envoie un String par AJAX a ma page PHP, en utilisant le modèle que tu m'as donné.

    Mes variables sont bien passées à ma page PHP, cependant mon problème de base reste toujours, il m'est impossible d'enregistrer ces *** variables dans ma base de données.
    Tu n'aurais pas une idée du pourquoi, étant donné que ces variables sont bien reconnues !

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    global $wpdb;
    $wpdb->insert("{$wpdb->prefix}plugin_reservation", array('date' => $_POST['date'], 'heure' => $_POST['heure'], 'salle' => $_POST['salle']));
     
    //On peut renregistrer les variables dans un fichier, mais pas dans la bdd
    $monfichier = fopen('fichier.txt', 'a+');
    fputs($monfichier, $_POST['date']); 
    fclose($monfichier);

Discussions similaires

  1. Réponses: 8
    Dernier message: 16/01/2008, 17h49
  2. Insertion en double dans ma bdd
    Par n@n¤u dans le forum Hibernate
    Réponses: 13
    Dernier message: 20/07/2007, 15h33
  3. [AJAX] Insertion page web dans div.
    Par viinceent dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/05/2007, 11h19
  4. [AS] insertion de variable dans ligne javascript
    Par adr22 dans le forum Flash
    Réponses: 1
    Dernier message: 15/05/2007, 19h49
  5. [AJAX] Insertion de Javascript dans AJAX
    Par youp_db dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 18/10/2006, 15h32

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