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 :

INSERT Dynamique [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Par défaut INSERT Dynamique
    Bonjour,

    Voila mon problème :

    Je génère automatique un formulaire contenant donc plusieurs "input" et dont "name" correspond au nom de champ de ma table SQL.

    La génération du formulaire est dynamique cela me permet de rajouter un ajout de champ saisie en deux cliques pour mes utilisateurs.

    J'aimerai maintenant pouvoir insérer une fois que mon formulaire est remplie en sachant que mon code INSERT doit être dynamique pour insérer a la volé sans modification de mon code si jamais je devais rajouter un autre champ dans mon formulaire.

    EXEMPLE :

    <input type="text" name="Nom" >
    <input type="text" name="Adresse">
    etc..

    Je dois faire un INSERT INTO matable ('Nom','Adresse') VALUES ($_POST['Nom'],$_POST['Adresse']) mais le problème c'est que si demain je dois rajouter un champ ou plusieurs j'aimerai que mon code INSERT PHP soit dynamique en fonction du formulaire.

    1/ Lister les champs de ma table puis insérer les données correspondante une seule fois.
    Avez vous une idée ? et j'espère avoir été le plus clair possible.

    Merci a vous.

  2. #2
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Salut,
    perso je passe les champs dans un tableau et je filtre les indésirables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <input type="text" name="fields['nom']">
    <input type="text" name="fields['prenom']">
     
    $fields = checkFields($_POST['fields'], 'nom', 'prenom');
    $fiedsNames = array_keys($fields);
     
    $sql = "INSERT INTO table (".implode(', ', $fieldsName).") VALUES('".implode('\', \'', $fields)."')";
    La fonction checkFields() doit supprimer les entrées du tableau qui ne sont pas dans la liste d'arguments sinon c'est pas sécurisé du tout et "escaper" les valeurs. D'autre part selon ta version de SGBD les int entre quotes peuvent ne pas être convertis automatiquement il me semble dans la requête donc il faut ajouter un test. Faut aussi être conscient que le client connaîtra les noms de champs SQL.
    Bye

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Par défaut
    Citation Envoyé par Djakisback
    Salut,
    perso je passe les champs dans un tableau et je filtre les indésirables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <input type="text" name="fields['nom']">
    <input type="text" name="fields['prenom']">
     
    $fields = checkFields($_POST['fields'], 'nom', 'prenom');
    $fiedsNames = array_keys($fields);
     
    $sql = "INSERT INTO table (".implode(', ', $fieldsName).") VALUES('".implode('\', \'', $fields)."')";
    La fonction checkFields() doit supprimer les entrées du tableau qui ne sont pas dans la liste d'arguments sinon c'est pas sécurisé du tout et "escaper" les valeurs. D'autre part selon ta version de SGBD les int entre quotes peuvent ne pas être convertis automatiquement il me semble dans la requête donc il faut ajouter un test. Faut aussi être conscient que le client connaîtra les noms de champs SQL.
    Bye
    Mais si demain je rajoute un champ dans ma table je serai obligé de modifier le code.
    En fait j'ai une page AJOUTER UN CONTACT chaque champ input correspond a un champ SQL lors de mon INSERT je voudrai récupèrer le nom des champ sans savoir combien il y en aura. L'idéale sera un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
     mysql_query("INSERT INTO matable ($champ++) VALUES ($contenu++)  ")

  4. #4
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Tu peux utiliser mysql_list_fields() pour connaître la liste des champs de ta table et construire le form dynamiquement mais je te conseille de faire le checkFields à la main. Mettons que ajoutes à ta table un champ "validated ENUM('0', '1')", qui soit à 0 par défaut, pour ne pas afficher les contact non validés, si tu tries pas, le client post un form avec un champ name="validated" value="1" et ton enregistrement a comme flag, validé.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Par défaut
    Citation Envoyé par Djakisback
    Tu peux utiliser mysql_list_fields() pour connaître la liste des champs de ta table et construire le form dynamiquement mais je te conseille de faire le checkFields à la main. Mettons que ajoutes à ta table un champ "validated ENUM('0', '1')", qui soit à 0 par défaut, pour ne pas afficher les contact non validés, si tu tries pas, le client post un form avec un champ name="validated" value="1" et ton enregistrement a comme flag, validé.
    En faites pour mes variables POST je fais un explode sans pb les données sont là, je peux donc faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $comma_separated = implode(",", $_POST);
    INSET INTO matable (MES CHAMPS) VALUES($comma_separated);
    Sais tu comment je peux récuper le nom d'une variable post pour que je fasse un explode sur tout les nom des champs POST ?

  6. #6
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Avec array_keys($_POST); mais si tu fais ca directement sur $_POST t'auras les autres, comme le submit ou des fois tu passes l'id en hidden, d'où le tableau fields : name="fields[]", comme ca tu fais ton array_keys() sur $_POST['fields'] pour avoir les noms de champs et ton implode() sur $_POST['fields'] pour avoir leur valeurs correspondantes.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Par défaut
    Citation Envoyé par Djakisback
    Avec array_keys($_POST); mais si tu fais ca directement sur $_POST t'auras les autres, comme le submit ou des fois tu passes l'id en hidden, d'où le tableau fields : name="fields[]", comme ca tu fais ton array_keys() sur $_POST['fields'] pour avoir les noms de champs et ton implode() sur $_POST['fields'] pour avoir leur valeurs correspondantes.
    Merci beaucoup mais voila ce que j'ai fait finalement cela marche très bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $champ = mysql_query("SELECT item FROM ordermessocietes ORDER BY `real` ASC");	
    while( $champ = mysql_fetch_row($comptechamp) ){
    	$listechamp[] = $champ[0];
    }
    $aff = implode($listechamp,"`,`");
    $postsaise = implode($_POST,"','");
    $sqlin = "INSERT INTO mes_societes (`$aff`) VALUES ('$postsaise')";
    De cette façon je peux rajouter ou supprimer un champ sans avoir a retoucher au code d'insert !

    Merci beaucoup de votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 14/05/2007, 11h00
  2. Insertion dynamique de lignes en colonne dans un tableau
    Par lodan dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 23/03/2007, 07h18
  3. insertion dynamique de lignes dans un tableau
    Par loreleï85 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 22/06/2006, 17h32
  4. Réponses: 4
    Dernier message: 30/03/2006, 16h20
  5. [Tableaux] Insertion dynamique ligne dans un tableau
    Par masseur dans le forum Langage
    Réponses: 12
    Dernier message: 28/03/2006, 14h53

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