Page 1 sur 1

Formulaire: passer et tester une variable avec $_POST?

Posté : 13 janv. 2008, 19:36
par speccy666
Sans doute un pb de débutant... j'ai cherché sur les post et rien trouvé....

Je valide un formulaire qui envoie le résultat sur le même fichier
<form method="post" action="inscription2.php">
J'essaie de travailler avec HIDDEN avant le bouton ENVOYER
<p><input type=hidden name=f_valid value="1"><input type="submit" name="boutonenregistrer" value="enregistrer" /> <input type="reset" /></p>
Le problème est que la variable f_valid du bouton Hidden n'est jamais mise à 1.

Faut il mettre un entete qui déclare l'utilisation de HTML???

Ci-dessous mon code complet placé dans le fichier inscription2.php ; merci pour votre aide...

<?php
//on inclue la page de base
include("page de base HAUT.php")

?>
<link rel="stylesheet" media="screen" type="text/css" title="Exemple" href="css/designformulaire.css" />
<form method="post" action="inscription2.php">
<fieldset>
<?php
/// paramètres de connection à la base de données
mysql_connect("localhost", "root", ""); // Connexion à MySQL
mysql_select_db("membres");

///traitement des variables du tableau, vérification validité
echo ("essai:");echo($f_valid);
if($f_valid=="1")
{ 
	  $error=array(); // initialisation du tableau des erreurs éventuelles
	  // si l'item n'est pas valide, on insère une entrée supplémentaire
	  // à la fin du tableau $error avec la fontion array_push()
	  
		//Champ nom rempli ?
		if (strlen($pseudo)<3) {array_push($error, "votre pseudo doit comporter 3 caractères minimum<br>");}
		// Champ prénom rempli ?
		if (strlen($motdepasse)<5){array_push($error,"Indiquez votre prénom<br>");}
		// champ email rempli ?
		if (!$email){array_push($error,"Merci d'indiquer une adresse Email.<BR>");} 
		else if(!ereg ("^[^@ ]+@[^@ ]+\.[^@ \.]+$", $email)){
		array_push($error,"Attention, l'adresse e-mail saisie n'est pas valide<br>");} 	
		// permet de vérifier avec les expressions régulières (ereg) 
		//qu'il n'y a pas de caractères interdits mais ne vérifie pas 
		//que cette adresse aboutit bien chez quelqu'un

// si le tableau $error n'est pas vide, affichage des différentes erreurs :
	    if(count($error)) { // = si la variable a été initialisée
	    	echo "<font color='#993366'><b>";
	    	while($error){echo array_shift($error)."<br>";} 
	    	echo "</b></font>"; } //fin du if count error} 
		 else { // s'il n'y a pas d'erreurs, on effectue le traitement des données et 
		 //on les envoie sur la table
$nom=$pseudo;
$nom=strtolower($nom); // met les noms en minuscule
$nom=ucfirst($nom); //met la première lettre en majuscule
$nom=addslashes($nom); // Ajoute un antislash devant les caratères à échapper comme '\ "
$mail=$email;

// envoi à la base de données
// on commence par se connecter :
// on utilise l'instruction insert into pour ajouter les nouvelles données
$nveau="insert into membres values ('', '$nom', '$motdepasse', '$mail')";
$insert = mysql_query($nveau) or die ("Impossible d'insérer ".mysql_error());	
		
mysql_close($connexion); // Pour fermer l'accès
$msg1= "Merci d'avoir ajouté votre nom sur nos listes !<br>";
echo $msg1;
		
//envoi d'un mail au webmaster
		$sujet ="un nouveau lecteur s'est inscrit";
		$d= date ( "d/m/Y" );
		$msg="le $d, $nom, $mail, a ajouté son nom sur la table tutoriel";
		if (!email("webmaster", "[email protected]", $sujet, $msg))
		{$msg2="Le mail n'a pas été envoyé suite à une erreur.<br>";
		echo $msg2;}
		else{
		$msg2="Un mail a été envoyé au webmaster pour le prévenir de votre proposition.<br>";
		echo $msg2;}

	//réinitialisation pour nouvelle saisie 
		unset($pseudo, $motdepasse, $email, $f_valid, $msg1, $msg2, $sujet, $d, $msg);
	} // fin du if il n'y a pas d'erreur
}//fin de if f_valid==1
?>
<legend>Inscription</legend>
<h4>Choisissez un pseudonyme de 10 caractères maximum</h4>
<p><input type="text" name="pseudo" size="12" maxlength="10"/> </p>
<h4>Choisissez un mot de passe de 8 caractères maximum</h4>
<p><input type="text" name="motdepasse" size="8" maxlength="8"/> </p>
<h4>entrez votre adresse Email</h4>
<p><input type="text" name="email" size="25" /> </p>
<?php 
$N1=100;
$N2=rand(1000,80000);
echo "voilà votre première question de QCM!   lol!<br />";
echo "indiquez ci-dessous le résultat de la multiplication :<br />";
echo "Exemple : 100 x 4815 ==> 481500<br />";
echo "le but est d'éviter les robots qui viennent faire de fausses inscriptions.<br />";
echo "<h2> $N1 x $N2 = . . .</h2>";
$resultat=$N1*$N2;
?>
<h4>Résultat</h4>
<p><input type="text" name="reponse"  /> </p>
<p><input type=hidden name=f_valid value="1"><input type="submit" name="boutonenregistrer" value="enregistrer" /> <input type="reset" /></p>
</fieldset>

</form>

<?php
//on inclue la page de base BAS
include("page de base BAS.php")
?>

Posté : 13 janv. 2008, 20:01
par cf357
La maniere dont tu accedes à tes élements de formulaires postés dépend aussi de ta configuration...
Essaie d'y accéder de cette maniere :

Code : Tout sélectionner

echo $_POST['nom_variable']; // accés a une variable postée par méthode POST
et d'une maniere générale pour tout contrôler :

Code : Tout sélectionner

print_r($_POST); // affiche toutes les données postées

Posté : 13 janv. 2008, 20:09
par speccy666
Très sympa ton:
print_r($_POST);

Et c'est vrai que, maintenant, je vois ma variable apparaitre avec la bonne valeur; je vais essayer avec $POST mais pourquoi mon code serait il faut alors que je l'ai souvent vu validé ainsi sur des exemples fiables?

Qu'appelles tu ma config?

De plus, ma syntaxe est mauvaise semble t il (erreur ligne 17)
if($_POST('f_valid')=="1")
une idée?

Merci à toi.

Posté : 13 janv. 2008, 20:14
par cf357
dans les "anciennes" versions d'Apache / PHP, la config par défaut autorisait les developpeurs a utiliser '$myVar' pour accéder a une variable peu importe d'ou elle vienne.

Dorénavant, la config impose, pour des raisons de sécurité, de spécifier l'origine de la variable :

$_POST['variable'] pour les données en POST
$_GET['variable'] pour celles en GET (dans l'URL par exemple)

Il existe également d'autres tableaux : $_SESSION, $_COOKIE, $_REQUEST ...

Posté : 13 janv. 2008, 20:26
par speccy666
$_POST() est faux (parenthèses) .... correction : ==> $_POST[]

Merci à toi! tout est résolu en 5min alors que cela fait 2 heures que je piétine....

Posté : 13 janv. 2008, 20:49
par cf357
pas de probleme ;)
En + de régler ton probleme, l'utilisation de ces supers tableaux rendra ton code + sécurisé :)