Page 1 sur 3
Problème de transmission de valeur d'un formulaire
Posté : 10 mai 2005, 09:33
par BFH
Bonjour, eh oui encore moi comme d'habitude avec un problème passablement ...[censuré]
Je transmet les valeurs d'un formulaire d'une page à une autre en utilisant le "GET".
Lorsque mes champs ont des noms simples tels que :
"
P", "Boitier", "Chipset", ...
Je n'ai aucun problème de transmission ni de reception et de traitement. Explication, la formule :
if(isset($_GET["P"]))
{
$P=$_GET["P"];
}
echo $P;
fonctionne parfaitement et je recuprère la bonne valeur de
$P
Par contre, lorsque mes champs ont des noms plus complexes du style :
"
Réseaux", "PCI/AGP", "périphérique" etc...
Avec la formule precédente :
if(isset($_GET["Réseaux"]))
{
$R=$_GET["Réseaux"];
}
echo $R;
Rien ne se passe, enfin si aucune valeur n'est récupérée!
Comment faire pour récupérer ces valeurs, j'ai essayé avec "POST" au cas où mais là non plus rien!
Posté : 10 mai 2005, 09:38
par Cyrano
N'utilises pas de caractères spéciaux dans les noms de tes index: pas d'accent, pas d'espace ni caractères tels que / ou \ ou autre du même style.
Posté : 10 mai 2005, 10:38
par BFH
Désolé mais je crois pas avoir le choix!
j'ai une table qui stock des catégories de matériel informatique, d'où les noms "Réseaux", "périphériques", etc ...
Sur une page j'affiche tous ces noms de catégorie :
while($row=mysql_fetch_assoc($result))
{
?>
<TR>
<TD width="10%"> </TD>
<TD><font color="#0033CC" ><B> <?=$row["IPage"];?></B></font></TD>
<TD><CENTER><INPUT TYPE=checkbox name=" <?=$row['IPage'];?> " ></CENTER></TD>
<TD width="10%"> </TD>
</TR>
<TR>
<TD></TD>
</TR>
<?
}
?>
Je peux toujours changer le
name mais bon je voulais que cela soit indexé.
Posté : 10 mai 2005, 10:50
par Cyrano
N'oublie pas que ce ne sont que des index sans rapport direct avec les noms des champs de ta table: il t'appartient de savoir à quel champ correspond tel index pour récupérer la bonne information. Comme tu dis, tu n'as pas le choix, mais pas dans le sens où tu l'envisages. Il te faut utiliser des noms d'index valides pour que ça fonctionne. Donc si tu envoies un paramètre, son nom peut être "Reseau" mais pas "Réseau", à toi de traduire ce que tu affiches ensuite, mais tu n'affiches pas les index, tu affiches les valeurs.
Posté : 10 mai 2005, 10:56
par BFH
Oui c'est vrai tu as raison, j'ai realisé mon erreur pendant que tu devais ecrire ton post. C'est pour cela que j'ai modifié mon formulaire comme suit:
$i=0;
while($row=mysql_fetch_assoc($result))
{
?>
<TR>
<TD width="10%"> </TD>
<TD><font color="#0033CC" ><B> <?=$row["IPage"];?></B></font></TD>
<TD><CENTER><INPUT TYPE=checkbox value="<?=$row['IPage'];?>" name="<?=$i;?>"></CENTER></TD>
<TD width="10%"> </TD>
</TR>
<TR>
<TD></TD>
</TR>
<?
$i++;
}
Par contre pour moi le
value="<?=$row['IPage'];?>" c'est le seul moyen que je connais pour savoir si un champs a été séléctionné ou pas
Posté : 10 mai 2005, 11:04
par Cyrano
Je ne comprends pas trop le lien entre les paramètres aux noms exotiques que tu envoies et le formulaire en question...

Posté : 10 mai 2005, 11:28
par BFH
Donc en gros :
_Sur une page je propose une liste de catégorie avec en face un seul bouton type "checkbox", non selectionné par défaut.
_Si on valide un checkbox cela signifie qu'on veut voire apparaitre sur la page suivante le nom de la catégorie avec tous les matériels de la catégorie séléctionnée. Si plusieures catégories sont les catégories et leurs matériels seront présentés les uns à la suite des autres
C'est pour cela que je pense qu'il faut envoyer les noms des catégories pour faire la bonne selection a la page suivante
Posté : 10 mai 2005, 11:35
par Cyrano
OUi, ton schéma est logique, ce que je comprends moins, c'est le code que tu nous montres. ce formulaire sert si j'ai à peu près suivi à identifier les produits et à la sélection, tu vas envoyer la valeur de la case cochée, c'est bien ça ?
Cette valeur doit en principe correspondre à l'identifiant d'un produit qui va te servir pour la requête sur la page suivante.
Donc la première chose, c'est que l'attribut name de la balise checkbox n'a pas besoin d'un nom dynamique sinon tu pourras cocher toutes les cases: donc choisis un seul nom name="id_prod" par exemple et sur la page suivante, tu récupère ce paramètre que tu utilises dans ta requête.
Posté : 10 mai 2005, 11:46
par BFH
Bin justement,
je dois pouvoir cocher
toutes les cases ou
juste une ou
un nombre variable.
Et je ne sais pas comment faire alors pour selectionner les catégories choisi et afficher les produits qui en dépendent si je ne transmet pas la ligne suivante :
<INPUT TYPE=checkbox value="<?=$row['IPage'];?>" name="<?=$i;?>"></INPUT>
le value ici transmet le nom de la catégorie
Posté : 10 mai 2005, 11:58
par Cyrano
Autant pour moi, j'ai mélangé checkbox et radio.
Mais ça veut dire que tu vas afficher sur la page suivante autant de produits que de cases cochées.
Dans ce cas-là, met dans ton check_box name="id_produit[]"
Comme ça, tu récupères un tableau indexé.
Posté : 10 mai 2005, 12:59
par pjl
N'utilises pas de caractères spéciaux dans les noms de tes index: pas d'accent, pas d'espace ni caractères tels que / ou \ ou autre du même style.
La remarque est aussi valable pour les bases de données (nom de la base, des tables ou des champs.
Posté : 11 mai 2005, 13:52
par BFH
La remarque est aussi valable pour les bases de données (nom de la base, des tables ou des champs.
Désolé, mais c'est pas moi qui rempli la base mais un logiciel !
Posté : 11 mai 2005, 14:04
par BFH
Pardon
Cyrano mais je ne voit pas comment utiliser
name="id_produit[]"
Je sais où le placer mais je voudrais savoir si je doit mettre
name="id_produit['$i']"
ou autre chose... est ce que je doit mettre quelquechose dans "value" ?
et comment je recupère ça ? Avec un
if(isset($_GET['id_produit']))
Posté : 11 mai 2005, 17:05
par pjl
La remarque est aussi valable pour les bases de données (nom de la base, des tables ou des champs.
Désolé, mais c'est pas moi qui rempli la base mais un logiciel !
Ce n'est pas le logiciel qui impose ses noms quand même.
Posté : 11 mai 2005, 21:07
par BFH
Ce n'est pas le logiciel qui impose ses noms quand même.
Eh si ! Utilise AIDA32 si tu me crois pas ou encore Everest (attention ce dernier est un shareware)