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_combine et insertion BD


Sujet :

PHP & Base de données

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

    Informations forums :
    Inscription : Juin 2012
    Messages : 26
    Points : 14
    Points
    14
    Par défaut array_combine et insertion BD
    Bonjour tout le monde je suis à la cherche d'une solution à mon problème et j’espère que vous pourrez m'aider =)

    Voila je possède un fichier CSV j'ai extrait quelques lignes pour effectuer des tests. Je suis presque à la fin de mon projet seulement ce problème me bloque. En effet dans mon programme j'ai choisi de mettre en morceau les différentes parties de mon fichier et de les stocker dans des arrays. Un de mes tableaux contient des références et des prix je les ai combinés dans un tableau et j'ai réussi à les insérer dans ma base de données (je précise que l'insertion de ces données à créé de nouveaux produits automatiquement car ils possèdent un id_product qui s'auto_incrémente). Jusque là il n'y a pas de problème, c'est plus quand j'ai voulu insérer les noms des produits ainsi que leur descriptions que je n'arrive pas alors que le principe est le même que ce qui a été dit auparavant. Je détaille plus clairement mon problème, dans mon fichier CSV la deuxième colonne de mon fichier concerne les noms de produits :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $produit[] = "";
    array_push($produit, $data[1]);
    Voici mon tableau créé, il me retourne ceci:

    0 => string 'Product' (length=7) 
    1 => string '' (length=0) 
    2 => string 'Sac Papier - poignées plates' (length=28) 
    3 => string '' (length=0) 
    4 => string 'Sac Papier - poignées plates' (length=28) 
    5 => string '' (length=0) 
    6 => string 'Sac Papier - poignées plates' (length=28) 
    7 => string '' (length=0) 
    8 => string '' (length=0) 
    9 => string '' (length=0) 
    10 => string '' (length=0) 
    11 => string '' (length=0) 
    12 => string 'Big Shopper PP Tissé' (length=20) 
    13 => string '' (length=0) 
    14 => string 'Big Shopper PP Tissé' (length=20) 

    certaines lignes ne contiennent pas de nom voila pourquoi de la ligne 7 à 11 il y a '', suite à cela j'effectue un array_slice car les deux premières lignes ne m'intéressent pas.

    Le deuxième tableau me retourne ceci, j'applique les mêmes méthodes citées avant :

    0 => string 'Artikel' (length=7) 
    1 => string '' (length=0) 
    2 => string '80 grs Blanc' (length=12) 
    3 => string '' (length=0) 
    4 => string '80 grs brun' (length=11) 
    5 => string '' (length=0) 
    6 => string '90 grs Blanc' (length=12) 
    7 => string '' (length=0) 
    8 => string 'Poly' (length=4) 
    9 => string '' (length=0) 
    10 => string 'Blanc poly' (length=10) 
    11 => string '' (length=0) 
    12 => string 'tissé PP' (length=8) 
    13 => string '' (length=0) 
    14 => string 'tissé PP' (length=8) 
    J'ai donc mes deux tableaux je décide donc de les faire combiner comme ce que j'ai fait avant et voici ce que j'obtiens :

    'Sac Papier - poignées plates' => string '90 grs Blanc' (length=12)
    'Big Shopper PP Tissé' => string 'tissé PP' (length=8)

    Il m'a oublié la plupart des lignes et ne m'en retourne que deux, pourquoi? alors que j'ai déjà créé un array_combine de cette façon et que je m'en suis servi? Je laisse le code de la création de mon tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $output4 = array_slice($produit , 2);
    	var_dump($output4);
     
    $output5 = array_slice($nom, 2);
    	var_dump($output5);
    foreach($g = array_combine($output4, $output5) as $output4 => $output5){
    		$newg = array_slice($g , 1);
    	}
    	var_dump($newg);
    Enfin j'ai une dernière question j'ai un autre fichier celui-ci contient les fonctions qui vont effectuer des requêtes sur ma base de données, comment je peux dire que je récupère les derniers id des derniers produits créés grâce au premier tableau combiné qui les créés, car grâce à ces id je pourrais insérer les données les données du deuxième tableau combiné qui ne marche pas pour l'instant :s voici mon code pour la requête sql :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function modifier_produit_prestashop($output4, $output5){
    		$sql = mysql_query("select last_insert_id( id_product ) from ps_product limit 7");
     
    		/*$sql2 = mysql_query("update ps_product_lang set id_lang = 5, description = '".$output5."', name = '".$output4."' where id_product = '$resultat'");
    		var_dump($sql2);*/
    	}
    La première requête récupère les derniers id insérés depuis la 7ème ligne, et la deuxième requête permet de faire un update sur la table concernée en fonction des ids récupérés.

    Je prie pour que quelqu'un me vienne en aide la fin de mon stage arrive bientôt et il faut que je puisse rendre ce projet terminé et être bloqué sur ce problème m'ennui je peux pas avancer :s si quelqu'un sait pourquoi j'accepter avec plaisir ces explications voila je vous remerci et vous souhaite une bonne fin de soirée

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    tu n'as que 2 lignes dans ton tableau résultat parce que dans ton tableau servant de clés, tu as plusieurs fois les même valeurs et un tableau ne peut avoir de clé dupliquée. Donc au moment de la combinaison des tableaux (tableau des clés => tableau des valeurs) toute clé existante est réutilisée.
    Dans ton tableau des produits, tu n'as que 2 produits distincts donc une fois array_combine() exécuté, tu ne peux avoir qu'un tableau à deux clés.
    Par ailleurs pour chaque clé existante, la combinaison écrase la valeur précédente qui lui était rattachée.
    Tu as 3 fois la clé 'Sac Papier - poignées plates' avec pour valeurs '80 grs Blanc', '80 grs brun', '90 grs Blanc'. Tu te retrouves en sortie avec 'Sac Papier - poignées plates' => '90 grs Blanc' qui est la dernière valeur connue pour cette clé.

    La deuxième question repose sur le tableau résultat de la première.
    Mais je ne l'ai pas comprise.

Discussions similaires

  1. [DOM] [Xerces] Insertion d'une entité
    Par Traroth dans le forum Format d'échange (XML, JSON...)
    Réponses: 10
    Dernier message: 19/05/2008, 09h28
  2. Bulk insert et caractère accentué
    Par slc dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/04/2003, 12h52
  3. probleme d'insertion d'un Float
    Par neness dans le forum Débuter
    Réponses: 3
    Dernier message: 07/01/2003, 12h32
  4. [Postgresql] pb lors d'insertion de données
    Par bob20000 dans le forum Requêtes
    Réponses: 8
    Dernier message: 04/11/2002, 15h33
  5. Réponses: 4
    Dernier message: 28/09/2002, 00h00

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