Discussion:
Help... Cases a cocher dans form Php
(trop ancien pour répondre)
Epicurien
2009-09-19 13:06:38 UTC
Permalink
Bonjour à tous,

Débutant en Php, je suis en train de me prendre la tête avec un bout de code
qui devrait
à priori être pourtant simple ?

Voici ce que je veux faire... Dans une BDD, j'ai un champ "Actif ou pas" 1
pou oui, ou 0 pour
non... que l'on renseigne via un formulaire de saisie ou un autre de
modification, via des cases
à cocher !

C'est la modification qui me pose problème...
Je voudrais en effet, que dans le form de modification d'une fiche, la case
correspondante à
l'état actuel de la variable $active soit précochée (checked)... Mais je ne
parviens pas
à mes fins... Sans doute à cause de problèmes de syntaxe...

Qui saura m'aider ?

Voici mon code pour le form de modif (il est situté dans une cellule de
tableau)

... <td>

<?php
if(@$active == 1 )
{
echo '<input type="checkbox" name="active" value=$myrow["active"] checked>
Oui<br>';
}
elseif(@$active == 0 )
{
echo '<input type="checkbox" name="active" value=$myrow["active"]>
Oui<br>';
}

if(@$active == 0 )
{
echo '<input type="checkbox" name="active" value=$myrow["active"]>
Oui<br>';
}
elseif(@$active != ' ' )
{
echo '<input type="checkbox" name="active" value=$myrow["active"] checked>
Oui<br>';
}
?>

</td>...
CrazyCat
2009-09-19 17:29:12 UTC
Permalink
Post by Epicurien
<?php
echo '<input type="checkbox" name="active" value=$myrow["active"] checked>
Oui<br>';
Il te manque les "" autour de value, il vaut mieux mettre
checked="checked" pour une bonne compatibilité. Et en délimitant ton
echo par des quotes simples, il y a des chances pour que
$myrow["active"] ne soit pas interprété. As-tu regardé la source générée ?
Pourquoi pas un simple else ? Si par un quelconque hasard ton champ
était mal rempli (valeur NULL par exemple), tu aurais un affichage par
défaut.

Pour ma part, je ferais:

if ($active == 1) $checked = 'checked="checked"';
else $checked = '';
echo '<input type="checkbox" name="active" value="'.$myrow['active'].'"
'.$checked.'>';
--
Réseau IRC Francophone: http://www.zeolia.net
Aide et astuces : http://www.g33k-zone.org
Communauté Francophone sur les Eggdrops: http://www.eggdrop.fr
Pascal
2009-09-20 17:06:04 UTC
Permalink
Post by CrazyCat
if ($active == 1) $checked = 'checked="checked"';
else $checked = '';
echo '<input type="checkbox" name="active" value="'.$myrow['active'].'"
'.$checked.'>';
[HTML/XHTML]

Bonjour,

Si je puis me permettre, il faut faire la différence entre les standards
HTML et XHTML :
- HTML est le domaine du Web, il reste et restera compréhensible par
tous les clients Web, sauf avis contraire du W3C. Il se suffit donc à
lui-même pour produire du contenu standard.
- XHTML n'est qu'une extension de HTML qui, grâce à de légères
modifications de syntaxe, permet de rendre un contenu HTML compatible
avec le standard XML. Ce n'est donc pas un remplaçant de HTML (sinon il
n'y aurait pas de version 5 en vue).

Pour l'exemple donné, on a le choix entre :

- la syntaxe HTML '<input ... checked>'
- et la syntaxe XHTML '<input ... checked="checked"/>'

Ceci à condition que tout le reste du document suive le même standard, y
compris le 'DOCTYPE' qui est souvent oublié, alors que déterminant pour
la liberté d'interprétation du client HTTP !

Cordialement,
Pascal


PS: je place mon intervention à ce niveau de la discussion pour un souci
d'ordre chronologique, mais elle est plus destinée à Epicurien, qui se
déclare débutant, qu'à CrazyCat, que je crois plus confirmé.
Pascal
2009-09-19 21:10:11 UTC
Permalink
Post by Epicurien
Je voudrais en effet, que dans le form de modification d'une fiche, la case
correspondante à
l'état actuel de la variable $active soit précochée (checked)...
Bonjour,

Déjà, même si PHP le permet, je trouve suspect la présence de
l'opérateur d'erreur silencieuse '@' derrière la variable '$active'.
Vu les tests et le HTML qui suit, il vaut mieux être sûr que cette
variable est bien renseignée.

Donc, admettons qu'elle le soit, et qu'elle arrive avec le bon type
(entier ou booléen), le reste ne devrait pas poser problème.

Par contre, erreur classique, les chaînes délimitées par des guillemets
simples n'interprètent pas les variables.
Pourtant facile à vérifier, en regardant le code source sur le client
HTTP, qui doit produire '<input ... value=$myrow["active"] ...>' ou
encore '<input ... value="active" ...>' s'il n'arrive pas à comprendre
l'emplacement des guillemets doubles.
Mais, de toute façon, je ne vois pas l'intérêt d'utiliser une variable à
cet endroit, puisqu'on connait la valeur !

Enfin, comme le résultat de la saisie ne peut être que 'oui' ou 'non',
il serait plus logique d'utiliser des boutons type 'radio', plutôt que
'checkbox'.

Exemple, au plus simple :

<?php
// Si l'enregistrement est récupéré dans '$myrow'
$active = (int) $myrow['active'];
echo '<input type="radio" name="active" value="1"';
echo $active ? ' checked' : '';
echo '>Oui<br>';
echo '<input type="radio" name="active" value="0"';
echo ! $active ? ' checked' : '';
echo '>Non<br>';
?>

Il y a d'autres façons de l'écrire, mais la logique serait la même.

Cordialement,
Pascal
Mihamina Rakotomandimby
2009-09-21 10:09:38 UTC
Permalink
Post by Pascal
Il y a d'autres façons de l'écrire
D'ailleurs, Epicurien pourrait, des le debut, s'orienter
du coté d'un systme de templates du genre de smarty...

Ca peut porter ses fruits dans le futur...
Bruno Desthuilliers
2009-09-21 13:55:14 UTC
Permalink
Post by Mihamina Rakotomandimby
Post by Pascal
Il y a d'autres façons de l'écrire
D'ailleurs, Epicurien pourrait, des le debut, s'orienter
du coté d'un systme de templates du genre de smarty...
Ou comment écrire un langage de template dans un langage de template (ce
qu'est, avant tout, PHP...). Et imposer à l'OP d'apprendre encore un
langage en plus... :-/
Post by Mihamina Rakotomandimby
Ca peut porter ses fruits dans le futur...
Tu me permettra d'être en désaccord. PHP *est* un langage de template,
pourquoi se faire ch... (et surcharger le serveur) en en remettant une
couche ???
Epicurien
2009-09-28 20:54:25 UTC
Permalink
Post by Pascal
Enfin, comme le résultat de la saisie ne peut être que 'oui' ou 'non',
il serait plus logique d'utiliser des boutons type 'radio', plutôt que
'checkbox'.
Merci... C'est ce que je me suis résigné à faire... Mais parce que mon
cahier des
charges a changé depuis... Initialement OUI et NON pouvaient être cochés
simultanément.... Cela était lié a l'appli en elle même...

Bref, problème résolu ;)

Merci à tous
Christophe
2009-09-29 10:33:44 UTC
Permalink
Post by Pascal
Enfin, comme le résultat de la saisie ne peut être que 'oui' ou 'non',
il serait plus logique d'utiliser des boutons type 'radio', plutôt que
'checkbox'.
Quelle drôle d'idée, les checkbox sont justement destinées à des
reponses booleenes (true/false, oui/non...)
Christophe
2009-09-29 12:37:58 UTC
Permalink
Post by Christophe
Post by Pascal
Enfin, comme le résultat de la saisie ne peut être que 'oui' ou 'non',
il serait plus logique d'utiliser des boutons type 'radio', plutôt que
'checkbox'.
Quelle drôle d'idée, les checkbox sont justement destinées à des
reponses booleenes (true/false, oui/non...)
Désolé, je viens de comprendre. La drôle d'idée venait surtout de
vouloir mettre deux checkbox en fait. Mais puisque Epicurien semblait
avoir une étrange raison venant de son cahier des charges...
Ca n'empêche pas que je ne comprend absolument pas comment l'exemple
du début peut donner quelque-chose de cohérent puisqu'il va afficher
deux checkbox ayant le même attribut name.
Pascal
2009-09-29 12:37:58 UTC
Permalink
Post by Christophe
Post by Pascal
Enfin, comme le résultat de la saisie ne peut être que 'oui' ou 'non',
il serait plus logique d'utiliser des boutons type 'radio', plutôt que
'checkbox'.
Quelle drôle d'idée, les checkbox sont justement destinées à des
reponses booleenes (true/false, oui/non...)
Sauf quand on veut faire apparaître les deux réponses possibles, ce qui
semblait être le cas de notre ami.
Mickael Wolff
2009-09-30 07:38:46 UTC
Permalink
Post by Christophe
Quelle drôle d'idée, les checkbox sont justement destinées à des
reponses booleenes (true/false, oui/non...)
Tu confonds avec les radio buttons.
--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
Christophe
2009-09-30 15:21:40 UTC
Permalink
Post by Christophe
Quelle drôle d'idée, les checkbox sont justement destinées à des
reponses booleenes (true/false, oui/non...)
   Tu confonds avec les radio buttons.
Heu non, je ne crois pas.
Radio buttons: un choix unique parmis n.
Checkbox: On/Off, Oui/Non, True/False, Actif/Inactif... tout dépend du
sujet de la question mais utiliser des radio buttons pour choisir
entre Oui et Non, je ne trouve pas ça idéal.

Un exemple simple qui me tombe sous la main dans firefox, menu Outils/
Options: "Afficher la fenêtre Téléchargement...", c'est une checkbox,
pas deux radio buttons Oui et Non.

Christophe
Mickael Wolff
2009-10-01 06:48:01 UTC
Permalink
Post by Christophe
Heu non, je ne crois pas.
Radio buttons: un choix unique parmis n.
J'avais mal interprété la phrase « les checkbox sont justement
destinées à des reponses booleenes ». Tu considère une checkbox dans son
individualité, alors que je la considère dans un groupe de checkbox.
C'est une question de point de vue. Cependant, une checkbox dans une
page HTML ne représente pas une variable booléenne (puisque le paramètre
HTTP correspondant à peu de chances d'en etre un, en étant le plus
souvent un tableau HTTP).
--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
Jean-Francois Ortolo
2009-09-30 15:21:40 UTC
Permalink
Post by Mickael Wolff
Post by Christophe
Quelle drôle d'idée, les checkbox sont justement destinées à des
reponses booleenes (true/false, oui/non...)
Tu confonds avec les radio buttons.
Bonjour Monsieur

Les deux...

Plusieurs checkboxes d'un groupe peuvent être cochées en même temps,
alors que ce n'est pas le cas pou un groupe de radio boutons.

C'est pas moi qui le dit, c'est mon bouqin sur le HTML, qui date à
peu près, de l'année 2002... ;)

Mais n'est-ce pas hors charte ?

Amicalement.

Jean-François Ortolo
Continuer la lecture sur narkive:
Loading...