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

  1. #1
    Candidat au Club
    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
    Points : 3
    Points
    3
    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 éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    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
    Candidat au Club
    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
    Points : 3
    Points
    3
    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