Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Help... Cases a cocher dans form Php

13 réponses
Avatar
Epicurien
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>...

10 réponses

1 2
Avatar
CrazyCat
Epicurien wrote:
<?php
if(@$active == 1 )



Pourquoi ce @ ? Il est complètement inutile ici.

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 ?

elseif(@$active == 0 )



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
Avatar
Pascal
Epicurien a écrit :
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
Avatar
Pascal
CrazyCat a écrit :
Pour ma part, je ferais:

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é.
Avatar
Mihamina Rakotomandimby
09/20/2009 12:10 AM, 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...
Avatar
Bruno Desthuilliers
Mihamina Rakotomandimby a écrit :
09/20/2009 12:10 AM, 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... :-/

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 ???
Avatar
Epicurien
> 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
Avatar
Christophe
On 19 sep, 23:10, Pascal wrote:

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...)
Avatar
Christophe
On 29 sep, 12:33, Christophe wrote:
On 19 sep, 23:10, Pascal wrote:

> 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.
Avatar
Pascal
Christophe a écrit :
On 19 sep, 23:10, Pascal wrote:

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.
Avatar
Mickael Wolff
Christophe wrote:

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
1 2