Formulaire GET dans fichier PHP - PHP - Programmation
Marsh Posté le 20-08-2007 à 13:36:49
quel os, quel environnement d'exécution (easyphp, wamp, lamp...), quel code source? On est pas "Mme Irma la boule" ici
Marsh Posté le 20-08-2007 à 16:03:36
Ton hébergeur accepte le php ?
SI tu es en local, comme dit rufo il nous faut plus d'infos, tu utilises easyphp ?
Marsh Posté le 21-08-2007 à 08:42:02
Oui, pardon pour le manque d'infos.
Jsuis en local, easy php.
Quel code source ? C'est à dire ?
Marsh Posté le 21-08-2007 à 16:33:05
Bonjour, je me permet de te contacter car j'ai un souci qui est semblable à celui que tu as déjà aidé à traiter.
j'ai crée un formulaire de trois page ( ou plutot divisé mon formulaire en trois pages).
La première étant une page html, et les deux autres des pages uniquement les balises <?php et ?> et tout le reste en html. Pour finir un fichier (i essentiellement en php) effectuant le traitement des réponses données par les utilisateurs.
Je butte sur la récupération des variables contenant les réponses de l'utilisateur. J'ai essayé la méthode post comme tu le conseillais mais sans succès. Pourrais tu jetter un coup d'oeil à mon code et me dire ce que tu en pense? Merci d'avance.
p.s: je suis novice en php
-------------
script de la 3ème page de mon formulaire:
----------------
<? php
?>
<html>
<head>
<title>QR</title>
</head>
<body>
<div>
<form name="qqqqqq3.htm" action="compl11_quizz.php" method="post" />
<input type="hidden" name="Q1" value="$_POST['Q1']"/>
<input type="hidden" name="Q2" value="$_POST['Q2']"/>
<u>question 3.</u> 5 + 7 = ?<br/>
<input type="radio" name="Q3" value="a" />7
<input type="radio" name="Q3" value="b" />5
<input type="radio" name="Q3" value="c" />ezuod
<input type="radio" name="Q3" value="d" />12
<br/>
<input type="submit" value="soumettre" />
<form>
</div>
</body>
</html>
---------------------
script du fichier php:
---------------------
<?php
$question1= $_POST['Q1'];
$question2= $_POST['Q2'];
$question3= $_POST['Q3'];
?>
<html>
<head>
<title>Résultat du quiz HTML</title>
</head>
<body>
<?php
echo "<h1><center> Bonjour </center></h1>";
echo "<div align=\"center\"><h1>Résultat du quiz pour $name</h1></div>";
echo "<hr>";
$max_score = 3;
// définition des bonnes réponses
$correct1 = "b"&&"c";
$correct2 = "a";
$correct3 = "d";
// On cré une variable $score qu'on initialise à 0
$score = 0;
if ($question1 == $correct1) {
$score += 1;
// cette dernière ligne est exactement équivalente
// à "$score = $score + 1;" ou à "$score++;"
}
if ($question2 == $correct2) {
$score += 1;
}
if ($question3== $correct3) {
$score += 1;
}
// le score au sujet
if ($score <= 1) {
echo "<p>Vous avez $score réponse juste sur $max_score</p>\n";
} else {
echo "<p>Vous avez $score réponses justes sur $max_score</p>\n";
}
echo "Merci de votre participation $name\n";
?>
<!-- lien de retour vers le quiz -->
<hr>
<a href="qqqqqq.htm">Revenir au quiz</a> // qqqqqq.htm est la première page de mon formulaire
<hr>
</body>
</html>
Marsh Posté le 22-08-2007 à 09:38:15
Pour info dans <form name="qqqqqq3.htm" action="compl11_quizz.php" method="post" />, l'attribut name n'attend pas une url mais un simple nom (ex : name="MonForm" )
sinon, mettre <? php
?>, ça sert à rien si ce n'est faire prendre du temps à php
<input type="hidden" name="Q1" value="$_POST['Q1']"/>
<input type="hidden" name="Q2" value="$_POST['Q2']"/>
ça risque pas de marcher car $_POST est une variable super globale de php, donc vu que cette portion de code n'est pas entre <? php ... ?>, elle ne va pas être interprétée. Tu vas donc te retrouver dans $question1 la chaîne de caractère suivante : "$_POST['Q1'] ".
Par ailleurs, $correct1 = "b"&&"c"; ne faut sûrment pas ce que tu penses. Là, ça fait un ET logique entre la chaîne "b" et "c", castées en entier pour le coup. Il faut donc que dans ton html, tu aies déclarée ton input de type checkbox avec name="Q1[]" pour tous tes cases à cocher (mais avec une valeur différente) et $correct1 doit être un tableau qui va contenir les bonnes réponses.
ps : prochain, coup, ne vampirise pas un topic créé par un autre et merci d'utiliser les balises code pour ton code.
Marsh Posté le 22-08-2007 à 09:50:05
C'est noté, je vais essayé ca tout de suite.
Merci pour la rapidité de ta réponse.
Marsh Posté le 22-08-2007 à 11:05:16
Un truc que rufo n'a pas remarqué :
Citation : <form name="qqqqqq3.htm" action="compl11_quizz.php" method="post" /> |
signifie "j'ai un formulaire tout vide (la balise form est fermé par le / situé avant le > ce qui fait que tout ce qui vient ensuite est considéré comme étant en dehors de ce formulaire.
D'ailleurs ton "<form>" qui vient plus bas indique que tu ouvres un autre formulaire (que tu ne refermes d'ailleurs jamais) et auquel tu ne donnes aucune propriété (pas de nom, pas d'adresse de validation, ...) la balise de fermeture d'un formulaire est "</form>" (même principe que pour le "<title>" et "</title>" )
Marsh Posté le 22-08-2007 à 11:17:20
Rebonjour,
j'ai essayé de mettre tout le script de mon formulaire entre des balises <?php...?> de façon à ce que "$_POST['Q1']" soit interprété, mais ca ne marche pas, je ne comprends pas pourquoi.
Avez vous une suggestion??
Merci d'avance.
Marsh Posté le 22-08-2007 à 11:45:18
T'as corrigé TOUT ce qu'on t'as signalé? Si c'est pas le cas, c'est normal que ça marche pas. Repostes ton code ici pour qu'on voit
>omega2 : très juste, ça m'avait échappé. A force de faire du html, on voit les balises sans les lire vraiment. Saleté de cerveau qui corrige tout seul!
Marsh Posté le 22-08-2007 à 11:49:25
c'est un poil plus complexe que ça ...
Soit tu fais ton formulaire en HTML, soit intégralement en PHP.
soit tu fais
Code :
|
(en enregistrat ceci dans un fichier .php !)
soit intégralement en php :
Code :
|
Si tu veux en plus respecter le doctype, <form /> n'existe pas, et input se finit soit par > (HTML) soit par /> (XHTML).
dans un doctype Strict, le input doit être centenu dans une balise bloc pour ne pas être directement en dessous de <form>.
Marsh Posté le 22-08-2007 à 15:51:49
Un grand merci à toi NewsletTux, ca marche parfaitement. Mon souci maintenant est le cas ou je voudrais retenir plusieurs réponse avec des checkbox, comme indiqué dans le code source ci-dessus.
j'ai bien essayé "$correct1[] = array(bc);" pour la créatioon de mon tableau, et déclaré mes checkbox comme suit: <input type="checkbox" name="Q1[]" value="a" />5. Mais ca ne marche pas.
Merci d'avance pour votre réponse
Marsh Posté le 22-08-2007 à 16:02:44
eh, faudrait un peu apprendre la syntaxe de php avant de se lancer dans le codage
c'est ça qu'il faut mettre : $correct1 = array("b", "c" );
ou alors :
$correct1[] = "b";
$correct1[] = "c";
Marsh Posté le 22-08-2007 à 16:30:23
Merci pour ta réponse, j'avais réglé ce pb, mon souci actuel concerne plutot la récupération des valeurs de la checkbox d'une page à l'autre du formulaire et dans le script php.
Merci d'avance
Marsh Posté le 22-08-2007 à 21:56:10
Re,
soit tes checkboxes ont une valeur soit pas : <input type="checkbox" name="lambda" /> et <input type="checkbox" name="delta" value="15" />
Dans le premier cas, en faisant un echo $_POST['lambda']; puisqu'il n'y a pas de value c'est l'état qui sera envoyé : soit rien ($_POST['lambda'] n'existera pas) si la case n'est pas cochée, soit le texte "on" si elle est cochée.
Dans le 2nd cas, une value est envoyée si la case est cochée. Donc soit la case n'est pas cochée et $_POST['delta'] n'existe pas, soit la case est cochée et $_POST['delta'] == 15.
Pour savoir si cochée, tu peux faire un isset($_POST['lambda']) ...
Marsh Posté le 22-08-2007 à 21:56:55
pardon, je viens de me rappeler que ta méthode de formulaire est get dans le titre du sujet, donc il faut comprendre $_GET et non $_POST, mais le principe est exactement le même.
Marsh Posté le 26-08-2007 à 19:23:27
Merci beaucoup pour ta réponse NewsletTux.
Le souci que je rencontre est que j'arrive à récupérer les resultats des cases à cocher à choix unique mais pas à choix multiple.
Et je m´y prend pourtant comme ci-dessous, pour la première page
<input type="checkbox" name="Q1[]" value="a" />5.
Merci d'avance
Marsh Posté le 26-08-2007 à 20:16:36
et si, au moment de traiter ton formulaire, tu faisais un :
Code :
|
Tu verras toutes les variables que tu récupères ainsi que leur valeur ...
Valable aussi pour $_POST.
Pour voir le type des variables, fais :
Code :
|
Mais print_r peut être largement suffisant.
Tu verras si réellement toutes tes valeurs sont envoyées, si tel est le cas c'est que tu les as mal récupérées.
Marsh Posté le 26-08-2007 à 21:27:34
Merci, je testerais ca dès demain sur le pc dédié.
Je récupère les données grace á:
"<input type="hidden" name="Q1[]" value="<?php echo $_POST['Q1[]'];?>"/>
<input type="hidden" name="Q2" value="<?php echo $_POST['Q2'];?>"/> "
J´ai essayé Q1[] et Q1 sans succès, penses tu que je mý prend mal?
Marsh Posté le 26-08-2007 à 21:48:19
si tu fais un formulaire en méthode "get", pourquoi remplir les champs cachés par du $_POST ?
cela suppose que pour arriver à ce formulaire, tu as déjhà envoyé un formulaire par méthode post, c'est ça ?
le print_r($_GET) te donnera la syntaxe exacte de tes variables pour les récupérer.
Marsh Posté le 27-08-2007 à 11:10:39
Bonjour NewsletTux,
en fait j'utilise la méthode post pour le traitement comme pour l'envoie de mon formulaire.
J'ai testé le "print_r($_GET);" et cela m'affiche "Array()". Je ne comprends pas du tout pourquoi mes variables ne sont pas récupérées.
Merci pour ton aide.
Marsh Posté le 27-08-2007 à 11:26:46
on vient de te le dire! C'est pas la peine de faire un print_r($_GET) puisque dans dans ton <form>, t'as mis method="post". Donc faut faire un print_r($_POST);
Je pense que NewsletTux a été induit en erreur par le titre du topic que t'as squatté
Peux tu reposter ton code source pour vérifier que t'as bien appliqué les modifs qu'on t'as signalé plus haut. Parce que j'ai l'impression que tu maîtrises pas trop le processus de soumission de formulaires
Marsh Posté le 27-08-2007 à 11:51:07
désolé, j'avais fait un "print_r($_POST)" et j'ai obtenu
"Array ( [Q1] => Array ( [0] => ) [Q2] => a [Q3] => d )", comment récupérer la réponse de la question 1???
Marsh Posté le 27-08-2007 à 12:08:03
Bonjour,ci-dessous le code pour la troisième page du formulaire ainsi que la page de traitement du formulaire.
Merci d'avance.
<code>
<html>
<head>
<title>QR</title>
</head>
<body bgcolor="gray">
<div>
<form name="qqqqqq3.php" action="compl11_quizz.php" method="post" >
<input type="hidden" name="Q1[]" value="<?php echo $_POST['Q1[]'];?>"/>
<input type="hidden" name="Q2" value="<?php echo $_POST['Q2'];?>"/>
<u>question 3.</u> 5 + 7 = ?<br/>
<input type="radio" name="Q3" value="a" />7
<input type="radio" name="Q3" value="b" />5
<input type="radio" name="Q3" value="c" />ezuod
<input type="radio" name="Q3" value="d" />12
<br/>
<input type="submit" value="soumettre" />
</form>
</div>
</body>
</html>
</code>
<code>
<?php
$question1= $_POST['Q1[]'];
$question2= $_POST['Q2'];
$question3= $_POST['Q3'];
?>
<html>
<head>
<title>Résultat du quiz </title>
</head>
<body>
<?php
print_r($_POST);
echo "<h1><center> Bonjour </center></h1>";
echo "<div align=\"center\"><h1>Résultat du quiz pour $name</h1></div>";
echo "<hr>";
$max_score = 3;
// définition des bonnes réponses
$correct1 = array("b","c" );
$correct2 = "a";
$correct3 = "d";
[Q1] => Array ( [0] => )
// On cré une variable $score qu'on initialise à 0
$score = 0;
// Puis on fait le test pour chaque question
// ATTENTION : une erreur classique de programmation
// est d'utiliser l'opérateur d'assignation (=)
// au lieu de l'opérateur de comparaison (==) dans un "if"
if ($question1[1] == "b" AND $question1[2] == "c" ){
$score += 1;
// cette dernière ligne est exactement équivalente
// à "$score = $score + 1;" ou à "$score++;"
}
// Et on recommence la même chose pour chaque question
if ($question2 == $correct2) {
$score += 1;
}
if ($question3== $correct3) {
$score += 1;
}
// on peut maintenant donner le score au sujet
// si le score et de 0 ou de 1 on affiche "réponse juste"
// s'il est supérieur, on affiche "réponseS justeS"
if ($score <= 1) {
echo "<p>Vous avez $score réponse juste sur $max_score</p>\n";
} else {
echo "<p>Vous avez $score réponses justes sur $max_score</p>\n";
}
// on donne au sujet son niveau en fonction du score
// 0-1 => très faible.
// 2-3 => bon.
// 4 => excellent.
if ($score <= 1) {
echo "<p>Vous avez un niveau très faible en HTML</p>\n";
} elseif ($score > 1 AND $score < 3) {
echo "<p>Vous avez un bon niveau en HTML</p>\n";
} elseif ($score == 3) {
echo "<p>Vous avez un excellent niveau en HTML</p>\n";
}
echo "Merci de votre participation $name\n";
?>
<!-- lien de retour vers le quiz -->
<hr>
<a href="qqqqqq.htm">Revenir au quiz</a>
<hr>
</body>
</html>
</code>
Marsh Posté le 27-08-2007 à 12:10:22
<input type="hidden" name="Q1[]" value="<?php echo $_POST['Q1[]'];?>"/> n'est pas valide. Faut écrire :
<input type="hidden" name="Q1[]" value="<?php echo implode(", "$_POST['Q1']);?>"/>
faut sérialiser le tableau, sinon, dans $_POS["Q1"], tu vas avoir "array".
Marsh Posté le 27-08-2007 à 12:12:42
déjà dis :
<form name="qqqqqq3.php" action="compl11_quizz.php" method="post" >
name attend un NOM de formulaire, pas une URL! (ex : name="MonForm" )
if ($question1[1] == "b" AND $question1[2] == "c" ){
vaut mieux écrire
if (($question1[1] == "b" ) && ($question1[2] == "c" )){
Marsh Posté le 27-08-2007 à 12:20:00
Je viens de l tester ta solution et le "print_r($_POST);" me renvoie Array ( [Q1] => Array ( [0] => a [Q3] => d ), le ne comprends pas bien ce à quoi cela correspond. Pourrais tu m'en dire plus?
Merci
Marsh Posté le 27-08-2007 à 12:32:11
t'as mis ça dans ton code?
<input type="hidden" name="Q1[]" value="<?php echo implode(", "$_POST['Q1']);?>"/>
Marsh Posté le 27-08-2007 à 14:44:06
oui, j'ai remplacé mes champs cachés par :
"<input type="hidden" name="Q1[]" value="<?php echo implode(", "$_POST['Q1']);?>"/> "
Marsh Posté le 27-08-2007 à 14:50:15
Question : vu que tu ne mets qu'une seule réponse dans Q1, Q2 ... pourquoi est ce que tu mets des crochets dans leur nom html?
Enlève moi ces crochets (vu que ça n'est pas des réponses multiples que tu attends) et vire tous les implodes (qui ne servent plus à rien désormais)
Marsh Posté le 27-08-2007 à 14:53:00
Bonjour omega2,
je n'ai pas de souci pour récupérer les réponses simples, mais je n' arrive pas à récupérer les réponses multiples. Les crochets ont donc ici tout lieu d'être.
Marsh Posté le 27-08-2007 à 14:53:22
Regarde le code source ...
Que tu fasses un print_r($_GET) ou un print_r($_POST), tu auras exactement la même syntaxe, c'est *juste* le nom du tableau (GET ou POST) qui change.
Une fois que tu as vu le code source, tu vois chaque variable du tableau $_GET (ou $_POST) et sa valeur.
Soit la valeur est "unique", c'est un chiffre, un texte... soit c'est un tableau. (oui, un tableau dans un tableau)
Concrètement, voici un exemple de code source après un print_r($_GET) :
Code :
|
Voilà, et là tu vois tout de suite que la clé "dimensions" a pour valeur un tableau (c'est ce qui se passe avec ton Q1.)
Pour récupérer ça, il faut faire $_GET['dimensions']['hauteur'] ou $_GET['dimensions']['largeur']...
(pareil dans le cas d'un $_POST)
Si tu n'affiches pasd le code source tu ne verras pas le tableau de manière pratique ... Tu verras un Array( avec en ligne toutes les valeurs, ce qui est illisible. Regarde le code source, la réponse se trouve dedans.
PS : soit dit en passant, c'est pas très malin de squatter un topic où l'on parle de méthode GET pour ton échantillon en méthode POST mais bon
Marsh Posté le 27-08-2007 à 15:40:17
Bonjour NewsletTux,
j'ai bien utilisé
Code :
|
pour les entrées cachées, cependant le code source après
Code :
|
me renvoie
Code :
|
et quand j'essaye de récupérer la valeur via
Code :
|
je n'ai rien, non plus.
Merci d'avance
Marsh Posté le 27-08-2007 à 18:27:49
c'est pas <input type="hidden" name="Q1[]" value="<? php echo implode(", "$_POST['Q1']);?>"/>
c'est <input type="hidden" name="Q1[]" value="<? php echo implode(", ", $_POST['Q1']);?>"/>
faut faire attention quand tu recopies du code!
Marsh Posté le 27-08-2007 à 18:51:13
omega2> rufo l'a fait pour voir si veusti suivait
veusti m'a envoyé un mp avec le résultat du print_r : à la valeur Q1 est associée la chaine de caractères "<?php echo ... ; ?>" donc je pense que déjà dans le formulaire si le php n'est pas interprété c'est qu'il y a erreur.
Marsh Posté le 27-08-2007 à 19:08:56
NewsletTux > Si tu regardes bien, il n'y avait pas d'espace dans la discution avant 15h et il en est apparut un spontanément dans le message suivant de veusti1.
Marsh Posté le 28-08-2007 à 00:12:19
Bonsoir,
j'ai essayé de transférer les champs cachés avec
Code :
|
et j'obtiens
Code :
|
.
Par contre quand j'initialise question1 de la sorte :
Code :
|
je n'arrive pas à évaluer correctement la réponse de l'utilisateur via:
Code :
|
.
Il ne prend pas en compte la réponse.
Merci, d'avance pour vos réponses
Marsh Posté le 20-08-2007 à 11:51:54
Bonjour,
Je travaille sur un site en php, sur une page PHP donc. J'aimerais ajouter à cette page un formulaire, ou tout autre moyen permettant d'executer un autre fichier PHP en envoyant une valeure.
Cela fonctionne très bien si je fait mon forumaire via une page HTML mais ne fonctionne pas en PHP.
Merci par avance.
P.S. : je débute en php.