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 :

envoi de checkbox dans formulaire php


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 8
    Points : 5
    Points
    5
    Par défaut envoi de checkbox dans formulaire php
    Bonjour,
    j'ai réussi à faire fonctionner une petite base de donnée en PHP qui se rempli au moyen d'un formulaire. Mon formulaire fonctionne parfaitement lorsque j'utilise des input de type "text", mais j'aurai besoin de mettre en plus, à présent, des input de type "checkbox" et c'est là que le problème se manifeste. Si je ne coche pas les cases alors rien ne s'ajoute dans ma base de donnée. Par contre si je coche toutes les cases alors ça fonctionne (et ça ajoute bien le mot "oui" comme je le souhaite dans ma base de donnée). Si quelqu'un pouvait me corriger mon script ce serait vraiment bien car je commence à désespérer, voici le code source de mes 2 pages :

    La première page intitulée "index" :
    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
     
    <html>
        <head>
            <title>Ma page</title>
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        </head>
        <style type="text/css">
        form
        {
            text-align:center;
        }
        </style>
        <body>
        <form action="formulaire-suite.php" method="post">
            <p>
            Nom Prénom : <input type="text" name="Nom" /><br />
            Cochez la ou les villes visitées :
            Paris :  <input type="checkbox" name="Paris" value="oui"><br />
            Lyon :  <input type="checkbox" name="Lyon" value="oui"><br />
            <input type="submit" value="Envoyer" />
    	</p>
        </form>
        </body>
    </html>
    La seconde page intitulée "formulaire-suite" :
    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
     
    <?php
    // Connexion à la base de données
    try
    {
    	$bdd = new PDO('mysql:host=localhost;dbname=voyage', 'root', '');
    }
    catch(Exception $e)
    {
            die('Erreur : '.$e->getMessage());
    }
     
    // Insertion du message à l'aide d'une requête préparée
    $req = $bdd->prepare('INSERT INTO fichier_clients (Nom, Paris, Lyon) VALUES(?, ?, ?)');
    $req->execute(array($_POST['Nom'], $_POST['Paris'], $_POST['Lyon']));
     
    // Redirection du visiteur vers la page d'accueil
    header('Location: index.php');
    ?>
    Merci par avance, cordialement, Franck

  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
    Avant de desesperer, il faut debuguer et pour debuguer il faut afficher les erreurs dans ton code.

    Il faut savoir qu'une checkbox non cochée ne transmet rien par POST
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $check_paris = isset($_POST['Paris']) ? $_POST['Paris'] : '';
    $check_lyon = isset($_POST['Lyon']) ? $_POST['Lyon'] : '';
    req = $bdd->prepare('INSERT INTO fichier_clients (Nom, Paris, Lyon) VALUES(?, ?, ?)');
    $req->execute(array($_POST['Nom'], $check_paris, $check_lyon));

  3. #3
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Bonjour,

    cela ne marche pas comme cela. Il faut par exemple que tu stockes tes checkbox dans un tableau est qui envoyé à ta page de traitement. Ensuite, tu regardes si la valeur (value) de tes checkbox se trouvent dans ton tableau. Si oui : la valeur est cochée ; si non : elle n'est pas cochée

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     <form action="formulaire-suite.php" method="post">
            <p>
            Nom Prénom : <input type="text" name="Nom" /><br />
            Cochez la ou les villes visitées :
            Paris :  <input type="checkbox" name="ville[]" value="Paris"><br />
            Lyon :  <input type="checkbox" name="ville[]" value="Lyon"><br />
            <input type="submit" value="Envoyer" />
    	</p>
    </form>

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if(isset($_POST['ville'])){
    	foreach($_POST['ville'] as $ville)
    		echo $ville . ' coché !';
    }else{
       echo 'Rien n\'est coché !';
    }

  4. #4
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Je n'arrive toujours pas à faire fonctionner le script, qu'est ce que je met dans chacune des pages "formulaire-suite" et "index". Je m'y perd un peu.

  5. #5
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    C'est simple : dans formulaire-suite tu mets tout ton php

    Montre nous tes 2 fichiers stp

  6. #6
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Madfrix Voir le message
    C'est simple : dans formulaire-suite tu mets tout ton php

    Montre nous tes 2 fichiers stp

    La première page intitulée "index.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
     
    <html>
        <head>
            <title>Ma page</title>
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        </head>
        <style type="text/css">
        form
        {
            text-align:center;
        }
        </style>
        <body>
    <form action="formulaire-suite.php" method="post">
            <p>
            Nom Prénom : <input type="text" name="Nom" /><br />
            Cochez la ou les villes visitées :
            Paris :  <input type="checkbox" name="ville[]" value="Paris"><br />
            Lyon :  <input type="checkbox" name="ville[]" value="Lyon"><br />
            <input type="submit" value="Envoyer" />
    	</p>
    </form>
        </body>
    </html>
    La seconde page intitulée "formulaire-suite.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
     
    <?php
    // Connexion à la base de données
    try
    {
    	$bdd = new PDO('mysql:host=localhost;dbname=voyage', 'root', '');
    }
    catch(Exception $e)
    {
            die('Erreur : '.$e->getMessage());
    }
     
    if(isset($_POST['ville'])){
    	foreach($_POST['ville'] as $ville)
    		echo $ville . ' coché !';
    }else{
       echo 'Rien n\'est coché !';
    }
     
    // Insertion du message à l'aide d'une requête préparée
    $req = $bdd->prepare('INSERT INTO fichier_clients (Nom, Paris, Lyon) VALUES(?, ?, ?)');
    $req->execute(array($_POST['Nom'], $_POST['Paris'], $_POST['Lyon']));
     
    // Redirection du visiteur vers la page d'accueil du fichier clients
    header('Location: index.php');
    ?>
    Et j'ai dans ma base de données intitulée "voyage", une table comprenant 3 champs que sont "Nom, Paris, Lyon", et je voudrais que lorsque les cases sont cochées ça inscrive le mot oui dans ma base de donné. Du genre, si je coche Paris alors dans ma bdd, on a le mot oui qui est ajouté par contre si on ne coche pas la case de Paris alors dans ma bdd on a le mot non si possible (ou rien du tout). Merci par avance.

  7. #7
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    tes champs Nom, Paris, Lyon sont de quel type en base ?

  8. #8
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Madfrix Voir le message
    tes champs Nom, Paris, Lyon sont de quel type en base ?
    Ils sont de type text (pas varchar...)

  9. #9
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Ca donne quoi si tu fais ca ?

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $Nom = 'nom';
    $Paris = 'non coché';
    $Lyon= 'non coché';
     
    if(isset($_POST['ville']))
    	foreach($_POST['ville'] as $ville)
    		${$ville} = 'coché';
     
     
    // Insertion du message à l'aide d'une requête préparée
    $req = $bdd->prepare('INSERT INTO fichier_clients (Nom, Paris, Lyon) VALUES(?, ?, ?)');
    $req->execute(array($Nom, $Paris, $Lyon));

  10. #10
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    J'ai suivi ton conseil, j'ai mis les champs "Paris" et "Lyon" en type "tinyint". A présent que faire pour que lorsque je coche la case paris et/ou lyon on voit le n°1, et que lorsque la ou les cases ne sont pas cochées alors on ait 0 dans ma base de donnée. Encore merci pour ton aide, c'est vraiment appréciable. Je bloque sur ce détail qui commence à me désespérer.

    La première page intitulée "index.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
     
    <html>
        <head>
            <title>Ma page</title>
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        </head>
        <style type="text/css">
        form
        {
            text-align:center;
        }
        </style>
        <body>
    <form action="formulaire-suite.php" method="post">
            <p>
            Nom Prénom : <input type="text" name="Nom" /><br />
            Cochez la ou les villes visitées :<br />
            Paris :  <input type="checkbox" name="ville[]" value="Paris"><br />
            Lyon :  <input type="checkbox" name="ville[]" value="Lyon"><br />
            <input type="submit" value="Envoyer" />
    	</p>
    </form>
        </body>
    </html>
    La seconde page intitulée "formulaire-suite.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
     
    <?php
    // Connexion à la base de données
    try
    {
    	$bdd = new PDO('mysql:host=localhost;dbname=voyage', 'root', '');
    }
    catch(Exception $e)
    {
            die('Erreur : '.$e->getMessage());
    }
     
    $Paris = 'non coché';
    $Lyon= 'non coché';
     
    if(isset($_POST['ville']))
    	foreach($_POST['ville'] as $ville)
    		${$ville} = 'coché';
     
     
    // Insertion du message à l'aide d'une requête préparée
    $req = $bdd->prepare('INSERT INTO fichier_clients (Nom, Paris, Lyon) VALUES(?, ?, ?)');
    $req->execute(array($Nom, $Paris, $Lyon));
     
    // Redirection du visiteur vers la page d'accueil du fichier clients
    header('Location: index.php');
    ?>
    (Rappel : Et j'ai dans ma base de données intitulée "voyage", une table comprenant 3 champs que sont "Nom, Paris, Lyon", et je voudrais que lorsque les cases sont cochées ça inscrive le n°1 dans ma base de donné. Du genre, si je coche Paris alors dans ma bdd, on a le n°1 qui est ajouté, par contre si on ne coche pas la case de Paris alors dans ma bdd on a le n° 0 si possible). Merci par avance.

  11. #11
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    créer un champs de type text pour stocker oui ou non est une aberration. Tu dois créer un champs de type tinyint et stocker 1 ou 0 plutôt.

    Ajoutes ceci avant l'insertion en base afin de contrôler les valeurs :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    echo "Nom = $Nom <br />";
    echo "Paris= $Paris<br />";
    echo "Lyon= $Lyon<br />";

    Les valeurs sont elles conformes à tes attentes ?

  12. #12
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Madfrix Voir le message
    créer un champs de type text pour stocker oui ou non est une aberration. Tu dois créer un champs de type tinyint et stocker 1 ou 0 plutôt.

    Ajoutes ceci avant l'insertion en base afin de contrôler les valeurs :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    echo "Nom = $Nom <br />";
    echo "Paris= $Paris<br />";
    echo "Lyon= $Lyon<br />";

    Les valeurs sont elles conformes à tes attentes ?
    J'ai suivi ton conseil, j'ai mis les champs "Paris" et "Lyon" en type "tinyint". A présent que faire pour que lorsque je coche la case paris et/ou lyon on voit le n°1, et que lorsque la ou les cases ne sont pas cochées alors on ait 0 dans ma base de donnée. Encore merci pour ton aide, c'est vraiment appréciable. Je bloque sur ce détail qui commence à me désespérer.

    La première page intitulée "index.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
     
    <html>
        <head>
            <title>Ma page</title>
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        </head>
        <style type="text/css">
        form
        {
            text-align:center;
        }
        </style>
        <body>
    <form action="formulaire-suite.php" method="post">
            <p>
            Nom Prénom : <input type="text" name="Nom" /><br />
            Cochez la ou les villes visitées :<br />
            Paris :  <input type="checkbox" name="ville[]" value="Paris"><br />
            Lyon :  <input type="checkbox" name="ville[]" value="Lyon"><br />
            <input type="submit" value="Envoyer" />
    	</p>
    </form>
        </body>
    </html>
    La seconde page intitulée "formulaire-suite.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
     
    <?php
    // Connexion à la base de données
    try
    {
    	$bdd = new PDO('mysql:host=localhost;dbname=voyage', 'root', '');
    }
    catch(Exception $e)
    {
            die('Erreur : '.$e->getMessage());
    }
     
    $Paris = 'non coché';
    $Lyon= 'non coché';
     
    if(isset($_POST['ville']))
    	foreach($_POST['ville'] as $ville)
    		${$ville} = 'coché';
     
     
    // Insertion du message à l'aide d'une requête préparée
    $req = $bdd->prepare('INSERT INTO fichier_clients (Nom, Paris, Lyon) VALUES(?, ?, ?)');
    $req->execute(array($Nom, $Paris, $Lyon));
     
    // Redirection du visiteur vers la page d'accueil du fichier clients
    header('Location: index.php');
    ?>
    (Rappel : Et j'ai dans ma base de données intitulée "voyage", une table comprenant 3 champs que sont "Nom, Paris, Lyon", et je voudrais que lorsque les cases sont cochées ça inscrive le n°1 dans ma base de donné. Du genre, si je coche Paris alors dans ma bdd, on a le n°1 qui est ajouté, par contre si on ne coche pas la case de Paris alors dans ma bdd on a le n° 0 si possible). Merci par avance.

  13. #13
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Que donne ceci en base ?

    Code php : 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
     
    <?php
    // Connexion à la base de données
    try
    {
    	$bdd = new PDO('mysql:host=localhost;dbname=voyage', 'root', '');
    }
    catch(Exception $e)
    {
            die('Erreur : '.$e->getMessage());
    }
     
    $Paris = 0;
    $Lyon= 0;
     
    if(isset($_POST['ville']))
    	foreach($_POST['ville'] as $ville)
    		${$ville} = 1;
     
    $Nom = $_POST['nom']; 
     
    // Insertion du message à l'aide d'une requête préparée
    $req = $bdd->prepare('INSERT INTO fichier_clients (Nom, Paris, Lyon) VALUES(:nom, :paris, :lyon)');
    $req->bindParam(':nom', $Nom);
    $req->bindParam(':paris', $Paris, PDO::PARAM_INT);
    $req->bindParam(':lyon', $Lyon, PDO::PARAM_INT);
    $req->execute();
     
    // Redirection du visiteur vers la page d'accueil du fichier clients
    header('Location: index.php');
    ?>

    EDIT: le champs nom se récupérère via $_POST['nom'];

  14. #14
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    C'est tout bon j'ai fini par trouver la réponse, je remercies les membres de ce forum qui m'ont apportés des idées. Voici la solution du problème pour les prochain qui comme moi seront confrontés à ce genre de problème.

    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
     
    <?php
    // Connexion à la base de données
    try
    {
    	$bdd = new PDO('mysql:host=localhost;dbname=voyage', 'root', '');
    }
    catch(Exception $e)
    {
            die('Erreur : '.$e->getMessage());
    }
     
     
    $Paris=isset($_POST['Paris'])?$_POST['Paris']:' ';
    $Lyon=isset($_POST['Lyon'])?$_POST['Lyon']:' ';
     
     
    // Insertion du message à l'aide d'une requête préparée
    $req = $bdd->prepare('INSERT INTO fichier_clients (Nom, Paris, Lyon) VALUES(?, ?, ?)');
    $req->execute(array($_POST['Nom'], $Paris, $Lyon));
     
    // Redirection du visiteur vers la page d'accueil du fichier clients
    header('Location: index.php');
    ?>
    Amicalement

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

Discussions similaires

  1. décocher un checkbox dans formulaire php
    Par nal dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 16/05/2012, 06h29
  2. activer fonction quand checkbox est cochée dans formulaire php
    Par knebhi dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 06/10/2010, 11h26
  3. checkbox dans formulaire access
    Par vibalistic dans le forum VBA Access
    Réponses: 3
    Dernier message: 27/11/2007, 13h29
  4. Checkbox dans formulaire + script php
    Par Invité dans le forum Langage
    Réponses: 2
    Dernier message: 05/06/2007, 11h31
  5. scan champs dans formulaire php
    Par khaled_dev dans le forum Langage
    Réponses: 3
    Dernier message: 05/04/2007, 16h47

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