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 :

valeur d'une case à cocher


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 122
    Par défaut valeur d'une case à cocher
    Bonjour

    Je souhaite que si ma chekbox est cochée, enregistrer des informations (ici le mot 'oui') dans ma table (test) de BDD. Le traitement est éfféctué dans la même page php qui est essai.php.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <br />
        <form action="essai.php" method="post">
        <p><input type="checkbox" name="b1" /> <label for="oui">Oui</label>
        <input type="submit" value="OK"/>
    </p>
        </form>    
    <?php
        if(!empty($_POST['b1']))
                   {
        $bdd->exec('INSERT INTO test(contenu) VALUES(\'oui\')');
                   }
    ?>

    Le problème c'est qu'à chaque fois que j'exécute ma page sans même que la checkbox soit cochée l'information 'oui' est enregistrée dans ma BDD !!

    Merci d'avance pour votre aide

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonsoir,

    Ton checkbox n'a pas d'attribut value.

    A+.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 122
    Par défaut
    rebonsoir

    bizzard bizzard ça a marché une fois!!!!!!! sinon le problème persiste encore voila mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <br />
        <form action="essai.php" method="post">
        <p><input type="checkbox" name="b1" value "unchecked" /> <label for="oui">Oui</label>
        <input type="submit" value="OK"/>
    </p>
        </form>    
    <?php
        if(!empty($_POST['b1']))
                   {
        $bdd->exec('INSERT INTO test(contenu) VALUES(\'oui\')');
                   }
    ?>

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 122
    Par défaut
    bon j'ai pigé en fait quand je réactualise ma page même si la checkbox n'est pas coché ça enregistre dans ma BDD donc à la fin de mon traitement je vide ma variable. Je pense que je m'y prend mal et j'avoue fatigué se soir pour chercher
    je met $_POST['b1'] = "NULL"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <br />
        <form action="essai.php" method="post">
        <p><input type="checkbox" name="b1" value "unchecked" /> <label for="oui">Oui</label>
        <input type="submit" value="OK"/>
    </p>
        </form>    
    <?php
        if(!empty($_POST['b1']))
                   {
        $bdd->exec('INSERT INTO test(contenu) VALUES(\'oui\')');$_POST['b1']="NULL";
                   }
    ?>
     
    Merci beaucoup et bonne nuit:mrgreen:

  5. #5
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Le phénomène que tu remarque qui au final est très embêtant est assez connu, mais il est logique et il s'explique très simplement.

    Lorsqu'on arrive sur le formulaire, ensuite qu'on le valide, ça va recharger la même page mais cette fois on va obtenir la donnée "b1" en POST, ce qui aura pour effet d'enregistrer une donnée dans la Bdd.

    Le fait de réactualiser la page, c'est de demander au navigateur de refaire la même opération que précédemment.
    Et bien on va à nouveau obtenir "b1" en POST, et rebelote ... Rien de plus normal.

    Pour palier à ce phénomène, le truc très courant c'est d'effectuer une redirection avec un header(), ceci aura pour effet de purger en quelque sorte les données comme celles en POST.
    Ca revient un peu comme si on arrivait la 1ère fois sur cette page, l'actualiser n'aura plus aucun effet.
    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
    if (!empty($_POST['b1'])) {
        $bdd->exec('INSERT INTO test(contenu) VALUES(\'oui\')');
     
        header('Location : essai.php');
    }
    ?>
     
    <!DOCTYPE ... etc ...>
    <html>
    <head>
        <title>ESSAI</title>
    <head>
     
    <body>
    <br />
        <form action="essai.php" method="post">
        <p><input type="checkbox" name="b1" value "unchecked" /> <label for="oui">Oui</label>
        <input type="submit" value="OK"/>
    </p>
        </form>    
     
     
    </body>
    </html>
    Tu remarqueras que le déroulement du code est effectué de manière inverse, soit faire en 1er l'insertion dans la Bdd si POST "b1" existe avant la 1ère balise HTML.
    Effectuer un header() réclame qu'aucun contenu soit envoyé avant (pas de echo, HTML, et même un espace, saut de ligne).

    Je te conseils d'ailleurs de procéder ainsi, soit en 1er faire les traitements (mise à jours Bdd, manipulation de fichier, récupération de données, etc ...) et en tout dernier générer le contenu, la page HTML.
    Bref, séparer les traitements et l'interface.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 122
    Par défaut
    ok merci quoi que si j'ai plusieurs action et plusieurs traitement c'est pas faisable !

    Sinon j'ai un autre problème
    J'ai une page page1.php avec entre autre une checkbox et le bouton ok qui va avec de sorte que quand je coche et je click ça me renvoie vers une autre page page2.php ou bien entendu contient le traitement de l'action. Cependant cette page page2.php contient également du textearea et le bouton ok qui va avec. quand je remplie ce texte et je click sur ok je doit afficher ce que j'ai écris sur la même page c'ad page2.php.

    Or c'est la ou est le problème quand je click sur ok ça n'affiche pas le contenu parce qu'il y a le traitement de l'action dans la page page1.php qui bloque

    page1.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <form action="page2.php" method="post">
                <p><input type="checkbox" name="name1" value="unchecked" /> <label for="oui">Oui</label>
                <input type="submit" name ="result" value="OK"/>
                </p>
                </form>
    page2.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
    30
    31
    32
        <?php
     
            if(!empty($_POST['name1'])
                {
                $reponse = $bdd->query('SELECT * FROM table WHERE titre =\'lieu\'') or die(print_r($bdd->errorInfo()));
                $donnees = $reponse->fetch();
     
     
                echo $donnees['adresse'];
            ?>     <br />
            <?php  echo $donnees['numéro'];  
            ?> 
            <?php echo $donnees['date'];  
            ?> 
     
     
                <form action="page2.php" method="post">
                   <textarea name="name2" cols=40 rows=5>ici</textarea>
                   <input type="Submit" value="OK">
                </form>
     
                <?php  if(isset($_POST['name2'])) 
                    {
                        echo $_POST['name2']; $ro = $_POST['name2'];
                        $bdd->exec("INSERT INTO test(contenu) VALUES('$ro')") or die(print_r($bdd->errorInfo()));
                        unset($_POST); 
                    }
     
     
                }
     
            ?>

    voila merci beaucoup pour votre aide

Discussions similaires

  1. Réponses: 1
    Dernier message: 31/03/2009, 11h15
  2. Récupérer la valeur d'une case à cocher
    Par emmy99 dans le forum Langage
    Réponses: 5
    Dernier message: 08/03/2008, 21h59
  3. Récupérer la valeur d'une case à cocher
    Par seb1395 dans le forum Langage
    Réponses: 4
    Dernier message: 05/01/2008, 02h18
  4. attribuer une valeur numérique à une case à cocher
    Par qtipse dans le forum VBA Access
    Réponses: 6
    Dernier message: 17/11/2007, 14h19
  5. Changer la valeur d'une case à cocher
    Par Naksh-i dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 27/10/2006, 13h57

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