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 :

Insertion des valeurs des cases à cocher dans une base de données


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 55
    Points : 40
    Points
    40
    Par défaut Insertion des valeurs des cases à cocher dans une base de données
    Salut la communauté,
    J'ai réalisé un formulaire d'inscription avec 4 cases à cocher. J'arrive à récuperer les champs saisis ainsi que les valeurs des cases à cocher.
    Mon problème se situe au niveau de l'insertion des valeurs des checkbox. Ca marche dans certains cas. Je m'explique. Si je coche 1 ou 2 ou 3 ou 4 cases et que dans ma requete je n'indique que le nombre de colonnes correspondant au nombre de cases cochées ca marche dans le cas contraire rien ne se passe.
    Voici le code. Plus haut j'ai déjà bien sur récuperer les autres champs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $tabformation = (isset($_POST['cformation']))?$_POST['cformation']:null;
     
    $requete=" insert into participants (nom,prenom,sexe,email,tel,id_profession,f1,f2,f3,f4)";
    $requete.="values('$nom','$prenom','$sexe','$email','$tel','$id_profession','$tabformation[0]','$tabformation[1]','$tabformation[2]','$tabformation[3]')";
    $execution=mysql_query($requete);
    Si j'ecris comme ca marche à condition que je coche les 4 cases. Si c'est moins la requete ne s'execute pas.Et c'est normale.Comme je ne sais pas a priori combien de cases seront cochées je suis obligé de fixer les 4 colonnes concernant ces champs.
    Existe-il des instructions mysql qui permettent d'ignorer certaines colonnes s''il n'y a pas de valeurs d'insertions ou des fonction php qui pourraient m'aider à resoudre mon probleme?
    Merci davance

  2. #2
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Points : 470
    Points
    470
    Par défaut
    Salut,

    Change la ligne de requete par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $execution=mysql_query($requete) or die(mysql_error());
    Normalement, ça devrait te permettre de voir ce qui cloche. Et si je ne m'abuse, ton problème doit venir du fait que tu ne récupère rien quand la case n'est pas coché (champ vide ou NULL et non 0) et que ta table doit contenir des NOT NULL... Et de plus $tabformation n'a pas l'air d'être un tableau !?

    De plus, je serait tenté de penser que t'as des failles de sécurité par injection de SQL là...

  3. #3
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 55
    Points : 40
    Points
    40
    Par défaut
    Merci, Je n'ai pas du tout avancé. Mais j'ai essayé de contourner le problème en attendant. Je crée 4 variable que j'initialise et lorsque je recupere le tableau, je l'utilise pour remplir ces variables. Ce qui fait que même si le nombre d'éléments dans le tableau est inférieur à 4, je peux toujours faire une insertion. Merci

  4. #4
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Points : 442
    Points
    442
    Par défaut
    Si les champs f1,f2,f3,f4 de la table sont déclarés notnull c'est normal que la requete ne marche pas si tu les valeurs sont nulles

  5. #5
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 55
    Points : 40
    Points
    40
    Par défaut
    J'ai mis les champs à null mais j'obtiens toujours à la meme erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Notice: Undefined index: 2 in e:\program files\easyphp1-8\www\rtn\ajout_participant.php on line 36
     
    Notice: Undefined index: 3 in e:\program files\easyphp1-8\www\rtn\ajout_participant.php on line 36
     
    Warning: Cannot modify header information - headers already sent by (output started at e:\program files\easyphp1-8\www\rtn\ajout_participant.php:36) in e:\program files\easyphp1-8\www\rtn\ajout_participant.php on line 42
    ajout_participant.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
    24
    25
    26
    27
    28
    29
     
    <?
     
      $server="127.0.0.1"; //adresse du serveur:
      $user="root"; //nom de l'utilisateur ayant droit
      $pwd=""; //mot de passe de cet utilisateur
    // connexion au serveur MYSQL 
      $conn=mysql_connect ($server, $user, $pwd);
    //connexion à la base de données.
      $bdd = "formation"; 
      mysql_select_db ($bdd);
     
    $prenom=$_POST['prenom'];
    $nom=$_POST['nom'];
    $sexe=$_POST['sexe'];
    $email=$_POST['email'];
    $tel=$_POST['tel'];
    $id_profession=$_POST['id_profession'];
    $tabformation = (isset($_POST['cformation']))?$_POST['cformation']:null;
     
    $requete=" insert into participants (nom,prenom,sexe,email,tel,id_profession,f1,f2,f3,f4)";
    $requete.="values('$nom','$prenom','$sexe','$email','$tel','$id_profession','$tabformation[0]','$tabformation[1]','$tabformation[2]','$tabformation[3]')";
    $execution=mysql_query($requete)or die(mysql_error());
     
    if($execution==false)
    	{ die(mysql_error()); }
    else 
      header('Location: accueil.php');
    ?>

  6. #6
    Membre habitué Avatar de islyoung2
    Homme Profil pro
    Inscrit en
    Juin 2008
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41

    Informations forums :
    Inscription : Juin 2008
    Messages : 236
    Points : 177
    Points
    177
    Par défaut
    Salut essaye cette solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $tabformation = (isset($_POST['cformation']))?$_POST['cformation']:'';
    peut être sa marchera.

  7. #7
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 55
    Points : 40
    Points
    40
    Par défaut
    J'ai essayé mais ca ne marche pas.
    Avec la solution temporaire que j'ai trouvé, j'arrivais à inserer les valeurs des champs cochés. J'envoyais les valeurs dans un autre fichier pour verification et enrégistrement. Mais depuis que je fais la verication dans le meme fichier que celui du formulaire je n'arrive plus à les recuperer; pourtant il n'y a pas de problèmes avec les autres (nom,prenom,sexe...)
    Au fait il insert le caractere "A" dans la première colonne quelque soit le nombre de cases cochées.

    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
     
    <tr>
              <th scope="row"><label>
                <input type="checkbox" name="cformation[]" value="toip">
                Téléphonie sur IP</label></th>
              <td><label>
                <input type="checkbox" name="cformation[]" value="lpi101">
                <strong>LPI 101: Administration Syst&egrave;me</strong></label> <?php if(isset($_POST["inscrire"])) {echo $cformation;}?></td>
            </tr>
            <tr>
              <th scope="row"><label>
                <input type="checkbox" name="cformation[]" value="asterisk">
    Asterisk</label></th>
              <td><span class="Style1">
                <label>
                <input type="checkbox" name="cformation[]" value="lpi102">
                LPI 102: Administration Réseaux Junior</label>
              </span></td>
            </tr>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if(!isset($_POST["cformation"]) || $_POST["cformation"]=="") {
    		$cformation = "Séléction au moins une formation.";
    	} else {
    		$cformation = "";
    	}

  8. #8
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 55
    Points : 40
    Points
    40
    Par défaut
    Personne n'a une idée?Je suis vraiment coincé. J'ai parcouru le forum sans trouver de solution.J'envoie les données par post
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (($nom == "") && ($prenom == "")&&($sexe == "") &&($cformation == "")) {
    header('location:ajout_participant.php?nom='.$_POST["nom"].'&prenom='.$_POST["prenom"].'&sexe='.$_POST["sexe"].'&cformation='.$_POST["cformation"]); 
    }
    je recupere dans un autre fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $prenom=$_GET['prenom'];
    $nom=$_GET['nom'];
    $sexe=$_GET['sexe'];
    $tabformation = (isset($_GET['cformation']))?$_GET['cformation']:null;
    Pour les autres champs il n'y a pas de problème. Les champs formations sont vides à l'exception du premier dans lequel le caractere A est inscrit. Je ne sais d'ou il vient.

  9. #9
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Points : 470
    Points
    470
    Par défaut
    bhé en tout cas :
    Notice: Undefined index: 2 in e:\program files\easyphp1-8\www\rtn\ajout_participant.php on line 36
    Notice: Undefined index: 3 in e:\program files\easyphp1-8\www\rtn\ajout_participant.php on line 36
    on a pas la ligne 36, mais c'est pas une erreur ça, c'est un notice, qui doit être désactivé en prod dans le fichier php.ini (ERREOR_REPORTING : E_ALL & ~E_NOTICE)

    Warning: Cannot modify header information - headers already sent by (output started at e:\program files\easyphp1-8\www\rtn\ajout_participant.php:36) in e:\program files\easyphp1-8\www\rtn\ajout_participant.php on line 42
    Ca, c'est parce que tu a laissé un espace entre le début du fichier et le <?php

    Vire cet espace et on erreur disparaitra...

  10. #10
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 55
    Points : 40
    Points
    40
    Par défaut
    J'ai resolu ce problème. Le problème actuel est celui de l'insertion des checkbox dans une table que j'ai posé plus haut

  11. #11
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Points : 470
    Points
    470
    Par défaut
    Mes depuis que je fais la verication dans le meme fichier que celui du formulaire je n'arrive plus à les recuperer
    comment ça ?

  12. #12
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 55
    Points : 40
    Points
    40
    Par défaut
    Au fait lorsque je remplis le formulaire normalement sans faire de controle dans le meme fichier et que j'envoie, je recuperais les données par POST et les enregistrais sans problème( mes les cases à cocher qui posent problème) .

    Maintenant j'effectue les controles dans le meme fichier que le formulaire puis les envoie avec header comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    if (($nom == "") && ($prenom == "")&&($sexe == "") &&($cformation == "")) {
    header('location:ajout_participant.php?nom='.$_POST["nom"].'&prenom='.$_POST["prenom"].'&sexe='.$_POST["sexe"].'&cformation='.$_POST["cformation"]); 
    }
    puis les recupere
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    $prenom=$_GET['prenom'];
    $nom=$_GET['nom'];
    $sexe=$_GET['sexe'];
    $tabformation = (isset($_GET['cformation']))?$_GET['cformation']:null;
    J'arrive à inserer tous les autres champs dans la table sauf les valeurs de cases que je recupere dans un tableau "tabformation"
    J'utilise pourtant le même code que precedemment.
    Et si je mes POST ca ne marche plus.
    Comme je l'ai dis dans mes precedents messages, à la place des valeurs j'ai juste le caractere A et seulement dans la premier colonne concerant les formations.
    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
     
     
    $var=sizeof($tabformation);
    $f1=" ";$f2=" ";$f3=" ";$f4=" ";
    for ($i=0;$i<=$var-1;$i++)
     {
       if($i==0) $f1=$tabformation[0];
       if($i==1) $f2=$tabformation[1];
       if($i==2) $f3=$tabformation[2];
       if($i==3) $f4=$tabformation[3];
     }
     
    $requete=" insert into participants (nom,prenom,sexe,email,tel,id_profession,formation1,formation2,formation3,formation4)";
    $requete.="values('$nom','$prenom','$sexe','$email','$tel','$id_profession','$f1','$f2','$f3','$f4')";
    $execution=mysql_query($requete)or die(mysql_error());
    Donc tous les autres champs sont remplis et dans formation1 j'ai A et les autres sont vides

    Il faut ajouter que avant je fesais "action="ajout_participant1.php"
    Maintenant dans action j'appel le formulaire lui meme.

  13. #13
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2008
    Messages : 106
    Points : 152
    Points
    152
    Par défaut
    Toi, t'as pas peur des injections SQL, documentes toi sur ce que c'est, quel risque çà représente et la fonction :
    mysql_real_escape_string(string $str)

  14. #14
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 55
    Points : 40
    Points
    40
    Par défaut
    Je n'etais pas au courant de cà. Mais je ne crois pas que ce soit ca le problème. Mais je vais y penser lorsque tout sera bon.
    J'ai essayé de faire un test avec in_array
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if (is_array($cformation))
       {
        foreach($cformation as $key=>$val) {
        echo $key.'=>'.$val.'<p>'; 
         }
      } else echo "ce n'est pas un tableau";
      }
    Et j'ai le message 'ce n'est pas un tableau', ce qui me parait bizarre car lorsque je suis dans le fichier contenant le code du formulaire,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <?php if(isset($_POST["inscrire"])) {echo $cformation[0];echo $cformation[1];}?>
    affiche les valeurs des 2 cases cochées. Pareil pour 3 ou 4.
    Donc je comprend pas pourquoi ca ne peut pas être un tableau

  15. #15
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Tu dois en fait créer la requete d'insertion de manière dynamique c'est à dire choisir les colonnes en fonction des valeurs envoyées.

    exemple
    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
    24
    25
     
    //initialisation variables
    $requete="insert into participants (nom,prenom,sexe,email,tel,id_profession";
    $valeur=" values('$nom','$prenom','$sexe','$email','$tel','$id_profession'";
     
    if (isset($tabformation[0]))
    {
    $requete.=",f1";
    $valeur.=",'$tabformation[0]'";
    }
     
    if (isset($tabformation[1]))
    {
    $requete.=",f2";
    $valeur.=",'$tabformation[1]'";
    }
    //tu complètes les autres
    ...
     
    //tu ferme les parenthèses
    $requete.=")";
    $valeur.=")";
     
    $msql=$requete."".$valeur;
    $execution=mysql_query($msql)or die(mysql_error());
    voila.

  16. #16
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 55
    Points : 40
    Points
    40
    Par défaut
    Merci, pour ton aide ca ameliore un peu mon code. Mais mon problème reste entier. Je n'ai toujours pas trouver une solution , j'y travail. Si vous avez des propositions, elles seront les bienvenues

Discussions similaires

  1. Problème lors de l'insertion des valeurs d'un formulaire dans une base
    Par nour93 dans le forum Développement Web en Java
    Réponses: 2
    Dernier message: 05/03/2015, 02h29
  2. Réponses: 19
    Dernier message: 27/10/2011, 14h01
  3. Insertion des valeurs des cases à cocher dans la base de données
    Par ottoayoub dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 10/05/2009, 00h45
  4. [MySQL] Retour valeur case à cocher depuis une base de données
    Par asvin dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 23/10/2008, 19h25
  5. Réponses: 3
    Dernier message: 20/09/2006, 16h07

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