pb en combinant "boucle while" + "isset"
Hors ligneJekkil Le 27/03/2006 à 01:04 Profil de Jekkil Configuration de Jekkil

Bonjour,
J'ai un problème avec un bout de programme.

Ce que j'ai :
- une liste de thèmes rangés dans une base de données
- une page "précédente" sur laquelle j'ai un checkbox par thème

Ce que je veux faire :
- si le thème a été coché, aller chercher dans la base données les éléments correspondants et les afficher sur la page "suivante"

Ce que j'ai essayé de faire :
- j'ai fait une boucle while sur les thèmes. En faisant un isset($_POST['theme']) j'espérais pouvoir récupéré mes éléments.

Le PROBLEME :
- comment faire varier la valeur de theme dans l'isset ???
J'ai essayé en utilisant une variable à l'intérieur des crochets du POST, ça n'a pas marché.
J'ai aussi essayé ça : qui n'a pas marché :

   $post = "_POST['".$theme."']";
   if (isset(${$post})) ...

J'ai aussi essayé avec la variante : $post = "\$_POST['".$theme."']";

Je suis à court d'idées.
Merci d'avance à ceux qui jetteront un oeil à mon problème.
Hors ligneMalalam Le 27/03/2006 à 10:34 Profil de Malalam Configuration de Malalam

Hello,

tu devrais montrer ton bout de formulaire, aussi. Là je ne comprends pas bien comment tu as construits tes checkboxes.
Hors ligneJekkil Le 27/03/2006 à 11:13 Profil de Jekkil Configuration de Jekkil

Bonjour Malalam,
Voici comment je présente mes checkbox :


<?
$retour
= mysql_query("SELECT theme FROM theme ORDER by theme");
$don = mysql_fetch_array($retour);

// j'affiche les thèmes en plusieurs colonnes, ce qui explique les boucles for (j'ai au préalable compter le nombre de thèmes à l'aide d'une requête)

for ($part=1;$part<=4;$part++) {
     for ($i=0;$i<$limit;$i++) {
          ?><label><input type="checkbox" name="<?echo $don['theme'];?>"/> <?echo $don['theme'];?></label>
<?
     
}
}
Hors ligneMalalam Le 27/03/2006 à 12:05 Profil de Malalam Configuration de Malalam

Pourquoi tu utilises des checkboxes ? je suppose qu'un seul thème doit être sélectionné, non ? Auquel cas il vaut mieux passer par des boutons radio.
Bref...



<label><input type="checkbox" name="theme" value="<?php echo $don['theme'];?>"/> <?php echo $don['theme'];?></label>


Et tu récupères le thème coché dans $_POST['theme'] justement. (le dernier coché, ici)

Si tu veux donner la possibilkité d'en récupérer plusieurs :



<label><input type="checkbox" name="theme[]" value="<?php echo $don['theme'];?>"/> <?php echo $don['theme'];?></label>



et tu récupères dans un tableau $_POST['theme'] = array (...) tes thèmes cochés.
Hors ligneJekkil Le 27/03/2006 à 12:42 Profil de Jekkil Configuration de Jekkil

On peut faire ça ?

Ca simplifie vachement ! Merci beaucoup Malalam !
J'essaie ça dans l'après-midi... là, je dois filer en cours.

J'avais pensé aux radios et si je les avais utilisés, je n'aurais pas eu ce problème. Mais je veux pouvoir choisir plusieurs thèmes en même temps, c'est pour ça que je dois rester sur checkbox.

Je reviendrai poster un message pour dire si ça a bien marché.
Hors ligneWebdeb73 Le 27/03/2006 à 23:26 Profil de Webdeb73 Configuration de Webdeb73

Pour infos :

1/ Utilises les balises <?php à la place de <?. Voici un petit lien pour justifier mes propos :

http://frederic.bouchery.free.fr/?2004/07/16/4-[...]

2/ Préfère mysql_fetch_assoc() à mysql_fetch_array() car plus rapide.

++
--
Webmaster de http://www.webmaster-debutant.net
Hors ligneJekkil Le 28/03/2006 à 17:56 Profil de Jekkil Configuration de Jekkil

Tout d'abord, merci Malalam : j'ai pu faire exactement ce que je voulais avec les checkbox.

Webdeb73 : Ok, je vais jeter un oeil. Il n'y a aucune raison pour que je suive pas ton conseil.

Merci à vous deux !
Hors ligneWebdeb73 Le 29/03/2006 à 09:43 Profil de Webdeb73 Configuration de Webdeb73

Nouvelle précision concernant la différence mysql_fetch_array et mysql_fetch_assoc :

- mysql_fetch_array fait une copie du tableau retourné (cad 2 tableaux identiques) mais le premier est indexé avec des clé chiffrées commençant par 0 et le second est indexé par des index alphanumériques (ex: $don['theme']; ).

Donc il vaut mieux utiliser mysql_fetch_assoc dans ton cas afin d'éviter de la copie inutile de tableaux ( => optimisation ) ou bien utiliser mysql_fetch_array() avec MYSQL_ASSOC en second paramètre.

++
--
Webmaster de http://www.webmaster-debutant.net
Hors ligneAnthony Le 29/03/2006 à 10:13 Profil de Anthony Configuration de Anthony

Admin
Salut,

ou encore mysql_fetch_row() qui reste encore plus rapide :-)
--

Hors ligneWebdeb73 Le 29/03/2006 à 10:34 Profil de Webdeb73 Configuration de Webdeb73

Webmaster a écrit :
Salut,

ou encore mysql_fetch_row() qui reste encore plus rapide :-)


mysql_fetch_row() n'est plus vraiment utilisé.
--
Webmaster de http://www.webmaster-debutant.net
Vous avez résolu votre problème avec VIC ? Faites-le savoir sur les réseaux sociaux !
Vulgarisation-informatique.com
Cours en informatique & tutoriels