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 :

fonction implode pour écrire dans une BD


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Points : 11
    Points
    11
    Par défaut fonction implode pour écrire dans une BD
    Bonsoir,
    j'ai une table constituée de 3 colonnes (ID, contenu, classi) et j'ai 2 array contenant chacun autant d'enregistrements, et correspondant à "contenu" et "classi".
    J'ai utilisé la fonction implode pour remplir la colonne "contenu" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query("INSERT INTO fiche_descrip (contenu) VALUES".implode(',', $nom))or die(mysql_error());

    mais je n'arrive pas à remplir les colonnes "contenu" et classi" en même temps, j'ai essayé avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query("INSERT INTO fiche_descrip (contenu,classi) VALUES".implode(',', $contenu).implode(',', $classi))or die(mysql_error());
    mais un message d'erreur apparait :

    Warning: implode() [function.implode]: Invalid arguments passed in C:\wamp\www\tuto_site_zero\lire_fichier\decouper2.php on line 51
    Column count doesn't match value count at row 1

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu ne peux pas bourrer une requete avec tous tes enregistrements.
    Les INSERT doivent etre fait un par un.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    J'ai essayé avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mysql_query("INSERT INTO fiche_descrip (contenu) VALUES".implode(',', $nom))or die(mysql_error());
    mysql_query("INSERT INTO fiche_descrip (classi) VALUES".implode(',', $classi)) or die(mysql_error());
    Le problème c'est que ça génère des enregistrements les uns à la suite des autre, du coup mes n premiers enregistrements contiennent bien la valeur de "contenu" mais pas celle de "classi", et mes n derniers enregistrements l'inverse.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Quand je disais un par un, je ne voulais pas dire le premier champ puis le deuxieme mais la premiere valeur des deux champs puis la deuxieme valeur de deux champs etc.

    Tu pourrais ecrire ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    foreach ($nom as $key=> $value) {
    if (isset($classi[$key])) {
          mysql_query("INSERT INTO fiche_descrip (contenu,classi) VALUES ('" . $nom . "','" . $classi[$key] . "')") or die(mysql_error());
    }
    }
    Pour que ce soit un peu plus propre, il faudrait stocker les couples contenu/classi dans un meme tableau.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Je viens d'essayer mais il y a toujours un message d'erreur. Mais je pensais que je devais utiliser la fonction implode? (je suis débutante en php)

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    J'avais oublié un peu de guillemets, j'ai corrigé ; sinon il faut me donner l'erreur je ne suis pas voyant non plus.

    Concernant implode() fait un echo de ta requete tel que tu l'avais mise au début, tu verras ce qui ne va pas.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    L'erreur est toujours la même après avoir modifié les guillemets, c'est à dire parse error

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je sais qu'il est tard mais je ne pense pas que cela t'aurait plus fatigué de me donner l'erreur entière

    J'ai corrigé dans le message précédent.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Bonjour,
    j'ai relancé et cela donne :

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '/H4>\r\n Classe des Angiospermae Dicotyledonae. ')')' at line 1

    sachant que '/H4>\r\n Classe des Angiospermae Dicotyledonae. ')')' est le contenu du premier enregistrement de nom array $nom

    oups c'est le contenu du premier enregistrement de $classi

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si tes données contiennent des caractères spéciaux, il faut les echapper avec mysql_real_escape_string() avant des les inserer dans la requete.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. [C#][Excel] Problème pour écrire dans une cellule
    Par MoscoBlade dans le forum C#
    Réponses: 1
    Dernier message: 24/02/2010, 16h54
  2. Réponses: 6
    Dernier message: 19/05/2008, 15h39
  3. Question simple pour écrire dans une File
    Par HeyItsIan dans le forum Langage
    Réponses: 1
    Dernier message: 03/01/2007, 01h40
  4. Réponses: 3
    Dernier message: 21/03/2006, 13h12
  5. Réponses: 3
    Dernier message: 01/02/2006, 21h31

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