un form qui appele la page où il se trouve

un form qui appele la page où il se trouve - PHP - Programmation

Marsh Posté le 29-03-2010 à 01:17:19    

Bonjour à tous,
 
Je suis en train d'essayer d'installer un petit sondage sur mon site et sur la page de création des sondages j'ai une erreur : Notice: Undefined variable: action in C:\wamp\www\test-sondage\poll\creer.php  on line 8
Avec mes maigres connaissances en php je comprend qu'il manque la définition de la variable $action, mais d'un autre coté je ne comprends pas trop le fonctionnement de cette page.  Je crois que le 'create' fait référence au <form method=\"POST\" action=\"creer.php?action=create\">  mais ce qui me parait bizarre c'est que la page s'appelle elle-même!?!
 
J'ai chopé ce code à cette adresse
 
Si quelqu'un voit ce qui ne va pas, je l'écoute avec attention  :ange:  
 
la page en question (creer.php)
<html>
<head>
<title>Créer un sondage</title>
</head>
<body>
<?php
if($action == 'create')
{
include("parametres.php" );
$connexion = mysql_connect("$url_db" , "$login" , "$password" );
$sql = "INSERT INTO sondage VALUES('', '$question', '$reponse1', '$reponse2', '$reponse3', '$reponse4')";
$result = mysql_db_query("$table",$sql,$connexion);
echo("Sondage créé !" );
}
else
{
echo("<form method=\"POST\" action=\"creer.php?action=create\">\n" );
echo("Question : <input type=\"text\" name=\"question\" size=\"20\"><br>\n" );
echo("Réponse 1 : <input type=\"text\" name=\"reponse1\" size=\"20\"><br>\n" );
echo("Réponse 2 : <input type=\"text\" name=\"reponse2\" size=\"20\"><br>\n" );
echo("Réponse 3 (si nécessaire) : <input type=\"text\" name=\"reponse3\" size=\"20\"><br>\n" );
echo("Réponse 4 (si nécessaire) : <input type=\"text\" name=\"reponse4\" size=\"20\"><br>\n" );
echo("<br><input type=\"submit\" value=\"Créer\">\n" );
echo("</form>\n" );
}
?>
</body>
</html>

 
ps: j'ai fait quelques modifications avec le code d'origine mais le résultat est identique.

Reply

Marsh Posté le 29-03-2010 à 01:17:19   

Reply

Marsh Posté le 29-03-2010 à 08:54:01    

if($action == 'create')
 
changez à:
 
if($_POST['action'] == 'create')


---------------
J'apprends parler en français alors je ferai des erreurs. S'il vous plaît corrigez-moi :)
Reply

Marsh Posté le 29-03-2010 à 10:41:48    

Heu non, il faut rajouter  

Code :
  1. $action = $_GET['action'];


 
ce qui donne :

Code :
  1. <html>
  2. <head>
  3. <title>Créer un sondage</title>
  4. </head>
  5. <body>
  6. <?php
  7. $action = $_GET['action'];
  8. if($action == 'create')
  9. {


 
la valeur de 'action' est transmise par l'adresse

Reply

Marsh Posté le 29-03-2010 à 11:40:27    

L'auteur du script creer.php avait probablement sa variable register_global à ON sur son serveur :/ Faut plus faire ça de nos jours.
 
Sinon, un bon petit soft GPL de sondage en PHP/MySQL, c'est Nabopoll ;)


Message édité par rufo le 29-03-2010 à 11:40:45

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 29-03-2010 à 16:54:51    

aspirateur a écrit :

Heu non, il faut rajouter  

Code :
  1. $action = $_GET['action'];


 
ce qui donne :

Code :
  1. <html>
  2. <head>
  3. <title>Créer un sondage</title>
  4. </head>
  5. <body>
  6. <?php
  7. $action = $_GET['action'];
  8. if($action == 'create')
  9. {


 
la valeur de 'action' est transmise par l'adresse


 
Ahh, d'accord.
 
$action = $_GET['action'];
 
dois être:
 
$action = $_POST['action'];


---------------
J'apprends parler en français alors je ferai des erreurs. S'il vous plaît corrigez-moi :)
Reply

Marsh Posté le 29-03-2010 à 18:17:48    

AJW256 a écrit :


 
Ahh, d'accord.
 
$action = $_GET['action'];
 
dois être:
 
$action = $_POST['action'];


 
 :non: pas post, get
 
Le formulaire est passé en POST, mais "action" est passé en GET dans l'url appelée par le formulaire. Donc c'est bien $_GET['action'].

Reply

Marsh Posté le 29-03-2010 à 18:46:54    

Merci à vous pour vos réponses!
 
En effet "action" doit être passé en GET et non en POST comme j'ai pu m'en apercevoir. J'ai fait cette modification ainsi que plusieurs autres, j'ai du passer toutes les variables en POST et modifier les connexions à la db, le problème c'est que l'ensemble du code est obsolète!
 
J'ai beau chercher partout un script récent pour faire des sondages je ne trouve rien. Pour ce qui est de nabopoll la dernière maj date de décembre 2003 ! Donc c'est même pas la peine de tenter le coup.  :(  
 
J'ai essayé Advanced Poll qui est très bien (voir le site officiel) mais hélas un poil obsolète (plein de fonctions à remplacer pour que ça fonctionne correctement) de plus son avantage est aussi son inconvénient : il est complet donc moins facile à utiliser pour l'utilisateur néofite. J'ai du abandonner cette solution pourtant prometteuse car les utilisateurs du site que je construis (des restaurateurs) ne connaissent rien à la programmation et cela doit être le plus simple possible, sans un bout de code à coller.  
 
Bref tout ça pour dire qu'il est difficile de trouver un système de sondage fiable (avec cookies pour éviter le vote à la chaine), facilement paramétrable (avec un vrai Back Office), insérable en quelques clics (pas de changement à la main du code pour chaque nouveau sondage) et assez récent (donc pas en php 3)  ;) .
 
Je sais que ça fait beaucoup mais si vous connaissez un outil qui ressemble à cette description, je vous serais reconnaissant de me le faire découvrir. :D

Reply

Marsh Posté le 29-03-2010 à 18:53:06    

jeff@be a écrit :


 
 :non: pas post, get
 
Le formulaire est passé en POST, mais "action" est passé en GET dans l'url appelée par le formulaire. Donc c'est bien $_GET['action'].


 
Ahh oui, désolé.


---------------
J'apprends parler en français alors je ferai des erreurs. S'il vous plaît corrigez-moi :)
Reply

Marsh Posté le 29-03-2010 à 19:00:21    

J'ai toujours une erreur persistante malgré les changements proposés. Mon erreur est devenue : Notice: Undefined index: action in C:\wamp\www\test-sondage\poll\creer.php  on line 10
 
Vous noterez que c'est maintenant l'index qui est en cause et plus la variable. Je vous laisse mon code tel qu'il est après modification:
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
<meta http-equiv="content-language" content="fr" />
<title>Créer un sondage</title>
</head>
<body>
<?php
$action = $_GET['action'];
if($action == 'create')
{
include("parametres.php" );
mysql_connect("$url_db" , "$login" , "$password" );
mysql_select_db("$table" );
$sql = "INSERT INTO sondage VALUES('', '".addslashes($_POST['question'])."', '".addslashes($_POST['reponse1'])."', '".addslashes($_POST['reponse2'])."', '".addslashes($_POST['reponse3'])."', '".addslashes($_POST['reponse4'])."')";
mysql_query($sql) or die(mysql_error());
echo("Sondage créé !" );
}
else
{
echo("<form method=\"POST\" action=\"creer.php?action=create\">\n" );
echo("<table  bgcolor=\"#CCCCCC\">\n" );
echo("<tr align=\"center\">\n<td colspan=\"2\" align=\"center\"><strong>Cr&eacute;ation d'un sondage</strong></td>\n</tr>\n" );
echo("<tr>\n<td width=\"80\">&nbsp;Question :</td>\n" );
echo("<td width=\"365\"><input type=\"text\" name=\"question\" size=\"55\"></td>\n</tr>\n" );
echo("<tr>\n<td width=\"80\">&nbsp;R&eacute;ponse 1 :</td>\n" );
echo("<td width=\"365\"><input type=\"text\" name=\"reponse1\" size=\"30\"></td>\n</tr>\n" );
echo("<tr>\n<td width=\"80\">&nbsp;R&eacute;ponse 2 :</td>\n" );
echo("<td width=\"365\"><input type=\"text\" name=\"reponse2\" size=\"30\"></td>\n</tr>\n" );
echo("<tr>\n<td width=\"80\">&nbsp;R&eacute;ponse 3 :</td>\n" );
echo("<td width=\"365\"><input type=\"text\" name=\"reponse3\" size=\"30\"></td>\n</tr>\n" );
echo("<tr>\n<td width=\"80\">&nbsp;R&eacute;ponse 4 :</td>\n" );
echo("<td width=\"365\"><input type=\"text\" name=\"reponse4\" size=\"30\"></td>\n</tr>\n" );
echo("<tr align=\"center\">\n<td colspan=\"2\" align=\"center\"><input type=\"submit\" value=\"Créer\"></td>\n</tr>\n" );
echo("</table>\n" );
echo("</form>\n" );
}
?>
</html>

 
En rouge la fameuse ligne 10 qui pose problème.
A noter que si je fais:
 
<?php
if($_GET['action'] == 'create')
{
include("parametres.php" );
...

 
J'obtiens la même erreur.
 
Qu'en pensez vous?
 
EDIT : j'ai trouvé la réponse comme un grand désolé pour le dérangement! (faut dire que c'était tout bête)
 
$action = '';
if (!empty ($_GET['action'])) {
$action = $_GET['action'];
}

if($action == 'create')
{
...


Message édité par SV_LVH le 29-03-2010 à 19:09:13

---------------
Quand vous demandez sur un forum comment changer un pneu de voiture peu de gens vous répondent. Et ceux qui le font vous expliquent généralement comment rouler sur 3 roues.
Reply

Marsh Posté le 29-03-2010 à 19:13:25    

essayez "print_r($_GET);" avant "$action = $_GET['action'];".
 
Dites-moi quel est le résultat.


---------------
J'apprends parler en français alors je ferai des erreurs. S'il vous plaît corrigez-moi :)
Reply

Sujets relatifs:

Leave a Replay

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