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 :

Insérer checkbox dans une BDD avec choix multiple


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Femme Profil pro
    Webdesigner
    Inscrit en
    Janvier 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : Maroc

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2010
    Messages : 23
    Points : 12
    Points
    12
    Par défaut Insérer checkbox dans une BDD avec choix multiple
    bonjour,

    je suis entrain de créer un formulaire de contact, ou il ya un bouton checkbox avec trois choix, sachant qu'on peut cocher tous les trois, mais je n'ai qu'une seule valeur qui s’insère dans la base de donnée (la dernière)..
    est ce qu'il ya une possibilité de les afficher tous ??

    code html:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <font class="textes" > Souhaitez-vous être rappelé :</font></div>
    <input name="appel" type="checkbox" value="matin">Le matin <input name="appel" type="checkbox" value="apres_midi">Après midi <input name="appel" type="checkbox" value="soiree">Soirée (17h à 19h)</div>

    code d'insertion 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
     
    <?php
    $base="academia";
    $conn=mysql_connect("localhost", "root", "");
    mysql_select_db($base);
     
    $appel=$_POST['appel'];
     
     
    $sql='insert into inscription VALUES("", "'.mysql_escape_string($appel).'")';
     
    $req=mysql_query($sql) or die ('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    header("location:conf_contact.php");
     
    ?>

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 199
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 199
    Points : 8 424
    Points
    8 424
    Billets dans le blog
    17
    Par défaut
    Salut !!

    Pour le moment c'est normal car tes checkbox ont toutes le même nom, c'est-à-dire appel.
    Pour que appel puisse contenir plusieurs valeurs il faut le "transformer" en tableau en rajoutant des [] à chaque name.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <input type="checkbox" name="appel[]" value="matin">
    ...
    Les valeurs cochées seront dans le *tableau* $_POST['appel'].

  3. #3
    Membre à l'essai
    Femme Profil pro
    Webdesigner
    Inscrit en
    Janvier 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : Maroc

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2010
    Messages : 23
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Salut !!

    Pour le moment c'est normal car tes checkbox ont toutes le même nom, c'est-à-dire appel.
    Pour que appel puisse contenir plusieurs valeurs il faut le "transformer" en tableau en rajoutant des [] à chaque name.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <input type="checkbox" name="appel[]" value="matin">
    ...
    Les valeurs cochées seront dans le *tableau* $_POST['appel'].

    j'ai fais comme ceci , mais rien n'apparait dans la base de données, même si j'ai coché tous les choix

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input name="appel[]" type="checkbox" value="matin">Le matin <input name="appel[]" type="checkbox" value="apres_midi">Après midi <input name="appel[]" type="checkbox" value="soiree">Soirée (17h à 19h)

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 199
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 199
    Points : 8 424
    Points
    8 424
    Billets dans le blog
    17
    Par défaut
    Montre le traitement du *tableau* $_POST['appel'].

  5. #5
    Membre à l'essai
    Femme Profil pro
    Webdesigner
    Inscrit en
    Janvier 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : Maroc

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2010
    Messages : 23
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Montre le traitement du *tableau* $_POST['appel'].


    je suis encore débutante , c pour cela je sais pas ou mettre ça (*tableau* $_POST['appel'])

    ca sera très généreux de ta part si tu me montre ou le mettre exactement dans ma page d'insertion , voilà le code complet de la page :

    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
    30
    <?php
    $base="academia";
    $conn=mysql_connect("localhost", "root", "");
    mysql_select_db($base);
     
    $civilite=$_POST['civilite'];
    $nom=$_POST['nom'];
    $prenom=$_POST['prenom'];
    $email=$_POST['email'];
    $tel=$_POST['tel'];
    $formation=$_POST['formation'];
    $question=$_POST['question'];
    $appel=$_POST['appel'];
    $naissance=$_POST['naissance'];
    $lieu=$_POST['lieu'];
    $adresse=$_POST['adresse'];
    $situation =$_POST['situation'];
    $reference=$_POST['reference'];
    $autre_ref=$_POST['autre_ref'];
    $date = date("d/m/Y - H:i:s");
     
     
     
     
    $sql='insert into inscription VALUES("", "'.mysql_escape_string($civilite).'","'.mysql_escape_string($nom).'","'.mysql_escape_string($prenom).'","'.mysql_escape_string($email).'","'.mysql_escape_string($tel).'","'.mysql_escape_string($formation).'","'.mysql_escape_string($question).'","'.mysql_escape_string($appel).'","'.mysql_escape_string($naissance).'","'.mysql_escape_string($lieu).'","'.mysql_escape_string($adresse).'","'.mysql_escape_string($situation).'","'.mysql_escape_string($reference).'","'.mysql_escape_string($autre_ref).'","'.mysql_escape_string($date).'")';
     
    $req=mysql_query($sql) or die ('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    header("location:conf_contact.php");
     
    ?>

  6. #6
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 199
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 199
    Points : 8 424
    Points
    8 424
    Billets dans le blog
    17
    Par défaut
    $_POST['appel'] est un tableau.

    Càd que si tu fais :

    echo $_POST['appel'][0] tu afficheras la valeur de la 1re case cochée.
    Si tu fais $_POST['appel'][$i] tu afficheras la valeur de la $i-ème case cochée.
    Si aucune case n'est cosée alors $_POST['appel'] n'existera pas. Tu peux vérifier cela avec la fonction PHP isset( ).

    Si tu veux stocker dans ta BdD les valeurs cochées séparées par des virgules tu peux faire à la place de $appel=$_POST['appel']; ce qui suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if ( isset($_POST['appel']) && is_array($_POST['appel']) ) {
        // Arrivé ici $_POST['appel'] existe et est bien un tableau
        $appel = implode(', ', $_POST['appel']) ;
    } else {
        $appel = '' ;
    }
    Doc sur implode( ) : http://fr.php.net/implode

  7. #7
    Membre à l'essai
    Femme Profil pro
    Webdesigner
    Inscrit en
    Janvier 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : Maroc

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2010
    Messages : 23
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Séb. Voir le message
    $_POST['appel'] est un tableau.

    Càd que si tu fais :

    echo $_POST['appel'][0] tu afficheras la valeur de la 1re case cochée.
    Si tu fais $_POST['appel'][$i] tu afficheras la valeur de la $i-ème case cochée.
    Si aucune case n'est cosée alors $_POST['appel'] n'existera pas. Tu peux vérifier cela avec la fonction PHP isset( ).

    Si tu veux stocker dans ta BdD les valeurs cochées séparées par des virgules tu peux faire à la place de $appel=$_POST['appel']; ce qui suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if ( isset($_POST['appel']) && is_array($_POST['appel']) ) {
        // Arrivé ici $_POST['appel'] existe et est bien un tableau
        $appel = implode(', ', $_POST['appel']) ;
    } else {
        $appel = '' ;
    }
    Doc sur implode( ) : http://fr.php.net/implode


    j'ai fais ça : (en local ca marché très bien mais quand je l'ai mis en ligne j'ai des messages d'erreure qui s'affiche )


    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    <?php
    if(isset($_POST) && !empty($_POST)){
    $base='academia';
    $conn=mysql_connect("localhost", "root", "") or die ('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    $db=mysql_select_db($base) or die ('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
     
    $appels='';
     
    if(isset($_POST['appel']) && !empty($_POST['appel'])){
    $tableau=array('matin','apres_midi','soiree');
     
      foreach($_POST['appel'] as $k => $appel){
        if (in_array($appel, $tableau, true)) {
        echo $appels.=$appel.' ';
        }else{
        }
      }  
     
    }else{
    //rien 
    }
     
    unset($_POST['appel']);
     
    /*securition du postage*/
    foreach($_POST as $k => $v){
    $v=mysql_real_escape_string(strip_tags($v));
    $_POST[$k]=$v;
    }
     
        extract($_POST);
        echo $sql="
    
        insert into inscription VALUES (
        NULL,
        '".$civilite."',
        '".$nom."',
        '".$prenom."',
        '".$email."',
        '".$tel."',
        '".$formation."',
        '".$question."',
        '".$appels."',
        '".$naissance."',
        '".$lieu."',
        '".$adresse."',
        '".$situation."',
        '".$reference."',
        '".$autre_ref."',
        NOW()
        )
        ";
     
     
      if($req=mysql_query($sql)){
      /*ca marche redirection*/
      echo '<script>alert(\'insertion reussie\');</script>';
      //header('Location: conf_contact.php');exit;
      }else{ 
      die('Erreur SQL !'); /*pas afficher l'erreur sql mysql_error() utilisable par un attaquant*/
      }
     
     
     
     
    }else{
    //rien de poster
    }
    ?>

  8. #8
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 199
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 199
    Points : 8 424
    Points
    8 424
    Billets dans le blog
    17
    Par défaut
    Quelles erreurs ?

Discussions similaires

  1. Insérer image dans une bdd
    Par Blagueur dans le forum Débuter
    Réponses: 10
    Dernier message: 24/10/2008, 13h05
  2. [AJAX] Vérifier des données dans une BDD avec AJAX
    Par mwech dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 22/10/2008, 15h13
  3. Réponses: 3
    Dernier message: 14/05/2008, 11h58
  4. Réponses: 4
    Dernier message: 23/07/2006, 20h42
  5. Calculs dans une requete avec conditions multiples
    Par Sha1966 dans le forum Access
    Réponses: 3
    Dernier message: 13/01/2006, 15h18

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