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

PHP & Base de données Discussion :

Mise à jour d'une variable contenant une autre variable


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Octobre 2013
    Messages : 4
    Par défaut Mise à jour d'une variable contenant une autre variable
    Bonsoir à tous,
    j'ai un problème avec du code Php/MySQL, je fais donc appel à votre générosité pour me débuguer !

    Mon script, en gros, agit en deux temps :

    il crée une base de données avec des tables, dont les clefs primaires sont en auto-increment, et dont certaines possèdent une clef étrangère
    il peuple ensuite les tables en fonction d'un fichier que j'uploade

    Au départ, j'effectuais des requêtes séparées, donc pour X tables je faisais X requêtes avec tout ce que ça implique, les blocs conditionnels, etc....ça avait donc cette gueule là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $requete1 = "INSERT INTO matable1 blablabalabla";
     
    if (mysqli_query($link, $requete1 )) {
    blablablabla
    }
    et ainsi de suite ! Linéairement, je définissais la requête, puis je l'exécutais. Lorsque j'arrivais au peuplement d'une table contenant une clef étrangère, je procédais comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //je sais qu'après avoir rempli une table dont la clef primaire s'auto incrémente, je peux récupérer cette valeur
    $auto_increment = mysqli_insert_id($link)
     
    // Ici dans les valeurs je place la valeur de mon auto incrément dans le champ correspondant à une foreign key
    $requeteX = "INSERT INTO matableX blablabalabla VALUES (...." ' ".$auto_increment." ' "...)
     
    //Ici je balance la requete
    if (mysqli_query($link, $requeteX )) {
    blablablabla
     
    }
    Bref, tout cela marchait super bien...jusqu'à ce que je décide de simplifier mon code, et de faire comme j'ai fait pour ma création de tables, c'est à dire placer les requêtes dans un tableau et les lancer avec une boucle :
    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
     
    //je déclare $auto_increment sinon je ne peux pas l'utiliser, et je l'initialise à vide
    $auto_increment='';
     
    //je définis toutes mes requêtes
    $requête[0] = "INSERT INTO matable1 blablabalabla";
    ...
    $requete[X] = "INSERT INTO matableX blablabalabla VALUES (...." ' ".$auto_increment." ' "...)
     
    //je les lance dans un for dans lequel je teste si mysqli_insert_id($link) renvoie quelque chose, auquel cas je place son contenu dans $auto_increment
    for ($i;$i<=X;i++) {
     
    //si un auto increment s'est produit, il renverra autre chose que la chaine vide donc je mets à jour 
    if (mysqli_insert_id($link)<>'') {
    $auto_increment=mysqli_insert_id($link);
    }
    //Ici je balance la requete
    if (mysqli_query($link, $requeteX )) {
    blablablabla
    }
     
    }
    Mais le problème c'est que lorsque j'arrive à la première requête qui utilise $auto_increment, un echo de la requête totale montre que la variable n'a pas été mise à jour et possède la valeur que je lui ai donnée initialement, c'est à dire vide. Alors bien sûr j'ai quand même fait un echo de $auto_increment juste avant de lancer la requête, et elle me donne la bonne valeur de l'index. Elle s'est donc bien mise à jour. Mais dans la requete, elle a gardé sa valeur d'origine. J'ai essayé de faire ça avec des variables dynamiques, j'ai exactement le même problème.

    [EDIT] : j'ai aussi essayé de passer par les références, ça ne change rien...

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 666
    Par défaut
    tu pourrais par exemple utilisé des requêtes préparées puisque tu ne connais pas encore la valeur de l'identifiant au moment de stocker la requête dans le tableau :
    http://php.net/mysqli.quickstart.prepared-statements

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Octobre 2013
    Messages : 4
    Par défaut
    Ah oui merci j'y avais pas du tout pensé ! En fait ça s'utilise en "mode objet" avec un "?" comme caractère joker pour les values que je ne connais pas encore ?

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/11/2012, 19h44
  2. Réponses: 0
    Dernier message: 19/11/2012, 11h57
  3. [MySQL 5] Mise à jour de 3 bases les unes par rapport aux autres
    Par Doc.Fusion dans le forum Administration
    Réponses: 1
    Dernier message: 17/07/2009, 20h15
  4. [VBA Excel] Appliquer une macro sur une celulle contenant une valeur
    Par tchauviere dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 21/01/2008, 10h21
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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