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

Bibliothèques et frameworks PHP Discussion :

[Smarty] Checkbox VS Aspirine (mal de tête) [Fait]


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut [Smarty] Checkbox VS Aspirine (mal de tête)
    Bonjour,

    Je viens de prendre de l'aspirine, mais rien n'y fait.

    J'utilise des checkbox et pour les alimenter dans mon html avec smarty, je fais comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    			{if $pub_doc.pub_sel_domicile=="1"}
    				<input type="checkbox" name="pub_sel_domicile" value="1" title="Cocher si vous voulez un choix sur le domicile du majeur" checked="checked">
    			{else}
    				<input type="checkbox" name="pub_sel_domicile" value="1" title="Cocher si vous voulez un choix sur le domicile du majeur">
    			{/if}
    Je trouve cela très moche mais je n'ai rien trouvé de mieux.

    Si je ne check rien et que je valide, j'ai une erreur dans mon php

    Notice: Undefined variable: pub_sel_domicile in
    Si je check tout va bien.

    Est-ce normal qu'une checkbow non checké renvoie la non existence du champ dans $_POST ?

    Merci d'avance
    Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.

  2. #2
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    Salut

    Plutôt bizarre comment tu organises ta condition notemment au niveau des accolades.
    Tu fermes à l'ouverture et tu les ouvres à la fermeture.
    Y a pas comme des inversions ?
    Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
    C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.

  3. #3
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    C'est normal, c'est smarty qui impose cette syntaxe.
    Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.

  4. #4
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    Bon, et bien je l'apprends. désolé !
    Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
    C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.

  5. #5
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    En dehors de l'aspect Smarty, saurais-tu pourquoi le champ "name" d'une checkbox non checké est considéré comme non existant ?
    Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.

  6. #6
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    Je me trompe peut-être encore une fois n'étant pas initié à smarty mais ce qui me choque , c'est ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    $pub_doc.pub_sel_domicile
     
    alors que name fait référence à 
     
    pub_sel_domicile
    Encore une particularité du moteur de template ?
    Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
    C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.

  7. #7
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Le problème c'est qu'en mettant l'html généré, cela n'a plus aucune signification, donc je mets le source tel qu'il est.

    Bon en fait, si j'atais en PHP, j'aurai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pub_doc["pub_sel_domicile"]
    à la place de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pub_doc.pub_sel_domicile
    En php cela donnerait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if ($pub_doc["pub_sel_domicile"]=="1")
    {
    echo '<input type="checkbox" name="pub_sel_domicile" value="1" title="Cocher si vous voulez un choix sur le domicile du majeur" checked="checked">':
    }
    else
    {
    echo '<input type="checkbox" name="pub_sel_domicile" value="1" title="Cocher si vous voulez un choix sur le domicile du majeur">';
    }
    Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.

  8. #8
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Ta checkbox est envoyée par formulaire, par conséquent elle se trouve dans $_POST, pas dans $pub_doc (qui est, je présume, le name de ton formulaire).

    Pour rappel, nous avons un super tuto qui couvre de nombreuses choses sur les formulaires : Les formulaires et PHP.

  9. #9
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    $pub_doc est le tableau issu de ma requête mysql sur ma table de la base de données.

    Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pub_doc["pub_sel_domicile"]
    est le champ contenant la valeur de la sélection.

    J'enregistre la sélection dans la base et je peux revenir dessus plus tard pour la modifier.

    J'ai 5 champs de sélection qui définissent par leur choix des traitements qui seront réalisés plus tard.

    Dans l'excellent tuto que j'avais lu, je n'ai rien trouvé sur l'initialisation des checkbox en fonction de la base de données et rien n'explique pourquoi si une checkbox dans mon cas n'est pas checker, le champ du formulaire ne se retrouve pas dans $_POST.

    Bon, je vais creuser, creuser, creuser, ....
    Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.

  10. #10
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Une checkbox n'est pas transmise si elle n'est pas cochée. C'est un comportement normal et logique.
    Du moins, si elle n'est pas cochée, elle n'est pas transmise avec sa valeur mais vide. Dans ton cas, cela revient au même à cause de ton test.

    [Edit] Peut-être cela dépend-il du navigateur mais Firefox 1.5.0.6 n'envoie pas une checkbox non cochée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
     
    if(isset($_POST['test']))
    {
        echo '-'.$_POST['test'].'-';
    }
     
    ?>
     
    <form method="post" action="<?php basename(__FILE__); ?>">
        <input type="checkbox" name="test" value="bouh" />
        <input type="submit" />
    </form>

  11. #11
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Voila ce que j'ai fait pour ne plus avoir le 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
    25
    			// Initialisation des checkbox si pas checké
    			if(!isset($pub_sel_destinataire))
       			{
       				$pub_sel_destinataire=0;
       			}
    			if(!isset($pub_sel_dest_compte))
       			{
       				$pub_sel_dest_compte=0;
       			}
    			if(!isset($pub_sel_domicile))
       			{
       				$pub_sel_domicile=0;
       			}
       			if(!isset($pub_sel_tiers))
       			{
       				$pub_sel_tiers=0;
       			}
       			if(!isset($pub_sel_tiers_compte))
       			{
       				$pub_sel_tiers_compte=0;
       			}
       			if(!isset($pub_sel_mesure))
       			{
       				$pub_sel_mesure=0;
       			}
    Et cela à l'air de fonctionner.

    C'est la 1ère chose que je fais juste avant la mise à jour des ma table.
    Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.

  12. #12
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Je te recommande d'utiliser les constantes TRUE et FALSE plutôt que des valeurs numériques, car leur sémantique est plus évidente.

  13. #13
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Donc comme je veux que les champs existe, cela doit donner ceci :

    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 des checkbox si pas checké
    			if(!isset($pub_sel_destinataire))
       			{
       				$pub_sel_destinataire=true;
       			}
    			if(!isset($pub_sel_dest_compte))
       			{
       				$pub_sel_dest_compte=true;
       			}
    			if(!isset($pub_sel_domicile))
       			{
       				$pub_sel_domicile=true;
       			}
       			if(!isset($pub_sel_tiers))
       			{
       				$pub_sel_tiers=true;
       			}
       			if(!isset($pub_sel_tiers_compte))
       			{
       				$pub_sel_tiers_compte=true;
       			}
       			if(!isset($pub_sel_mesure))
       			{
       				$pub_sel_mesure=true;
       			}
    Est-ce correct ?
    Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.

  14. #14
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    juste à titre d'infos, pourquoi ne pas utiliser html_checkboxes pour générer tes checkbox ?
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  15. #15
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Oui, j'avais regardé, mais je trouvais que cela ne correspondait pas à ce que je voulais faire

    Voici ce que cela donne à l'écran

    Y a pas, plus on fait, plus on sait. Plus on cherche, plus on sait chercher. Maintenant quant à trouver, c'est autre chose.

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

Discussions similaires

  1. Méthode usine + template en retour = mal de tête
    Par benlaug dans le forum Langage
    Réponses: 7
    Dernier message: 15/01/2012, 01h24
  2. requête qui fait mal à la tête
    Par noumian dans le forum Langage SQL
    Réponses: 4
    Dernier message: 22/06/2010, 19h28
  3. calcule de date et mal de tête
    Par zerros dans le forum Langage
    Réponses: 2
    Dernier message: 16/03/2010, 16h05
  4. Réponses: 4
    Dernier message: 20/09/2007, 01h50

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