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

mysql et liste deroulant avec choix par default, selected ?

8 réponses
Avatar
ybvj
Bonjour,

Je suis en train de migrer une base access vers mysql.

Mon problème est le suivant, j'ai un champs (même plusieurs) avec
liste déroulante basé sur une autre table.

A la création d'un enreistrement, aucun problème, la liste affiche
les occurences sans choix par défaut ...

Par contre à la modification, je n'arrive pas à afficher la valeur
selectionné precedemment ???

J'utilise un if qui vérifie si la valeur de l'enregistrement est
égale à la valeur lu dans la boucle de la liste et si c'est la cas,
j'ajoute un selected.

En théorie ! Aar en pratique, cela ne fonctionne pas et la liste reste
sur n'importe qu'elle occurence...

Voici si-dessous un exemple du code d'une de mes listes.

Un petit coup de mains ne serait pas de refus !

Merci d'avance

---------------------------------------------------------------------

<?

// liste fab

$lfab = "SELECT Code_type_client, Type_client FROM Type_client order
by Type_client";

$rlfab = mysql_query($lfab);

echo "<select name=\"type\">";

while ($tab2 = mysql_fetch_array($rlfab)) {

$num2 = $tab2[Code_type_client];

$nom = $tab2[Type_client];



if ($tab[Code_type_client]=$num2) { echo "<option value='$num2'
SELECTED>$nom";} else {echo "<option value=$num2>$nom" ;}

}

echo "</select>";

?> Type_client </p>

8 réponses

Avatar
Christophe Meresse


if ($tab[Code_type_client]=$num2) { echo "<option value='$num2'
SELECTED>$nom";} else {echo "<option value=$num2>$nom" ;}



if (... == ...) pas if (... = ...)

Je me pose toujours la même question dans ces cas là: As-tu jeté un
oeil à l'html généré ? Je pense que tu aurais remarqué qu'il y
avait des SELECTED sur chaque options, non ?

Sinon il me semble que tu devrais fermer chaques options par un
</option> et si tu veux écrire du xhtml: <option value='...'
selected='selected'>...</option>

Voilà.
Bon courage
Christophe

Avatar
Laurent
Christophe Meresse wrote:


if ($tab[Code_type_client]=$num2) { echo "<option value='$num2'
SELECTED>$nom";} else {echo "<option value=$num2>$nom" ;}




if (... == ...) pas if (... = ...)


je me permets de rajouter que pour prendre de bonnes habitudes il faut
écrire à l'envers les égalités : au lieu de if ($a == 2), écrire if (2
== $a).
Tout simplement parce que si on se trompe en mettant = au lieu de ==,
dans le 2ème cas ca génèrera une erreur alors que dans le 1er ca
affectera la valeur 2 à $a, ce qui risque de faire des dégâts...


Je me pose toujours la même question dans ces cas là: As-tu jeté un
oeil à l'html généré ? Je pense que tu aurais remarqué qu'il y
avait des SELECTED sur chaque options, non ?


pas mieux, quand on génère du html avec php il faut regarder la source
produite, on trouve toujours des erreurs comme ca...


Avatar
Aurelien Barbier-Accary


if ($tab[Code_type_client]=$num2) { echo "<option value='$num2'
SELECTED>$nom";} else {echo "<option value=$num2>$nom" ;}





Bonjour,

Tu devrais aussi corriger ta sortie XHTML et donc mettre selected="selected"
(tout en minuscule) au lieu de SELECTED puis ajouter des quotes autour de $num2
dans le else afin de respecter les nouveaux standards:
http://www.w3.org/TR/xhtml-modularization/abstract_modules.html#s_extformsmodule
Migrer doucement du HTML (abandonné) au XHTML te garantit que ta page sera lue
correctement par les nouveaux navigateurs. XHTML1.0 est supporté depuis
longtemps, la version 1.1 est un peu plus stricte mais relativement semblable et
la 2.0 est en cours de finalisation.
Quelle que soit le type de tes pages (HTML4, XHTML1, XHTML1.1), utilises la
validation de tes pages (http://validator.w3.org/) pour prévenir l'apparition de
problèmes sur d'autres navigateurs que celui que tu utilises.
Bon courage pour la migration si tu t'y mets.

Aurélien.


Avatar
Olivier Miakinen

if (... == ...) pas if (... = ...)


je me permets de rajouter que pour prendre de bonnes habitudes il faut
écrire à l'envers les égalités : au lieu de if ($a == 2), écrire if (2
== $a).


J'ai déjà vu ça dans des programmes, mais personnellement je n'aime pas,
pour une bête question de lisibilité. Prenons l'exemple d'un programme
où je fais un truc différent selon que la variable MACHIN est inférieure
à 7, égale à 10, égale à 12 ou supérieure à 20 (avec traitement par
défaut pour les autres cas. En lisant le programme, je préfère me dire
en moi-même :
- si MACHIN inférieur à 7 { ... }
- sinon, si MACHIN égale 10 { ... }
- sinon, si MACHIN égale 12 { ... }
- sinon, si MACHIN supérieur à 20 { ... }
- sinon { ... }
plutôt que :
- si MACHIN inférieur à 7 { ... }
- sinon, si 10 égale MACHIN { ... }
- sinon, si 12 égale MACHIN { ... }
- sinon, si MACHIN supérieur à 20 { ... }
- sinon { ... }
ou que :
- si 7 supérieur à MACHIN { ... }
- sinon, si 10 égale MACHIN { ... }
- sinon, si 12 égale MACHIN { ... }
- sinon, si 20 inférieur à MACHIN { ... }
- sinon { ... }

Cela a beau être mathématiquement équivalent, dans mon petit esprit
habitué à comparer un objet aux différentes valeurs possibles plutôt
que l'inverse cela fait une sacrée différence. Dans le dernier cas, je
vois des tests n'ayant aucun rapport les uns avec les autres (un sur 7,
l'autre sur 10, etc.) plutôt que quatre tests sur MACHIN.

Tout simplement parce que si on se trompe en mettant = au lieu de ==,
dans le 2ème cas ca génèrera une erreur alors que dans le 1er ca
affectera la valeur 2 à $a, ce qui risque de faire des dégâts...


Si vraiment on a l'habitude de faire ce genre de fautes de frappe, alors
il ne faut pas hésiter à les rechercher dans le fichier à la fin de la
saisie. Par exemple, avec vim que je connais le mieux, ceci les trouvera
tous (parmi éventuellement quelques lignes valides) :
/(.* = .*)

Bien évidemment, pour cela il faut toujours laisser une espace de part
et d'autre de chaque opérateur, ce qui est aussi utile à la lisibilité.

Sinon, il y a :
/(.*[^-=+*/!<>]=[^-=+*/!<>].*)
... mais c'est plus long à taper !

Je me pose toujours la même question dans ces cas là: As-tu jeté un
oeil à l'html généré ? Je pense que tu aurais remarqué qu'il y
avait des SELECTED sur chaque options, non ?


pas mieux, quand on génère du html avec php il faut regarder la source
produite, on trouve toujours des erreurs comme ca...


+1

--
Olivier Miakinen
Troll du plus sage chez les conviviaux : le nouveau venu, avec
son clan, s'infiltre dans les groupes de nouvelles. (3 c.)


Avatar
Stephane Pineau
Le 17 Nov 2005 13:26:54 GMT, Aurelien Barbier-Accary
écrivait:

if ($tab[Code_type_client]=$num2) { echo "<option value='$num2'
SELECTED>$nom";} else {echo "<option value=$num2>$nom" ;}





Et pour ajouter une couche aux bon conseils, tu peux simplifier l'écriture
de ta boucle en sortant du code php momentanément et surtout en te
dispensant du else :dans ce cas de figure

<?php
Debut de ta boucle

?>
<option value='<?php echo $num2; ?>' <?php if
($tab[Code_type_client]==$num2) echo "selected='selected'";?> >
<?php
fin de ta boucle
?>

Cdlt,
Stéph'



Avatar
Sebastien
Migrer doucement du HTML (abandonné) au XHTML te garantit que ta page


HTML, abandonné ??? C'est toi qui devrait faire un tour sur le W3C.

HTML n'est pas abandonné, c'est un standard d'avenir. XHTML servi en
tant que text/html est une grosse daube bien moins stricte que HTML 4.01
strict.

sera lue correctement par les nouveaux navigateurs. XHTML1.0 est
supporté depuis longtemps, la version 1.1 est un peu plus stricte mais
relativement semblable et la 2.0 est en cours de finalisation.


Non, XHTML 1.1 est plus semblable à HTML 4.01 strict qu'à XHTML 2, qui
est un nouveau langage alors que XHTML 1.x n'est qu'une reformulation de
HTML 4.
"en cours de finalisation", c'est toi qui le dit, XHTML 2 est *LOIN*
d'être finalisé.

Quelle que soit le type de tes pages (HTML4, XHTML1, XHTML1.1), utilises
la validation de tes pages (http://validator.w3.org/) pour prévenir
l'apparition de problèmes sur d'autres navigateurs que celui que tu
utilises.


Là d'accord.

Bon courage pour la migration si tu t'y mets.


Je conseillerais plutôt de s'orienter vers du HTML 4 valide (avec un
DOCTYPE strict si possible) et de bonnes pratiques concernant
l'utilisabilité et l'accessibilité.

Une page HTML transformée en XHTML, servie en text/html n'apporte RIEN,
ou plutôt conrtibue à rendre le web encore moins standard.

Je suis prêt à t'expliquer le pourquoi du comment par e-mail privé, car
ce n'est pas le lieu ici.


Sébastien

Avatar
Aurelien Barbier-Accary
Une page HTML transformée en XHTML, servie en text/html n'apporte RIEN,
ou plutôt conrtibue à rendre le web encore moins standard.

Je suis prêt à t'expliquer le pourquoi du comment par e-mail privé, car
ce n'est pas le lieu ici.


Sébastien


J'exerce une dernière fois mon droit de réponse :
http://www.w3.org/2002/05/html/charter#scope
décrit la mission du groupe de travail HTML (qui est bien vivant, il n'y a pas
de groupe XHTML, c'est le même) et qui dit :
"The main scope of this charter is to complete the transition from HTML to XHTML"
qui peut se traduire par
"Le rôle principal de cette charte est d'accomplir la transition du HTML à XHTML"
Je crois que c'est suffisament clair.

Mais nous sommes d'accord, ce n'est pas le lieu pour en débattre et je te
réponds donc par mail. Je tiens cependant à affirmer que tes dires sont
partiellement mais néanmoins gravement faux (comme la citation ci-dessus le
démontre). Pour ceux que ça intéresse, je peux vous envoyer une copie de ma
réponse (pour m'écrire, enlevez nospam_ et _mapson ainsi que .invalid à mon
adresse mail affichée) mais surtout je vous invite à chercher votre vérité en
parcourant http://www.w3.org/2002/05/html/charter

Aurélien.

Avatar
Sebastien
Mais nous sommes d'accord, ce n'est pas le lieu pour en débattre et je
te réponds donc par mail. Je tiens cependant à affirmer que tes dires
sont partiellement mais néanmoins gravement faux (comme la citation
ci-dessus le démontre). Pour ceux que ça intéresse, je peux vous envoyer
une copie de ma réponse (pour m'écrire, enlevez nospam_ et _mapson ainsi
que .invalid à mon adresse mail affichée) mais surtout je vous invite à
chercher votre vérité en parcourant http://www.w3.org/2002/05/html/charter


Évidemment je maintiens TOUT ce que j'ai dit.

La suite par email.

Sébastien