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 :

Insérer des données dans une table avec Foreach [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 20
    Points : 13
    Points
    13
    Par défaut Insérer des données dans une table avec Foreach
    Bonjour tout le monde

    J'ai un souci avec l'utilisation de Foreach.

    J'ai deux Tables,
    Une qui représente une liste de membres.
    Une autre qui enregistre la présence lors d'évènements de certaines personnes parmi ces membres.
    Un évènement ne peut compter que 6 personnes maximum.
    Cette dernière table prend donc la forme :
    event | present1 | present2 | present3 | present4 | present5 | present6

    Lorsque je veux ajouter un évènement à ma table qui répertorie les présences, je souhaite à n'avoir qu'a cocher les membres présents à partir d'une liste de "checkbox".
    Voici la forme que prend mes "checkbox" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <input type="checkbox" 
    name="fieldPresents[<?php echo $fa["name"]; ?>]" 
    value="<?php echo $fa["name"]; ?>">
    Voici mon code avec le Foreach :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if (isset($_POST['fieldPresents']) && !empty($_POST['fieldPresents'])) 
    	{
    		$presents = $_POST['fieldPresents'];
    			foreach ($presents as $val)
     
                    $saveit = mysql_query("INSERT into TABLE (event, present1, present2, present3, present4, present5, present6) values ('".$_POST["fieldEvent"]."', '$val', '$val', '$val', '$val', '$val', '$val')") or die(mysql_error());
     
    } ?>
    Et voilà, comme ceci, ça fonctionne... à moitié...

    Si par exemple je coche les présents : Jean, Paul et Jacques, je vais me retrouver avec trois nouvelles insertions, le prénom Jean d'inscrit dans toutes les cases present1 | present2 | pres... | present6 de la première insertion, Paul inscrit partout dans la seconde insertion et Jaques partout dans la troisième.

    Hors dans ce scénario, ce que je souhaiterais, c'est qu'il n'y est qu'une insertion avec :
    Jean dans la case present1
    Paul dans present2
    Jaques dans present3
    et present4, present5 et present6 vide.

    Voilà, si quelqu'un à une idée SVP

    PS : En relisant mon post, je comprends qu'en faisant comme ça je me retrouve avec une valeur dans toutes les case "present2, mais je ne comprend toujours pas pourquoi plusieurs insertions.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 144
    Points : 161
    Points
    161
    Par défaut
    Déjà, ta condition sur $_POST['fieldPresents'] est redondante, tester !empty suffit.

    Ensuite, ton code n'est pas sécurisé face aux injections SQL. Je te laisse chercher la doc de mysql_real_escape_string, ou des requêtes préparées des bibliothèques mysqli ou PDO.

    Pour ton problème maintenant, dans le name de tes checkbox tu n'as pas besoin du [<?php echo $fa["name"]; ?>], mets simplement [] tout court. Ensuite, tu récupèreras ta liste de présents dans $presents, avec le premier dans $presents[0], le second dans $presents[1], etc. Tu n'as donc qu'à placer le bon au bon endroit dans la table.

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Bonjour asdf007,

    Merci pour ton aide

    Cette page d'admin est dans un dossier protégé par "htaccess" et il n'y à que mois ou mon frère qu'il l'utilise, est-ce tout de même nécessaire de protéger le code des injections SQL ?

    Alors, j'ai modifié le code en essayant de suivre tes conseils,
    Les checkbox sont maintenant comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <input type="checkbox" 
    name="fieldPresents[]" 
    value="<?php echo $fa["name"]; ?>">
    Et la requête SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if (!empty($_POST['fieldPresents'])) 
    	{
    	$presents[0] = $_POST['fieldPresents'];
    	$presents[1] = $_POST['fieldPresents'];
    	$presents[2] = $_POST['fieldPresents'];
    	$presents[3] = $_POST['fieldPresents'];
    	$presents[4] = $_POST['fieldPresents'];
    	$presents[5] = $_POST['fieldPresents'];
     
    $saveit = mysql_query("INSERT into TABLE 
    (event, present1, present2, present3, present4, present5, present6) 
    values 
    ('".$_POST["fieldEvent"]."', '$presents[0]', '$presents[1]', '$presents[2]', '$presents[3]', '$presents[4]', '$presents[5]')") or die(mysql_error());
    Dans cette configuration, je me retrouve bien avec une seule insertion de créé, mais à la place d'avoir les noms des présents, je me retrouve avec "Array" d'écrit partout.
    S'il faut remettre le "foreach" quelque part, je ne vois pas où

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 144
    Points : 161
    Points
    161
    Par défaut
    Citation Envoyé par Gogad Voir le message
    Bonjour asdf007,

    Merci pour ton aide

    Cette page d'admin est dans un dossier protégé par "htaccess" et il n'y à que mois ou mon frère qu'il l'utilise, est-ce tout de même nécessaire de protéger le code des injections SQL ?
    Dans ce cas non, évidemment. Même si ça ne fait jamais de mal.

    Alors, j'ai modifié le code en essayant de suivre tes conseils,
    Les checkbox sont maintenant comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <input type="checkbox" 
    name="fieldPresents[]" 
    value="<?php echo $fa["name"]; ?>">
    Et la requête SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if (!empty($_POST['fieldPresents'])) 
    	{
    	$presents[0] = $_POST['fieldPresents'];
    	$presents[1] = $_POST['fieldPresents'];
    	$presents[2] = $_POST['fieldPresents'];
    	$presents[3] = $_POST['fieldPresents'];
    	$presents[4] = $_POST['fieldPresents'];
    	$presents[5] = $_POST['fieldPresents'];
     
    $saveit = mysql_query("INSERT into TABLE 
    (event, present1, present2, present3, present4, present5, present6) 
    values 
    ('".$_POST["fieldEvent"]."', '$presents[0]', '$presents[1]', '$presents[2]', '$presents[3]', '$presents[4]', '$presents[5]')") or die(mysql_error());
    Dans cette configuration, je me retrouve bien avec une seule insertion de créé, mais à la place d'avoir les noms des présents, je me retrouve avec "Array" d'écrit partout.
    S'il faut remettre le "foreach" quelque part, je ne vois pas où
    Si tu mets la même valeur dans chaque case de $presents, je vois pas comment tu peux t'attendre à quelque chose de fonctionnel ! $_POST['fieldPresents'] est lui même un tableau, tu n'as qu'à faire $presents = $_POST['fieldPresents']. Utilise var_dump($variable) quand tu veux savoir ce qu'elle contient (ce qui serait mieux que de faire les choses un peu au hasard comme ça semble être le cas...)

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Merci asdf007,

    Le var_dump($variable) (que je ne connaissais pas) m'aura permis de comprendre ce qui se passe pendant la requête.
    J'ai donc pu finaliser le code

    Il fallait mettre tout simplement :
    $presents = $_POST['fieldPresents']

    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ('".$_POST["fieldEvent"]."', '$presents[0]', '$presents[1]', '$presents[2]', '$presents[3]', '$presents[4]', '$presents[5]')") or die(mysql_error());
    Merci beaucoup

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/03/2009, 13h56
  2. [MySQL] Insérer des données dans une table, mais ce n'est pas une table USER
    Par amerex dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 16/08/2008, 00h01
  3. Access: Insérer des données dans une table acces
    Par Malika_AL dans le forum VBA Access
    Réponses: 6
    Dernier message: 27/01/2008, 22h41
  4. [MySQL] Ajouter des données dans une table avec la cmd update
    Par pierrot10 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 25/09/2007, 19h54
  5. [SQL] Insérer des données dans une table
    Par wonga dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 01/08/2007, 12h00

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