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 :

Array qui ne passe pas


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 26
    Par défaut Array qui ne passe pas
    Bonjour tout le monde,

    voila cela fait 2 semaines que je suis sur la même fonction et je n'ai toujours pas réussi à résoudre mon problème seulement je suis en stage et je termine vendredi et si je n'arrive pas à me débloquer je ne pourrai pas finir mon projet et cela me gêne énormément :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function modifier_produit_prestashop2($key, $number = 8){
    		$sql = mysql_query("SELECT(LAST_INSERT_ID( id_product )) FROM ps_product LIMIT $number");
    		while($r = mysql_fetch_assoc($sql)){
    			foreach($r as $key2){
    				$sql2 = mysql_query("update ps_product_lang set description = '".$key."' where id_product = '" .$key2. "'");
    			}
    		}
    	}
    Ci dessus voici ma fonction, ma première requête me permet de sélectionner un code (ou un id si vous préférez, ici je récupère LES 8 DERNIERS ID CREES) ensuite je récupère les données dans un array_assoc ma deuxième requête fait un update dans une table en fonction des id que je récupère.

    J'ai remplacé la variable $key dans le nom du champ name par un nom bidon (pour exemple j'ai mis pouet), en effectuant ma requête il m'a inséré le mot pouet pour les derniers id récupérés. (soit les 8 derniers)
    preuve que mon update fonctionne bien dans le principe, seulement quand j'appelle ma fonction grâce à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $output5 = array_slice($produit , 2);
        $output5 = array_filter($output5);
        foreach($output5 as $key){
            modifier_produit_prestashop($key);}
    Je passe le $key en paramètre dans ma fonction, il est censé contenir les données de mon tableau $output5 et de les insérer dans la colonne nom, mais il ne prend que la dernière valeur de mon tableau et l'insère pour les huit derniers id (normal car il est définit que cela modifie ma table pour les derniers id créés soit les 8 derniers). Pour simplifier il insère toto sur les 8 dernières lignes, alors que mon tableau contient titi, tata, tutu, toto etc... et je voudrai qu'il les insère tous en fonction de l'id donc si je résume l'insertion en fonction du numéro ça fonctionne car en faisant un test bidon il passe le nom, le seul truc qui cloche c'est le nom contenu dans mon array qui ne veut pas passer correctement.

  2. #2
    Membre émérite Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Par défaut
    Tu as vérifié via un log ou un echo que tu envoyais la bonne valeur à la fonction?

    Autremebnt dit que les éléments du tableau sont bien ceux attendus ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 26
    Par défaut Array qui ne passe pas
    Oui j'ai vérifié avec un echo j'ai bien les bonnes données qui sont passées en paramètres

  4. #4
    Membre émérite Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Par défaut
    Je viens de relire l'énoncé de ce que tu veux faire ( situé vers la fin ).

    C'est bien mettre dans la description des 8 dernières lignes, l'entrée correspondante du tableau ( passé via $key )?

    Genre comme ca :
    rang1 => value1,
    rang2 => value2,
    rang3 => value3,
    ...
    Si c'est bien cela, pourquoi est-ce que tu boucle dans ta fonction sur les 8 dernières?
    Ou pourquoi est-ce que tu boucle sur ta fonction ....

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 26
    Par défaut Array qui ne passe pas
    Oui c'est bien ça en fait voici ce que comporte mon tableau :

    Sac Papier – poignées plates
    Sac Papier – poignées plates
    Sac Papier – poignées plates
    S
    S
    Big Shopper PP Tissé
    Big Shopper PP Tissé

    J'ai 7 données je veux que ces 7 données soient insérées en fonction des id récupérés par cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = mysql_query("SELECT(LAST_INSERT_ID( id_product )) FROM ps_product LIMIT $number");
    Si je boucle dans ma fonction c'est parce que je stocke les données de mon select dans un array,donc il faut bien que boucle pour dire que pour chaque valeur sélectionnée, j'applique la deuxième requête. Ensuite le deuxième foreach boucle sur mon array pour dire que pour chaque données j'appelle cette fonction.

  6. #6
    Membre émérite Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Par défaut
    Et du coup, la derniere valeur est placée pour toutes les lignes.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 26
    Par défaut Array qui ne passe pas
    Oui c'est ce qui se passe en ce moment, on m'a dit aussi je devrais peut etre faire en sorte que dans ma fonction je ne garde que le select et que au moment ou j'appelle ma fonction je fais un return et j'applique mon update a cet endroit..

  8. #8
    Membre émérite Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Par défaut
    moi je ferais comme cela :

    - Recupération des nouvelles valeurs (tableau output5)
    - Appel de la fonction modifier_produit_prestashop() avec non plus en param la valeur mais tout le tableu.
    - Récupération des lignes à mettre à jour, idéalement autant que la taille du tableau.
    - Parcours des enregistrement et mise à jour de manière synchrone avec le parcours de output5

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 26
    Par défaut Array qui ne passe pas
    D'accord mais comment tu traduirais ça en code...je vois le principe mais le mettre en place je t'avouerai que je suis un peu perdu

  10. #10
    Membre émérite Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Par défaut
    un peu comme cela :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function modifier_produit_prestashop($values, $number = 8 ) 
    {
         $dataSql = mysql....;
         foreach($datas as $k=>$d ){
              $sql = 'update ... set desc = '.$values[$k].' where id = '.$d['id'];
         }
    }

    Ou un truc du genre. Tu peux aussi faire un incrément de l'index tu tableau output pour chaque ligne mise à jour.

    Edit : Désolé pour l'edit mais j'avais soumis un peu vite
    Edit2 : Après ta requete de sélection des derniers enregistrements me semble un peu étrange ( et pas sur qu'elle fonctionne )

Discussions similaires

  1. [XHTML] [DEBUTANT] Validation qui ne passe pas
    Par hugo123 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 25/01/2006, 20h15
  2. [Tableaux] variable qui ne passe pas
    Par oceane751 dans le forum Langage
    Réponses: 5
    Dernier message: 31/12/2005, 02h56
  3. [method post] argument qui ne passe pas
    Par crevettes59000 dans le forum Langage
    Réponses: 3
    Dernier message: 30/12/2005, 15h11
  4. un truc qui ne passe pas sous firefox ...
    Par SpaceFrog dans le forum Général JavaScript
    Réponses: 39
    Dernier message: 08/11/2005, 15h59
  5. Requête qui ne passe pas
    Par TheBart dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/08/2005, 10h12

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