Formulaire

Eléphanteau du PHP | 24 Messages

01 mars 2008, 11:16

Bonjour

je souhaite ajouter dans une page web un morceau de formulaire où l'internaute devra saisir une donnée dans un champs. Suivant la réponse qui aura été saisi, je voudrais que l'action "action.php"
me renvoit soit vers une nouvelle page (si la réponse est bonne) soit rester sur la même page.

Jai écris le code de mon formlaire (cf cidessous)

Code : Tout sélectionner

<form name=formulaire method=post action=action.php> Saisir une réponse :<br><br> <input type=text size=30 name=saisie><br><br> <input type=submit value='Valider'></form>
mais je ne sais pas quoi mettre comme code dans le fichier [color=violet]action.php[/color].

Merci d'avance de votre aide qui sera la bienvenue.

Petit nouveau ! | 3 Messages

01 mars 2008, 11:35

Tu peux essayer ça :
<?php

if (isset($_POST["reponse"] &&  $_POST["reponse"] == "labonnereponse" )
{
   header("Location:verslebonfichier.php"); /// ou affichage d'un message de felicitations dans ce fichier
}
else
{
   echo " mauvaise reponse ";
}  

?>
sauf que c'est intule de faire 3 fichiers pour ça .
je te conseille de mettre ce petit bout de code en haut de ton formulaire et de mettre formulaire.php dans ton action au lieu de action.php

comme ça tu economises un fichier
donc voici ton nouveau fichier

<?php

if (isset($_POST["reponse"] &&  $_POST["reponse"] == "labonnereponse" )
{
   header("Location:verslebonfichier.php");
}
else
{
  header("Location:monformulaire.php");
}  

form name=formulaire method=post action="monformulaire.php">
Saisir une réponse :<br><br>
<input type=text size=30 name=saisie><br><br>
<input type=submit value='Valider'></form>

?>


voila

Eléphanteau du PHP | 24 Messages

01 mars 2008, 12:00

Merci pour ta réponse, je vais aller tester tout ca :)

Eléphanteau du PHP | 24 Messages

01 mars 2008, 12:49

J'obtiens ce message d'erreur

Parse error: parse error, expecting `','' or `')'' in c:\weblocal\site1\www\text.php on line 3

par contre je narrive pas à situer où il manque quelquechose :/

merci d'avance.

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

ViPHP
ViPHP | 4674 Messages

01 mars 2008, 13:51

Il manque une parenthèse dans la première condition pour le isset ... Il faudrait lire les erreurs, ça irait mieux.

Merci de mettre en page vos codes source à l'aide des balises

Code : Tout sélectionner

et [php], pour une meilleur lisibilité.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphanteau du PHP | 24 Messages

01 mars 2008, 14:05

Merci, jai fini par trouver où il manquait la paranthèse, voici donc mon code :

Code : Tout sélectionner

<?php if (isset($_POST["reponse"]) && ($_POST["reponse"]) == "labonnereponse" ) { header("Location:verslebonfichier.php"); } else { header("Location:monformulaire.php"); } <form name=formulaire method=post action=monformulaire.php> Saisir une réponse :<br><br> <input type=text size=30 name=saisie><br><br> <input type=submit value='Valider'> </form> ?>
par contre jobtiens toujours un message d'erreur :
Parse error: parse error in c:\weblocal\site1\www\monformulaire.php on line 11
et cette fois ci je ne vois pas ce qui peut manquer.
merci d'avance pour laide que vous m'apporter.

ViPHP
ViPHP | 4674 Messages

01 mars 2008, 14:15

Je te conseille d'apprendre le PHP.
PHPFrance n'est pas là pour écrire les scripts à ta place et l'erreur est tellement flagrante que je remarque que tu ne fais pas beaucoup d'effort pour comprendre.
PHP génère de l'HTML, il faut donc l'afficher, à l'aide de echo par exemple. Dans ton cas, la façon la plus rapide est de couper la partie PHP et de laisser HTML s'afficher, ce qui revient à faire :
<?php 

if (isset($_POST['reponse']) && $_POST['reponse'] == 'labonnereponse')
    header('Location: verslebonfichier.php');
else
    header('Location: monformulaire.php');

?>
<form name="formulaire" method="post" action="monformulaire.php">
  <p><label for="saise">Saisir une réponse&nbsp;:</label>
     <input type="text" id="saisie" name="saisie" size="30" /></p>
  <p><input type="submit" name="soumission" value="Valider" /></p>
</form>
J'en ai profité pour nettoyer le code PHP et l'HTML. Je te laisse comprendre les modifications ; si tu ne comprends pas tout, n'hésite pas à me demander, mais il faut que tu apprennes par toi-même :).

Mais commence par apprendre le PHP, tu verras ce n'est pas si compliqué. Va jeter un oeil sur PHPDebutant ou SiteDuZero.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphanteau du PHP | 24 Messages

01 mars 2008, 15:17

Merci pour tes modifications apportées.
Je débute dans l'univers PHP, et j'avoue que j'ai un peu de mal à m'y faire.

Je pense avoir saisis l'ensemble des modifs que tu as faites
PAr contre je ne comprends pas pour quoidans le isset on met deux fois

Code : Tout sélectionner

$_POST['reponse']
J'ai donc repris le code que tu ma fournit et jai encore quelques soucise et quelques questions :
Si tu pouvais simplement m'aiguiller sur la direction à prendre, sans toutefois me donner la réponse, je ten serais reconnaissant.
1/dans le code

Code : Tout sélectionner

if (isset($_POST['reponse']) && $_POST['reponse'] == 'labonnereponse')
la seule variable que je modifie est bien 'labonnereponse' ?

2/ mon champs de saisi s'affiche bien mais qu'elle que soit la reponse que je saisi, il ne charge pas

Code : Tout sélectionner

header('Location: verslebonfichier.php');
3/Jobtiens ce message : Warning: Cannot modify header information - headers already sent by (output started at c:\weblocal\site1\www\test2.php:4) in c:\weblocal\site1\www\test2.php on line 9qui s'affiche avant le formulaire.

Encore grandement merci pour l'aide et même si jai du mal j'essai de my mettre et de comprendre.

ViPHP
ViPHP | 4674 Messages

01 mars 2008, 15:32

On y va pas à pas.
if (isset($_POST['reponse']) && $_POST['reponse'] == 'labonnereponse')
Qu'est-ce que ça veut dire ?
Avant de tester la valeur d'une variable, il est naturel de savoir si elle est existe, i.e. de savoir si elle est définie (set en anglais), donc on utilise is set, isset().
Le code veut donc dire : si ma variable est définie, et (que l'on peut comprendre par un et alors aussi, voir les propriétés du && pour ça, ça se comprend bien [1]) que sa valeur vaut 'labonnereponse', alors ...

Donc si tu veux qu'on exécute le block d'instructions du if, il faut que la variable soit définie, et que sa valeur soit 'labonnereponse'. C'est donc la partie à modifier oui.

Si tu veux qu'il aille vers monformulaire.php, une des deux conditions doit être fausse.

À propos de ton header sur les en-têtes, va jeter un oeil dans la documentation pour la fonction header. Une en-tête doit toujours être placée avant des sorties (echo, écriture d'HTML, ligne blanche etc.), grosso modo en début de page. Pour contourner le problème, tu peux soit placer tes headers en début de page, soit utiliser les tampons (buffer). La documentation explique tout ça à l'exemple 6 du lien ci-précédent.


[1] : Le && (et logique) fonctionne comme ça : si la première condition vaut true (vrai), alors on passe à la seconde condition et ainsi de suite. Donc on comprend facilement qu'il suffit d'un false pour ne pas évaluer la suite de l'expression. Ainsi si la variable n'est pas définie, on ne testera pas sa valeur.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphanteau du PHP | 24 Messages

01 mars 2008, 15:50

Merci je vais essayer de creuse tout ca.
Je vais dabord voir pour creer ma variable et la définir.
Et ensuite pour le pb de header.
encore merci.

Eléphanteau du PHP | 24 Messages

05 mars 2008, 14:35

Bonjour,

apres quelques jours de recherche je suis arrivé au résultat escompté :
voici la partie de code en php

Code : Tout sélectionner

<?php if (isset($_POST['reponse'])) { if ($_POST['reponse'] == 'reponse') header('Location: bravo.php'); else header('Location: index.php');}
Par contre si la réponse attendu est par exemple "réponse" mais que le mot "reponse" ou "Réponse" est saisi, est-ce que je dois imbriquer des if dans mon code comme suivant :

Code : Tout sélectionner

<?php if (isset($_POST['reponse'])) { if ($_POST['reponse'] == 'reponse') header('Location: bravo.php'); else { if ($_POST['réponse'] == 'réponse') header('Location: bravo.php'); else { if ($_POST['Réponse'] == 'Réponse') header('Location: bravo.php'); header('Location: index.php'); }}}
où existe t-il un code qui permet d'ignorer la case des caractères ?

Merci d'avance.
Bonne journée.

d0m
Mammouth du PHP | 1141 Messages

05 mars 2008, 14:39

tu peux faire ta propre fonction
- utilisant strtolower() pour mettre tous les caractères en minuscule
- utilisant replace pour remplacer tous les caractères accentués

Tu n'auras plus qu'à appliquer cette fonction à l'entrée avant le test :
if (ma_fonction($_POST['reponse']) == 'reponse')

Eléphanteau du PHP | 24 Messages

05 mars 2008, 14:56

tu peux faire ta propre fonction
- utilisant strtolower() pour mettre tous les caractères en minuscule
- utilisant replace pour remplacer tous les caractères accentués

Tu n'auras plus qu'à appliquer cette fonction à l'entrée avant le test :
if (ma_fonction($_POST['reponse']) == 'reponse')
merci,

jai bien compris pour la fonction strtolower(), par contre je ne vois pas pour celle qui remplace les caractères accentués :( peut tu me donner son nom stp ?

merci d'avance.

d0m
Mammouth du PHP | 1141 Messages

05 mars 2008, 15:00

me souvenais plus vraiment du nom de la fonction...

c'est la fonction strtr

Eléphanteau du PHP | 24 Messages

05 mars 2008, 16:33

Jai bien compris le principe de strtolower, mais je narrive pas à l'appliquer correctement :

Code : Tout sélectionner

<?php if (strtolower($_POST['reponse'])) { if ($_POST['reponse'] == 'paris') header('Location: paris.php'); else { if ($_POST['reponse'] == 'Paris') header('Location: paris.php'); else header('Location: bowling2.php'); }} ?>
jai remplacé le isset() par strtolower() :
si je saisis Paris je pars bien sur paris.php,
si je saisis paris je pars bien aussi sur paris.php,
par contre si je saisis PARis je reste sur bowling2.php. :?: :idea: