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 :

récuperer les données d'un formulaire dynamique


Sujet :

PHP & Base de données

  1. #1
    Membre habitué Avatar de Akramweb
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2005
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2005
    Messages : 227
    Points : 197
    Points
    197
    Par défaut récuperer les données d'un formulaire dynamique
    bonsoir,
    j'ai un formulaire généré en javascript :
    le client peut ajouter dynamiquement des produits et pour chaque produit il peut attacher plusieurs photos.
    chaque produit peut avoir plusieurs infos "reference, nom, etc...".
    je peux faire tous cela, et même récupérer chaque produit et le stocker dans la base de données, et je peux aussi uploader les photos.
    mais mon problème vient de là, normalement chaque produit dans la table a un ID et ce même ID que je veux récupérer pour le stocker dans le champs ID_Produit dans la table qui doit contenir les photos.
    Dans le champs ID_Produit je reçois 0.
    voici mon code PHP:

    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
    23
    if(!empty($produits)){
    foreach ($blocs as $id => $val){
    $sql_produit="insert into t_produit(reference) values('$reference')";
    mysql_query($sql_produit);
     
    $id_produits[]=mysql_insert_id();
     
    }
    }
     
    if(!empty($n_fichier)){
    for($i=0;$i<$nb_files;$i++){
     
            $chemin="fichiers/";
            $dt=date("dis");
     
            $newfile[$i]=$dt.'_'.$n_fichier[$i];
            copy($t_fichier[$i],$chemin.$newfile[$i]);
     
            $sql_file="insert into t_produit_pj(id_produit,prd_pj) values('$id_produits[$i]','$newfile[$i]')";
            mysql_query($sql_file);
    }
    }
    Merci d'avance

  2. #2
    Membre actif Avatar de renaudjuif
    Inscrit en
    Avril 2006
    Messages
    325
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 325
    Points : 258
    Points
    258
    Par défaut
    Pouquoi faire 2 boucles?
    Es-tu sur que $bloc n'est pas vide et que le code passe bien dans le foreach?
    Que vaut la valeur $reference ?
    Es-tu sur que l'insert se passe bien ?

    Tu devrais faire du debug, avec des echo, var_dump ou print_r pour voir la valeur intermédiaire de tes variables.
    C'est curieux chez les marins ce besoin de faire des phrases !

  3. #3
    Membre habitué Avatar de Akramweb
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2005
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2005
    Messages : 227
    Points : 197
    Points
    197
    Par défaut
    le tout marche bien, sauf ID_Produit
    j'ai pu insérer toutes les données sauf la valeur de mon ID_Produit

  4. #4
    Membre actif Avatar de renaudjuif
    Inscrit en
    Avril 2006
    Messages
    325
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 325
    Points : 258
    Points
    258
    Par défaut
    Si tout marche bien, alors question bête : l'id que tu dois récupérer est-il bien de type AUTO_INCREMENT ?

    Doc php.net :
    valeur de retour de mysql_insert_id
    L'ID généré pour une colonne AUTO_INCREMENT par la dernière requête en cas de succès,
    0 si la dernière requête n'a pas généré de valeur AUTO_INCREMENT,
    ou FALSE si aucune connexion MySQL n'a été établie.
    C'est curieux chez les marins ce besoin de faire des phrases !

  5. #5
    Membre habitué Avatar de Akramweb
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2005
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2005
    Messages : 227
    Points : 197
    Points
    197
    Par défaut
    Après quelques modifications.
    maintenant mon problème ce que je récupére uniquement le dernier ID.
    j'ai remplacé $id_produits[$i] par $id_produits.

  6. #6
    Membre habitué Avatar de Akramweb
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2005
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2005
    Messages : 227
    Points : 197
    Points
    197
    Par défaut
    je crois que le problème est dû au fait d'utiliser 2 boucles.
    mais l'application doit fonctionner ainsi
    comme j'ai dis au début
    le client doit ajouter dynamiquement des champs de produits (avec javascript) ==> ça marche bien même au coté PHP/Mysql, je peux stocker les données.
    Et pour chaque produit ajouté, le client peut attacher une ou plusieurs photos (avec javascript) ==> ça marche bien même au coté PHP/Mysql, je peux stocker les données.
    mais le problème c'est l'ID_Produit, pour que les photos puissent faire le lien avec leur produit.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    Salut,

    comme l'a dit renaudjuif il faut faire du debug, et pour les requêtes sql tu dois toujours faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query($sql_file) or die ($sql_file . ':' . mysql_error());
    De cette façon tu verras la requête telle qu'elle est envoyée au serveur mysql, ainsi que l'erreur qu'il renvoie.

  8. #8
    Membre habitué Avatar de Akramweb
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2005
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2005
    Messages : 227
    Points : 197
    Points
    197
    Par défaut
    déjà fait et je reçois uniquement le dernier ID_Produit.
    pas d'erreur

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    Quand tu dis ca :
    j'ai remplacé $id_produits[$i] par $id_produits.
    Ca je comprend pas.. Comment veux-tu conserver (et récupérer) plusieurs id_produits, si tu n'utilise pas un indice pour le retrouver..

    Ca voudrait dire $id_produits n'est plus un array et ne contient donc qu'un élément, le dernier..

    Si j'ai compris l'idée de ton script, tu dois continuer à utiliser des array, et le code de debug sql que je t'ai donné devrait te permettre de trouver l'erreur que tu faisais en premier lieu.

  10. #10
    Membre habitué Avatar de Akramweb
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2005
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2005
    Messages : 227
    Points : 197
    Points
    197
    Par défaut
    Voici mon code que j'ai modifié un peu.
    j'ai ajouté => $id_produits[]=mysql_insert_id();
    mais le problème, j'ai 2 boucles.
    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
    if(!empty($produits)){
    foreach ($blocs as $id => $val){
    $sql_produit="insert into cuip_produit(reference) values('$reference)";
    mysql_query($sql_produit);
    $id_produits[]=mysql_insert_id();
    }
    }
     
    if(!empty($n_fichier)){
    for($i=0;$i<$nb_files;$i++){
            $chemin="fichiers/";
            $dt=date("dis");
     
            $newfile[$i]=$dt.'_'.$n_fichier[$i];
            copy($t_fichier[$i],$chemin.$newfile[$i]);
     
            $sql_file="insert into t_produit_pj(id_produit,prd_pj,date) values('$id_produits[$id]','$newfile[$i]','$date')";
            mysql_query($sql_file);
    }
    }

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    Je vois pas pourquoi il y aurait un soucis parce que tu utilises 2 boucles.

    Là il manque un ' après $reference

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql_produit="insert into cuip_produit(reference) values('$reference)";
    Par contre je suis étonné que celle-ci fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql_file="insert into t_produit_pj(id_produit,prd_pj,date) values('$id_produits[$id]','$newfile[$i]','$date')";
    Je ne construis plus mes requêtes ainsi, mais si je me souviens bien les array avec leur indice ne sont pas interprétés, même entre guillemets (mais suis plus sûr)

  12. #12
    Membre habitué Avatar de Akramweb
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2005
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2005
    Messages : 227
    Points : 197
    Points
    197
    Par défaut
    pour "reference" c'est juste erreur de saisi.
    j’espère au moins que tu m'as bien compris quand j'ai exposé mon problème?

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    Oui j'ai compris c'est pas super compliqué comme code non plus, essaie de remplacer ta dernière requête par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql_file="insert into t_produit_pj(id_produit,prd_pj,date) values('".$id_produits[$id]."','".$newfile[$i]."','$date')";

  14. #14
    Membre habitué Avatar de Akramweb
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2005
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2005
    Messages : 227
    Points : 197
    Points
    197
    Par défaut
    ça me donne toujours le dernier ID_Produit.
    tu crois pas, que l'ordre des 2 fonctions doit changer, ou bien mettre l'une dans l'autre?

  15. #15
    Membre habitué Avatar de Akramweb
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2005
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2005
    Messages : 227
    Points : 197
    Points
    197
    Par défaut
    exemple de mon formulaire :
    Nom : exemple_formulaire.jpg
Affichages : 141
Taille : 46,2 Ko

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    Sorry sorry, ma faute, j'étais trop fixé sur la 2eme requête et donc bien à côté de la plaque


    En fait tu devrais utiliser un tableau avec $reference (je suppose qu'il est unique pr chaque produit) comme indice :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $id_produits[$reference]=mysql_insert_id();
    Puis dans la 2eme boucle, il te faut la reference du produit dans les infos sur le fichier de la photo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $id = $id_produits[$reference_du_produit_de_cette_photo];
    $sql_file="insert into t_produit_pj(id_produit,prd_pj,date) values('".$id."','".$newfile[$i]."','$date')";

  17. #17
    Membre habitué Avatar de Akramweb
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2005
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2005
    Messages : 227
    Points : 197
    Points
    197
    Par défaut
    ça donne rien
    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
    if(!empty($produits)){
    foreach ($blocs as $id => $val){
    $sql_produit="insert into t_produit(id_client,produit,bloc,niveau,n_apt,pu,qt,somme,date) values('$id_client','$produits[$id]','$blocs[$id]','$niveaux[$id]','$n_apt[$id]','$pu[$id]','$qt[$id]','$somme[$id]','$date')";
    mysql_query($sql_produit);
    $id_produits[$id_client]=mysql_insert_id();
    }
    }
     
    if(!empty($n_fichier)){
    for($i=0;$i<$nb_files;$i++){
            $chemin="fichiers/";
            $dt=date("dis");
     
            $newfile[$i]=$dt.'_'.$n_fichier[$i];
            copy($t_fichier[$i],$chemin.$newfile[$i]);
     
            $sql_file="insert into t_produit_pj(id_client,id_produit,prd_pj,date) values('$id_client','".$id_produits[$id_client]."','".$newfile[$i]."','$date')";
            mysql_query($sql_file) or die ($sql_file . ':' . mysql_error());
    }
    }

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    Tu en dois pas utiliser id_client, si j'ai bien compris chaque photo est liée à un produit, pas un client.

    Si on simplifie ton problème, par exemple avec ces 2 tables :

    produits
    • id_produit
    • reference_produit


    avec reference_produit unique

    photos
    • id_photo
    • id_produits


    Tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql_produit="insert into produits(reference_produit) values($reference_produit)";
    mysql_query($sql_produit);
    $id_produits[$reference_produit]=mysql_insert_id();
    Et tu dois avoir ce reference_produit dans les infos de toutes les photos relatives à ce produit, pour pouvoir l'utiliser dans la 2° boucle.

    Mais bon pour cela, tu devrais pê d'abord enregistrer le produit sur une première page, puis lui attacher les photos sur une autre..

  19. #19
    Membre habitué Avatar de Akramweb
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2005
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2005
    Messages : 227
    Points : 197
    Points
    197
    Par défaut
    le client est trop exigeant, il veut le formulaire comme celui que je t'ai montré.
    et il veut pas de références, il veut juste mettre le produit et lui attacher une ou plusieurs photos sur la même page

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    Comment différencies-tu tes produits alors? Il doit bien y avoir qlque chose.. Il n'y a pas 2 produits avec le même nom p.ex., c'est de cela dont je parle quand je dis référence.

    Et tu peux tout faire sur une seule page, mais d'une façon ou d'une autre, cette "référence" doit être liée aux infos de la photo

    Sur la photo de ton form, disons que ton 1° produit s'appelle Produit_1, et bien les 3 input suivants qui servent à uploader les photos pour ce produit devraient s'appeler Photo_1_Produit_1, Photo_2_Produit_1, etc..

Discussions similaires

  1. Récuperer les valeurs d'un formulaire dynamique
    Par spawns dans le forum Langage
    Réponses: 12
    Dernier message: 14/11/2012, 16h18
  2. Récuperer les données d'un formulaire HTML avec Knockout.js
    Par Thibault92 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 21/03/2012, 15h04
  3. Réponses: 2
    Dernier message: 18/08/2009, 10h19
  4. Réponses: 2
    Dernier message: 10/09/2007, 16h40

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