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

Langage PHP Discussion :

Nombre de champs variable pour un meme INSERT INTO


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 86
    Points : 33
    Points
    33
    Par défaut Nombre de champs variable pour un meme INSERT INTO
    Bonjour,

    J'ai un souci pour enregistrer des données avec un formulaire générer avec SQL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while ($c=@mysql_fetch_array($result1)) {
    echo "<label><input name=\"ligne[]\" value=\"$ligne-$c[id]\" type=\"checkbox\"/>$c[IntCtrl]</label>";
    }
    Pour l'instant cela fonctionne cela me donne le code HTML que je souhaite
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <label><input name="ligne[]" value="v904-1" type="checkbox">test 1</label>
    <label><input name="ligne[]" value="v904-2" type="checkbox">test 2</label>
    <label><input name="ligne[]" value="v904-17" type="checkbox">test 3</label>

    La ou sa se complique c'est que je souhaite que les données soit enregistrées sur la même ligne avec un INSERT INTO

    Avec un foreach j'affiche bien mes données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach($_POST['ligne'] as $valeur){
    echo $valeur;
    }

    mais je ne sais pas comment enregistrer les données dans ma requête puisque le nombre est aléatoire desfois il peut y en avoir 3 comme 15 ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = mysql_query("INSERT INTO latable  ... 'v904-1' = '1', 'v904-2' = '1', 'v904-17' = '1',...... (Pour l'exemple)
    Les champs de ma table sont nommées : comme la valeur obtenue et pour chaque champs je souhaite mettre une valeur égal a "1".

    Merci de votre aide

  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
    Visiblement dans ta première requête les données sont "verticales" (un id par ligne).
    Pourquoi se retrouvent-elles "horizontales"dans l'insertion (tous les id sur une seule ligne) ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 86
    Points : 33
    Points
    33
    Par défaut
    Bonjour

    Ma 1er requête génère le code HTML du formulaire, La génération du formulaire est différente en fonction des produits que j'ai.

    et la seconde requête insere dans le même Insert.

    La probleme c'est que desfois je vais avoir 5 Checkbox ou 15 par exxemple,

    Donc je ne comprend pas comment intégrer les 5 ou 15 checkbox dans ma requete :/

  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
    et la seconde requête insere dans le même Insert.
    Certes mais tu n'expliques pas pourquoi tu fais ça.

    Il faut que tu aies une insertion par checkbox, donc faire une boucle suyr les checkbox.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 86
    Points : 33
    Points
    33
    Par défaut
    Bonjour

    En faite des personnes enregistres des données (plusieurs fois par jour) et d'une pour économiser la place (il y aura bcp d'enregistrement) le faire en une ligne sera beaucoup plus économe je pense.

    Par exemple :

    Equipe A
    Le formulaire genere 7 controles a réaliser donc une fois que la personne on enregistre les résultats dans SQL en 1 ligne me permettant d'avoir en une seule ligne
    equipe = 'A', v904-1 = '1' , v904-45= '1' , v904-95= '1' , v904-3= '1' ,etc ....

    Equipe B
    Le formulaire genere 15 controles a réaliser donc une fois que la personne on enregistre les résultats dans SQL en 1 ligne me permettant d'avoir en une seule ligne
    equipe = 'B', v904-1 = '1' , v904-45= '1' , v904-95= '1' , v904-3= '1' ,etc ....

    Cela me permet de faire une simple requête pour connaitre quels contrôle on été réalisés pour chaque Équipe.

    J’espère avoir apportée plus d'infos

  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
    Comme tu l'as réalisé toi même depuis le début, c'est contraire à la logique d'une base de données relationelle.
    Tu as une table contenant les tests, une table contenant les utilisateurs, une table contenant les tests par utilisateur avec donc une ligne par test et par utilisateur.
    Même si tu enregistres des milliers de lignes par jour, ça ne représente que peu de données à stocker.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2012
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 133
    Points : 208
    Points
    208
    Par défaut
    Salut,

    Ce que tu veux faire c'est de la sérialisation :

    http://php.net/manual/fr/function.serialize.php

    A n'utiliser que si tu ne souhaites pas requêter sur ces données individuellement. Donc si tu ne souhaites que les stocker et les récupérer d'un bloc d'un seul.

    ++

  8. #8
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 86
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Comme tu l'as réalisé toi même depuis le début, c'est contraire à la logique d'une base de données relationelle.
    Tu as une table contenant les tests, une table contenant les utilisateurs, une table contenant les tests par utilisateur avec donc une ligne par test et par utilisateur.
    Même si tu enregistres des milliers de lignes par jour, ça ne représente que peu de données à stocker.
    Bonjour,
    Oui c'est sur que de manière individuel cela est peut être plus "propre" mais j'ai une contrainte ou je doit absolument mettre toutes les données du formulaire sur une même ligne SQL

  9. #9
    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
    Et quelle est cette contrainte ?

    Ce n'est pas une question de propreté ; si par exemple tu veux connaitre tous les utilisateurs qui ont validé le test 8, tu ne pourras si tu as mis tous les tests dans la même valeur.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 86
    Points : 33
    Points
    33
    Par défaut
    Bonjour,

    Ma direction souhaite que pour chaque équipe, les données soit enregistrées sur une même ligne ... 3 equipes (A, B, C) pour chaque ligne

    Car en plus des checkbox pour lesquels la quantité change en fonction des contrôles a faire, j’intègre des données tel que :

    Equipe,
    Nom personne,
    Heure
    chaine de fabrication
    Batiment

    Ils veulent donc sur la meme ligne les données ci desssus + les differents controle (checkbox)

  11. #11
    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 confonds pas la structure des données et l'affichage sur la page HTML ?

    Ta direction émet des souhaits sur la structure mysql ?
    Dans le premier jet que tu nous as montré tu essayais de faire une colonne dans la table pour chaque checkbox, c'est vraiment ce qu'on t'a demandé ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  12. #12
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 86
    Points : 33
    Points
    33
    Par défaut
    Bonjour,

    Oui ma Direction souhaite que je ne fasse qu'un seul enregistrement.

    Sinon dans ma table en faite au préalable je crée une colonne pour chaque défaut C'est a dire que toutes les colonnes existe deja.
    v904-1
    v904-2
    v904-95
    v904-14

  13. #13
    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
    C'est vraiment la pire des méthodes.
    Du coup, spécifie dans ta requête le nom des colonnes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO latable (v904-1 , v904-3, v904-43) VALUES (1, 1, 1);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  14. #14
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 86
    Points : 33
    Points
    33
    Par défaut
    Bonjour,

    Ma problématique c'est que j'ai plusieurs contrôles a faire donc c'est aléatoire en terme de nombres et les controles a faires (la liste des checkbox est otenu avec le While qui génère le formulaire.

    Ca peut etre par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO latable (v904-1 , v904-3, v904-17, v904-21, v904-12, v904-74, v904-11) VALUES (1, 1, 1, 1, 1, 1, 1);
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO latable (v904-1 , v904-3) VALUES (1, 1);
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO latable (v904-1 , v904-3, v904-12, v904-8) VALUES (1, 1, 1, 1);

  15. #15
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    v904-1
    v904-2
    v904-95
    v904-14
    existe-il un nombre déterminé de valeurs de ce type ?
    Auquel cas il suffit de créer autant de champs que de données "v904-xx".

    Sinon, ça n'a aucun sens de travailler comme ça.
    Ne serait-ce que pour récupérer les valeurs après...

    Une solution serait de tout mettre dans un seul champ "liste_choix", sous la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    v904-1,v904-2,v904-95,v904-14

  16. #16
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 86
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    v904-1
    v904-2
    v904-95
    v904-14
    existe-il un nombre déterminé de valeurs de ce type ?
    Auquel cas il suffit de créer autant de champs que de données "v904-xx".

    Sinon, ça n'a aucun sens de travailler comme ça.
    Ne serait-ce que pour récupérer les valeurs après...

    Une solution serait de tout mettre dans un seul champ "liste_choix", sous la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    v904-1,v904-2,v904-95,v904-14
    Bonjour,
    IOui en faite quand je crée un contrôle, j'ajoute une colonne a la table pour enregistrer la valeur (il y a donc bcp de colonne) afin de pouvoir tout mettre sur la meme ligne

Discussions similaires

  1. [MySQL] Insertion de données en bdd avec un nombre de champs variables
    Par spawns dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 22/05/2015, 16h52
  2. Requete paramétrée avec nombre de champs variable
    Par Braillane dans le forum Accès aux données
    Réponses: 3
    Dernier message: 07/02/2008, 23h09
  3. importer un fichier texte ayant un nombre de champs variables
    Par steelspirit dans le forum kettle/PDI
    Réponses: 4
    Dernier message: 15/01/2008, 10h24
  4. Nombre de paramètres variables pour une procédure [SQLSERVER2005]
    Par chti_vince dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 07/07/2007, 11h59
  5. Interface avec un nombre de champs variable
    Par vladvad dans le forum Windows Forms
    Réponses: 2
    Dernier message: 11/06/2007, 11h19

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