probleme de formulaire

Invité
Invité n'ayant pas de compte PHPfrance

20 juil. 2005, 00:30

salut
j'ai fait ce formulaire :

Code : Tout sélectionner

<form method="POST" action="tableaux.php"> <p>Date d'achat (jj/mm/aa) : <input type="text" name="dateAchat" size="8"></p> <p>Nom de la valeur : <input type="text" name="nom" size="10"></p> <p>Quantité achetée : <input type="text" name="qteAchat" size="10"></p> <p>Prix d'achat unitaire : <input type="text" name="prixUnitaire" size="5"> ou total : <input type="text" name="prixTotal" size="20"></p> <p><input type="submit" value="Envoyer" name="B1"> <input type="reset" value="Rétablir" name="B2"></p> </form>
et dans tableaux.php:
- si je met :
<? echo $nom; ?>
cela donne une erreure variable nom non definie
et meme en essayant :
<?
$nom = $_POST['nom'];
echo $nom;
j'ai la meme erreur
solution ? merci

Eléphant du PHP | 63 Messages

20 juil. 2005, 03:31

Après test, cela marche parfaitement chez moi.

Question stupide (mais je préfère vérifier): cela donne l'erreur après que tu aies posté le formulaire ? Après que tu aies cliqué sur le bouton 'Envoyer' ?

Si oui, essaye directement un

Code : Tout sélectionner

<?php echo $_REQUEST["nom"]; ?>
Cela m'étonnerait que cela résolve le problème, mais on sera fixés.

Mammouth du PHP | 19672 Messages

20 juil. 2005, 07:51

Quelques explications simples.

Jusqu'à la version 4.2 de PHP, la configuration par défaut définissait l'option "register_globals" à ON. Grâce à cette option, on pouvait récupérer la valeur d'un champ de formulaire en mettant directement le nom du champ préfixé avec un "$" pour définir la variable. Ainsi, un champ "nom" (<input type="text" name="nom"> pouvait être récupéré dans la partie traitement en appelant $nom.

Depuis, pour des raisons de sécurité, cette option register_globals est à OFF. Pour récupérer une valeur, il faut créer la variable et l'initialiser en récupérant explicitement les valeur dans une variable dire "super globale". Il y a plusieurs super-globales, les plus utilisées avec les formulaires étant $_POST, $_GET et $_REQUEST. Il est préférable d'utiliser les deux premières. On choisira en fonction de la valeur de l'attribut "method" de la balise <form>.

Si la méthode choisie est "post", alors on retrouvera les valeurs dans $_POST, si c'Est "get" dans $_GET. Ce sont des tableaux associatifs dont les index sont les noms des champs du formulaire. Donc on retrouvera la valeur de notre champ "nom" dans $_POST['nom'] ou $_GET['nom'] selon la méthode.

Pour vérifier "en vrac" ce que le formulaire envoie, on peut très simplement faire afficher le contenu de la variable superglobale utilisée:
<pre>
<?php
var_dump($_POST);
?>
</pre>
On aura alors à l'écran toutes les variables effectivement envoyées par le formulaire.

Bon code.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 138 Messages

20 juil. 2005, 12:04

Salut
Depuis, pour des raisons de sécurité, cette option register_globals est à OFF. Pour récupérer une valeur, il faut créer la variable et l'initialiser en récupérant explicitement les valeur dans une variable dire "super globale". Il y a plusieurs super-globales, les plus utilisées avec les formulaires étant $_POST, $_GET et $_REQUEST. Il est préférable d'utiliser les deux premières. On choisira en fonction de la valeur de l'attribut "method" de la balise <form>.
Tiens puisque tu en parles, pourrais tu m'expliquer pourquoi le $_REQUEST n'est pas conseillé, car cette fonctionnalité est bien pratique :roll:

Merci
Il y a des gens qui ont une bibliothèque comme des eunuques ont un harem (V. Hugo)

Mammouth du PHP | 19672 Messages

20 juil. 2005, 14:16

Tout simplement parce que c'est le même problème qu'avec le register globals à ON : $_REQUEST te permet de récupérer aussi bien des variables en POST ou en GET : mais le danger en GET, c'est qu'on peut modifier l'url manuellement et envoyer des valeurs non prévues qui seront traitées de la même manière mais pourront avoir des conséquences fort désagréables: par exemple, on peut modifier juste la quantité d'articles d'un panier... sans modifier le prix total et donc avoir une facture pour 10 articles mays payer pour 2 articles seulement tout en recevant quand même les 10 articles. $_REQUEST n'est utile à mon avis qu'en débuggage, mais en production, il est préférable d'en éviter l'usage.

À ce compte là, la méthode GET doit être évitée quand elle n'est pas absolument nécessaire. Donc on l'utilisera pour envoyer des paramètres permettant de choisir d'afficher telle ou telle page, mais on s'abstiendra de l'utiliser pour envoyer les données d'un formulaire, et on bannira cette méthode dans un formulaire d'identification ou un formulaire comportant des information personnelles ou confidentielles en particulier
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 138 Messages

20 juil. 2005, 14:49

OK
Je comprends, c'est vrai que je n'avais pas pensé à ça.
Si j'ai bien compris:
en fait si on a une page avec un formulaire qui transmet les variables en POST et que l'on récupère avec un REQUEST, on peut modifier l'une de ces variables en inscrivant la variable dans l'url (pour ceux qui cherchent à arnaquer :evil: )
alors que si on récupére avec POST pas de soucis

merci, tu vas m'éviter pas mal d'erreur :lol:
Il y a des gens qui ont une bibliothèque comme des eunuques ont un harem (V. Hugo)

Eléphant du PHP | 128 Messages

20 juil. 2005, 15:01

En validant ton formulaire tu a rempli ton champ nom??

Tu nous montre le code du formulaire c'est bien mais le code de traitement du formulaire c'est encore mieux ;)
C'est pas moi qui ai volé l'orange !

Invité
Invité n'ayant pas de compte PHPfrance

20 juil. 2005, 17:47

il est bizaaar quand meme php
au debut :
<? echo $nom; ?> 
ne marchait pas (et ne marche toujours pas :
Notice: Undefined variable: nom in c:\program files\easyphp\www\projet1\bourse\tableaux.php on line 3
sauf qu'en remplacant ca par
$nom = $_POST['nom']; 
echo $nom; 
j'avais toujours la meme erreur
j'ai donc essayé :
<pre> 
<?php 
var_dump($_POST); 
?> 
</pre> 
qui m a donné :
array(6) {
["dateAchat"]=>
string(6) "010101"
["nom"]=>
string(6) "titre1"
["qteAchat"]=>
string(2) "25"
["prixUnitaire"]=>
string(3) "120"
["prixTotal"]=>
string(4) "2150"
["B1"]=>
string(7) "Envoyer"
}
puis essayé
<?php 
echo $_REQUEST["nom"]; 
?>
qui m a enfin donné le bon resultat
sauf que, surprise, en remplacant ca par la 2eme solution
$nom = $_POST['nom']; 
echo $nom; 
ca a enfin marché ! (et pas au debut) ce qui est icomprehensible : probleme de cache ou autre chose ? (je n utilise pour ce script ni cookies ni sessions) :?:

Mammouth du PHP | 19672 Messages

20 juil. 2005, 17:49

C'est effectivement curieux et l'idée d'un problème de cache n'est pas dénuée de sens. L'essentiel est que ça fonctionne désormais auquel cas on pourrait envisager de mettre ce sujet... [Résolu] :?:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

20 juil. 2005, 18:11

bien sur on peut mettre resolu mais je suis quand meme curieux de savoir pourquoi ca ne marche pas " a tous les coups", surtout que c'est un programme boursier et la rigeur y est requise :?:

pour modo : resolu donc