Formulaire : envoyer des données dans le même fichier

Formulaire : envoyer des données dans le même fichier - PHP - Programmation

Marsh Posté le 28-08-2007 à 23:36:20    

Bonsoir,
 
J'essaie pour la première fois d'envoyer des données récupérées dans un formulaire dans ce même formulaire afin d'éviter de travailler avec un formulaire à pages multiples.
Lorsque j'exécute le code, aucune des valeurs des variables ne m'est retournée dans le navigateur.
 
Voici le code partiel exécuté dans la balise body (environnement easyphp 1.8). Le fichier est nommé petition.php :
 

Citation :


 
        <?
  echo $nom;
  echo $prenom;
 ?>
 
 <form name="petition" method="post" action="petition.php">
   
   <table border=0>
    <tr>  
     <td> Nom :  
     </td>
     <td><input type="text" name="nom" size="40" >
     </td>
    </tr>
    <tr>
     <td> Prénom :  
     </td>
     <td><input type="text" name="prenom" size="40" >
     </td>
    </tr>
                         ...
                         </table>
           </form>


 
Merci d'avance,

Reply

Marsh Posté le 28-08-2007 à 23:36:20   

Reply

Marsh Posté le 28-08-2007 à 23:43:50    

http://fr.php.net/manual/fr/reserv [...] ables.post


Message édité par sielfried le 28-08-2007 à 23:44:04

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 29-08-2007 à 00:17:44    

J'ai toujours le même pb avec le code ainsi modifié :
 

Citation :


echo $_POST["nom"];

Reply

Marsh Posté le 29-08-2007 à 11:18:24    

et comme ceci?
 
echo $_POST['nom'];

Reply

Marsh Posté le 29-08-2007 à 11:32:28    

Ou fais un var_dump($_POST), carrément.

Reply

Marsh Posté le 29-08-2007 à 12:45:45    

ce n'est pas parce que tu fais un echo $nom que forcément le name="nom" sera affiché ... (du moins sa valeur).
il existe une option dans le php.ini qui s'appelle "register globals" qui peut être à on ou off, pour définir cela justement. Ce qui fait le souci d'easyPHP c'était - du moins pour les versions 1.6 et 1.7 - cette valeur qui fait qu'on pouvait injecter n'importe quoi dans la page.
 
au lieu de :

Code :
  1. <?php
  2.   echo $nom;
  3.   echo $prenom;
  4. ?>


 
ecris plutôt :

Code :
  1. <?php
  2.   echo $_POST['nom'];
  3.   echo $_POST['prenom'];
  4.   var_dump($_POST); // donnera toutes les valeurs récupérées ainsi que leur type
  5. ?>


 
Pour l'action du formulaire, tu peux la laisser vide :

Code :
  1. <form id="petition" method="post" action="">
  2. ...
  3. </form>


 
PS : pourquoi un tableau pour mettre en page le formulaire ?
 
EDIT : un peu grilled, désolé.


Message édité par NewsletTux le 29-08-2007 à 12:46:40
Reply

Marsh Posté le 29-08-2007 à 13:06:20    

NewsletTux > En xhtml, on a pas le droit de mettre des balises input directement dans une balise form (dixit la norme xhtml1.x)
Pour le tableau au lieux d'un div ou de listes, je dirais : pourquoi pas? D'une certaine manière, on peut voir ça comme des données tabulaire avec le libelle en première colonne et la valeur (à saisir) dans la seconde. D'ailleurs même sur alsacréations, ils n'arrivent pas à déterminer si c'est une bonne (si oui à partir de combien de zone de saisie) ou une mauvaise pratique.

Reply

Marsh Posté le 29-08-2007 à 18:55:26    

tout à fait, je pensais surtout (en termes d'accessibilité et d'ergonomie) aux <label> déjà, puis soit à des <fieldset>, soit à des balises autres. Perso j'utilise souvent les <p> en mettant un attribut float à mes lables avec une certaine largeur, ce qui donne l'effet d'un tableau sans l'être.
 
Sa manipulation est aussi juste, mais logiquement parlant, ses champs ne sont pas reliés aux textes qui sont censés les décrire.
 
Et pour la norme, il s'agit de la cversion Strict de l'XHTML. Je crois que le transitional le permet encore.

Reply

Marsh Posté le 30-08-2007 à 09:52:27    

Merci à tous pour vos réponses.
 
Je ne comprends pas ce qu'il s'est passé car en testant le script dans le navigateur aujourd'hui tout marchait. Avec "" ou ''. Tant mieux.
 
J'en ai profité pour initialiser les variables et éviter le fameux "undefined index".
Donc ça donne :

Citation :


           <?
    if (isset($_POST['nom']) && isset($_POST['prenom']))
    {
    echo $_POST['nom'];  
           echo $_POST['prenom'];
    exit;
    }
           ?>


 
Par contre, je souhaitais initialiser les variables avec une méthode que je pensais équivalente mais j'ai un retour "undefined index nom". Donc ou les méthodes ne sont pas équivalentes ou mon code n'est pas bon.
Voici le code :

Citation :


           <?
    if (($_POST['nom'] <> "" ) && ($_POST['prenom'] <> "" ))
    {
    echo $_POST['nom'];  
           echo $_POST['prenom'];
    exit;
    }
          ?>


 
Merci,

Reply

Marsh Posté le 30-08-2007 à 10:01:46    

Reply

Marsh Posté le 30-08-2007 à 10:01:46   

Reply

Marsh Posté le 30-08-2007 à 11:04:29    

>sielfried : j'essaie d'interpréter sslt  :)  
 
Suggères-tu d'utiliser empty à la place de isset ou encore du test d'inégalité?
 
Parce que par exemple !empty vérifie que :
- le champs n'est pas vide
- la valeur n'est pas 0
- et donc que la variable existe
 
Merci
 
 
 
 
 
 
 

Reply

Marsh Posté le 30-08-2007 à 11:44:17    

si tu as un tableau (array) - et c'est aussi valable pour une variable - tu peux vérifier si une clé (ou ladite variable) est définie :

Code :
  1. if (isset($array['key'])) ...
  2. // ou bien pour une variable
  3. if (isset($var)) ...


 
ceci vérifie que ta variable est définie, mais ne vérifie nullement le contenu.
En effet, dire $var = ''; initialise ta variable avec un contenu vide. Elle répondra "true" au isset, mais false si tu testes par rapport à un entier, par exemple (le cas du zéor est différent s'il s'agit d'un string ou d'un entier)
 
Isset n'est pas empty.

Reply

Marsh Posté le 30-08-2007 à 13:09:50    

Dans mon cas, je ne veux pas que le champs nom soit vide ou corresponde à 0, donc il me semble qu'empty est plus approprié qu'isset qui ne vérifierait donc que la variable a bien été initialisée mais peut-être avec une valeur vide.
 
Comment aurait-il fallu écrire ces quelques lignes pour que le test d'inégalité ne renvoie pas l'erreur citée ci-dessous.

Reply

Marsh Posté le 30-08-2007 à 14:07:13    

Merci à ceux qui pourront m'aider de m'indiquer une solution concernant le test d'inégalité du post précédent.
 
Ma prochaine question concerne la mémorisation des informations données par l'utilisateur et le rafraîchissement de la page. En effet je souhaiterais qu'elles s'affichent dans le champs de saisie lorsque l'utilisateur rafraîchira la page.  
Le code que j'ai écris ci-dessous entraîne l'affichage de celles-ci dans le champs de saisie lorsque l'utilisateur envoie la page (!) alors qu'il n'a même pas rafraîchit la page  :pt1cable:  
 

Citation :


 
<form name="petition" method="post" action="petition.php">
 
<table border=0>
   
<!-- Gestion du nom : -->
<?
// Teste que le champs n'est pas vide ou égal à 0
// et que l'utilisateur a déjà appuyé sur le bouton Envoyer pour éviter ainsi l'affichage du message d'erreur  
if ( empty($_POST['nom']) && isset($_POST['envoyerDonnees']) )
{
echo "<font color='#FF0000'> Le nom doit être rempli : </font><br><br>";
}    
?>  
<tr>      
<td> Nom :  
</td>
<td><input type="text" name="nom" size="40" value="<? if (isset($_POST['nom'])) {echo $_POST['nom'];} ?>">
</td>
</tr>
     
<!-- Gestion du prénom : -->
....
 
<tr>
<td>
</td>
<td><input type="submit" name="envoyerDonnees" value="Envoyer">
<input type="reset" name="effacer" value="Effacer">
</td>
</tr>
</table>
</form>
 

Reply

Marsh Posté le 30-08-2007 à 14:12:01    

Pour la mémorisation : variables de session ou champs cachés dans le formulaire.

Reply

Marsh Posté le 31-08-2007 à 10:01:46    

J'ai retenu la solution du champs caché.
 

Citation :


 
...
 
<form name="petition" method="post" action="petition.php">
 
<table border=0>
   
<!-- Gestion du nom : -->
<?
// Teste que le champs n'est pas vide ou égal à 0
// et que l'utilisateur a déjà appuyé sur le bouton Envoyer pour éviter ainsi l'affichage du message d'erreur  
if ( empty($_POST['nom']) && isset($_POST['envoyerDonnees']) )
{
echo "<font color='#FF0000'> Le nom doit être rempli : </font><br><br>";
}    
?>  
<tr>      
<td> Nom :  
</td>
<td><input type="text" name="nom" size="40" >
<!--Mémorisation de la valeur pour prévision rafraichissement de la page -->
<input type="hidden" name="memorisationNom" value="<? if (isset($_POST['nom'])) {echo $_POST['nom'];} ?>" >
</td>
</tr>
     
<!-- Gestion du prénom : -->
 
...
 
<td><input type="submit" name="envoyerDonnees" value="Envoyer">
<input type="reset" name="effacer" value="Effacer">
</td>
</tr>
</table>
</form>
 
...
 


 
Lorsque je valide le formulaire et que je reviens en arrière, le nom rentré par l'utilisateur apparait bien mais les données du prenom, du mél aussi alors que je n'ai même pas ajouté encore d'éléments hidden pour ces variables

Reply

Marsh Posté le 31-08-2007 à 10:50:48    

lousixtyfour > C'est le comportement par défaut de ton navigateur quand on fait "page précédente" (ou qu'on clique sur le bouton "Reculer d'une page" ou qu'un script javascript renvoie à la page précédente de l'historique du navigateur) .
 
PHP n'a rien à voir avec ça.

Reply

Marsh Posté le 31-08-2007 à 11:12:17    

J'ai exactement le même résultat sous Firefox que sous IE.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed