Page 1 sur 1

problème avec la variable action

Posté : 10 déc. 2007, 12:06
par zab
Bonjour voici mon code
<html>
<head>
<title>WebJeff - Espace membre</title>
</head>
<body>
<font face="Verdana" size="2">
<center>
<?
require("conf.php3");
$action = $_POST["action"];

switch($action) {
/*-----------------------------------------------------------------*/
/*	AJOUT DANS MySQL			*/
/*-----------------------------------------------------------------*/

case "add":

// CONNEXION A LA BASE DE DONNEE
$db_link = @mysql_connect($sql_serveur,$sql_user,$sql_passwd);
if(!$db_link) {echo "Connexion impossible à la base de données <b>$sql_bdd</b> sur le serveur <b>$sql_server</b><br>Vérifiez les paramètres du fichier conf.php3"; exit;}

// TEST SUR LES VALEURS SAISIES
if($pseudo_membre==""){echo "Vous devez choisir un pseudo<br><br><a href=\"javascript:window.history.back()\">Retour</a>";exit;}
if($passe_membre==""){echo "Vous devez choisir un mot de passe<br><br><a href=\"javascript:window.history.back()\">Retour</a>";exit;}
// CHAMPS SUPLEMENTAIRES, inspirez-vous des lignes suivantes. Pour qu'un champs soit facultatif, omettez la ligne.
//if($email==""){echo "Vous n'avez pas saisi votre email<br><br><a href=\"javascript:window.history.back()\">Retour</a>";exit;}
//if($ville==""){echo "Vous n'avez pas saisi la ville<br><br><a href=\"javascript:window.history.back()\">Retour</a>";exit;}

// ON VERIFIE SI CE PSEUDO EXISTE DEJA
$requete=mysql_db_query($sql_bdd,"select * from membre where pseudo=\"$pseudo_membre\"",$db_link) or die(mysql_error());
$num=mysql_num_rows($requete);
if($num!=0)
	{
	echo "Ce pseudo existe déjà, veuillez en choisir un autre<br><br><a href=\"javascript:window.history.back()\">Retour</a>";
	}
else
	{
	// CREATION D'UN IDENTIFIANT ALEATOIRE
	$taille = 20;
	$lettres = "abcdefghijklmnopqrstuvwxyz0123456789";
	srand(time());
	for ($i=0;$i<$taille;$i++)
		{
		$id.=substr($lettres,(rand()%(strlen($lettres))),1);
		}
		
	// ON RECHERCHE L'ID MAXIMUM DE LA TABLE
	$requete=mysql_db_query($sql_bdd,"select max(id_membre) from membre",$db_link) or die(mysql_error());
	$idmax=mysql_result($requete,0,"max(id_membre)");
	
	// INSERTION DANS LA TABLE 
	$idnew=$idmax+1;
	$requete=mysql_db_query($sql_bdd,"insert into membre values ($idnew,\"$id\",\"$pseudo_membre\",\"$passe_membre\")",$db_link) or die(mysql_error());
	// CHAMPS SUPLEMENTAIRES, complétez la requête précédente en ajoutant les variables et en respectant l'ordre des colonnes de la table. Exemple :
	// insert into membre values ($idnew,\"$id\",\"$pseudo_membre\",\"$passe_membre\",\"$email\",\"$ville\")
	
	// REDIRECTION VERS LA PAGE D'ENTREE DE L'ESPACE MEMBRE
	echo "Merci, vous êtes bien enregistré. Cliquez <a href=\"$zone_membre?id=$id\">ici</a> pour entrer dans votre espace privé.";
	}

// DECONNEXION MYSQL
mysql_close($db_link);

break;


/*-----------------------------------------------------------------*/
/*	AFFICHAGE DU FORMULAIRE			*/
/*-----------------------------------------------------------------*/

default;
echo "	<h2>Nouveau membre</h2>
	<form action=\"adduser.php3\" method=\"post\">
	<input type=\"hidden\" name=\"action\" value=\"add\">
	Chosissez un pseudo<br><input type=\"text\" name=\"pseudo_membre\"><br>
	Chosissez un mot de passe<br><input type=\"password\" name=\"passe_membre\"><br>
	<! -- CHAMPS SUPLEMENTAIRES, décommentez les 2 lignes suivantes -->
	<!-- Votre email<br><input type=\"text\" name=\"email\"><br> -->
	<!-- Ville<br><input type=\"text\" name=\"ville\"><br> -->
	<input type=\"submit\" value=\"Envoyer\">
	</form>
	<font face=\"Verdana\" size=\"2\"><a href=\"index.htm\">Se connecter</a></font>";
break;
}
?>
</center>
</font>
</body>
</html>
et voici la phrase d'erreur que j'obtiens
Notice: Undefined index: action in d:\program files\easyphp1-8\www\espace membre\adduser.php3 on line 10
il porte sur la ligne suivante
$action = $_POST["action"];

et je n'arrive pas à voir d'où vient l'erreur merci

Posté : 10 déc. 2007, 12:17
par zeus
Cela signifie qu'il n'existe pas de données "action" qui ai été transmise en POST à ton script.
Fait un var_dump($_POST); pour voir toutes les données transmises en POST à ton script et regarde si "action" est présente

Posté : 10 déc. 2007, 12:40
par zab
Cela signifie qu'il n'existe pas de données "action" qui ai été transmise en POST à ton script.
Fait un var_dump($_POST); pour voir toutes les données transmises en POST à ton script et regarde si "action" est présente
ok en effet il me retourne array(0) { }

Posté : 10 déc. 2007, 12:41
par zeus
Est-ce que tu as un formulaire qui transfert tes données ?

PS : je viens de comprendre le soucis. Lorsque tu affiches ta page la 1ère fois, tu n'as pas encore validé ton formulaire et tu n'as donc aucune données.
Pour résoudre ce problème, il faut que tu testes si le formulaire a été validé. Tu peux, par exemple, tester que le champ 'action' existe
<?php
if ( isset( $_POST['action'] ) )
{
  // Traitement si formulaire validé
}
?>
// Affichage du formulaire

Posté : 10 déc. 2007, 12:45
par Ryle
Une petite remarque en passant, donner le nom "action" à un champ d'un formulaire est pas
vraiment judicieux.. c'est en effet le nom d'une propriété du formulaire (correspondant à l'attribut html éponyme) ça prête à confusion et peut compliquer les choses pour y accéder en javascript où il faut passer par elements[] :

document.formulaire.action => action du formulaire
document.formulaire.elements['action'] => champ "action"

Quant à ton problème, c'est sans doute parce que lorsque tu arrives sur la page, la première fois, le formulaire n'a pas été soumis et ta variable n'est pas définie alors que tu considères ce fait comme averé en affectant directement la valeur de $_POST["action"] sans te soucier de savoir si elle existe ou pas :)

Posté : 10 déc. 2007, 16:06
par zab
ok merci beaucoup je vais voir ce que je peux faire