Formulaire GET dans fichier PHP

Formulaire GET dans fichier PHP - PHP - Programmation

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.

Reply

Marsh Posté le 20-08-2007 à 11:51:54   

Reply

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 :o


Message édité par rufo le 20-08-2007 à 13:37:36
Reply

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 ?

Reply

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 ?

Reply

Marsh Posté le 21-08-2007 à 08:53:52    

ben le code de ton script

Reply

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>

Reply

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.
 
 

Reply

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.  

Reply

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>" )

Reply

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.

Reply

Marsh Posté le 22-08-2007 à 11:17:20   

Reply

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! :D

Reply

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 :
  1. <form id="machin" method="post" action="...">
  2. <input type="text" name="lambda" value="<?php echo $lambda; ?>" />
  3. ...
  4. </form>


(en enregistrat ceci dans un fichier .php !)
 
soit intégralement en php :

Code :
  1. echo ' <form id="machin" method="post" action="...">';
  2. echo '  <input type="text" name="lambda" value="'.$truc.'" />';
  3. [...]
  4. echo '</form>';


 
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>.


Message édité par NewsletTux le 22-08-2007 à 21:57:39
Reply

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

Reply

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  :pfff:  
c'est ça qu'il faut mettre : $correct1 = array("b", "c" );
ou alors :
$correct1[] = "b";
$correct1[] = "c";

Reply

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

Reply

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']) ...

Reply

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.

Reply

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

Reply

Marsh Posté le 26-08-2007 à 20:16:36    

et si, au moment de traiter ton formulaire, tu faisais un :
 

Code :
  1. <?php
  2.     print_r($_GET);
  3. ?>


 
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 :
  1. <?php
  2.     var_dump($_GET);
  3. ?>


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.

Reply

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?
 

Reply

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.

Reply

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.

Reply

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é :o  
 
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 :/

Reply

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???

Reply

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>

Reply

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".

Reply

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" )){

Reply

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

Reply

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']);?>"/>

Reply

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']);?>"/> "

Reply

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)

Reply

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.

Reply

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 :
  1. Array(
  2.     [valeur1] => 15
  3.     [nom] => Tux
  4.     [nature] => Manchot
  5.     [famille] => Linux
  6.     [dimensions] => Array(
  7.                                [largeur] => 19
  8.                                [hauteur] => 23
  9.                           )
  10.     [couleur_palmes] => orange
  11. )


 
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 :P

Reply

Marsh Posté le 27-08-2007 à 15:40:17    

Bonjour NewsletTux,  
j'ai bien utilisé  
 

Code :
  1. <input type="hidden" name="Q1[]" value="<? php echo implode(", "$_POST['Q1']);?>"/>


 
pour les entrées cachées, cependant le code source après  
 

Code :
  1. print_r($_POST);


 
me renvoie  
 

Code :
  1. Array(    [Q1] => Array        (            [0] => <? php echo implode(        )     [Q2] => a    [Q3] => d)


 
 
 
et quand j'essaye de récupérer la valeur via  
 

Code :
  1. $question1=$_POST['Q1']['0'];


 
je n'ai rien, non plus.  
Merci d'avance

Reply

Marsh Posté le 27-08-2007 à 15:40:39    

au fait j'ai créer un post mais pas de rép

Reply

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!

Reply

Marsh Posté le 27-08-2007 à 18:45:19    

Il sort d'où l'espace entre "<?" et "php" ?

Reply

Marsh Posté le 27-08-2007 à 18:51:13    

omega2> rufo l'a fait pour voir si veusti suivait :D
 
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.

Reply

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.

Reply

Marsh Posté le 28-08-2007 à 00:12:19    

Bonsoir,
j'ai essayé de transférer les champs cachés avec  

Code :
  1. <input type="hidden" name="Q1[]" value="<? php echo implode(", ", $_POST['Q1']);?>"/>

et j'obtiens

Code :
  1. Array ( [Q1] => Array ( [0] => b, c ) [Q2] => a [Q3] => d )  avec le <?php print_r($_POST); ?>

.
Par contre quand j'initialise question1 de la sorte :

Code :
  1. $question1= $_POST['Q1']['0'];

je n'arrive pas à évaluer correctement la réponse de l'utilisateur via:

Code :
  1. if ($question1 == array("b","c" )){
  2.   $score += 1;

.
Il ne prend pas en compte la réponse.
Merci, d'avance pour vos réponses

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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