Problème avec les conditions

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème avec les conditions

Re: Problème avec les conditions

par Aureusms » 28 oct. 2009, 22:21

Bonjour,
Tout d'abord je t'avouerais que je n'ai pas tout lu.
Comme le dis kran, il faut faire attention à ta fonction isset (qui veut en gros "existe ou pas" ou is_set).
Ton code suivant est peut être faux (car je ne sais pas ce qu'il y a dans $_POST['Ok'])
if (isset($_POST['ok']) == FALSE)
{
        $form = 2;
}
elseif (isset($_POST['ok']) == TRUE)
{
Si $_POST['ok'] est envoyé et doit contenir TRUE ou FALSE, la bonne écriture devrait être :
if (isset($_POST['ok']) && $_POST['ok'] == FALSE)
{
        $form = 2;
}
elseif (isset($_POST['ok']) && $_POST['ok']  == TRUE)
{

Re: Problème avec les conditions

par Kran » 28 oct. 2009, 10:14

Il faut savoir que....
  • la fonction isset te renvoie forcément true OU false
  • Il est possible d'inverser l'état d'une valeur booléenne avec l'opérateur NON logique qui en php s'écrit !
Ce qui équivaut à dire premièrement que si tu as testé une première fois l'existance de ta variable avec if (isset($_POST['ok']) == FALSE) , et si cette condition n'est pas vérifiée, cela veut obligatoirement dire que isset($_POST['ok']) == TRUE donc... pas besoin de retester : tu peux utiliser un else simple au lieu d'un elseif à cet endroit ! (Soit dit en passant cette erreur apparait plusieurs fois dans ton code).

Ensuite, juste pour simplifier l'écriture...
//tu peux écrire
if (isset($_POST['ok'])) { 
    // traitement...
} 
// qui équivaut à 
if (isset($_POST['ok'])==TRUE) { 
    // traitement...
}

// ou encore 
if (!isset($_POST['ok'])) { 
    // traitement...
} 
// qui équivaut à 
if (isset($_POST['ok'])==FALSE) { 
    // traitement...
}

// soit, pour résumer l'ensemble :
if (!isset($_POST['ok'])) { 
        $form = 2;
} 
else {
        // ------- On défini des variables --------

        $prenom = $_POST['prenom']; 
        $nom = $_POST['nom'];
        $mdp = $_POST['mdp'];
        
        // etc...
}

Problème avec les conditions

par Manny » 28 oct. 2009, 02:10

Bonsoir,

Je suis actuellement en train d'apprendre le php et j'ai réalisé, à la fois pour m'entraîner et pour un ami, un module de membres pour son site internet. Seulement, je planche actuellement sur la page d'inscription qui me donne du fil à retordre !

Ici, le problème que j'ai rencontré et que je n'arrive pas à résoudre vient de la première condition. D'après mes connaissances (certes peu développées), avec un IF (affirmation), suivi d'un ELSE ou d'un ELSEIF (inverse de l'affirmation), si l'affirmation est vraie, seule le IF s'effectue et pas le ELSE, et de même pour l'inverse.

Seulement, ici, avec la première condition, les deux s'effectuent :
<?php

if (isset($_POST['ok']) == FALSE)
{
	$form = 2;
}
elseif (isset($_POST['ok']) == TRUE)
{

	// ------- On défini des variables --------

	$prenom = $_POST['prenom']; 
	$nom = $_POST['nom'];
	$mdp = $_POST['mdp'];
	$mdpc = $_POST['mdpc'];
	$mail = $_POST['mail'];
	$sexe = $_POST['sexe'];
	$tel = $_POST['tel'];
	
	// --------- Fin de la définition ------------

	mysql_connect("localhost","root",""); // On ouvre la table "membres" ou prenom = POSTprenom -> $reponse
	mysql_select_db("csamb-taa");
	
	$reponse = mysql_query("SELECT * FROM membres WHERE prenom='$prenom' AND nom='$nom'") or die(mysql_error());
	
	if (mysql_num_rows($reponse) != 0) // Si $reponse est = 0
	{
		$validlog = 0;
	}
	elseif (mysql_num_rows($reponse) == 0) // Sinon si $reponse != 0
	{
		$validlog = 1;
	}

	if ($mdp == NULL) // Si POSTmdp est vide
	{
		echo "ERROR MDP MISSING";// Affichage message d'erreur, et $form = 1
		$form = 1;
	}
	elseif ($mdp != $mdpc)
	{
		echo "ERROR : WRONG PASS CONFIRMATION";
		$form = 1;
	}
	elseif ($prenom == NULL) // Sinon si POSTprenom=vide
	{
		echo "ERROR PRENOM MISSING"; // Affichage message d'erreur, et $form = 1
		$form = 1;
	}
	elseif ($nom == NULL)
	{
		echo "ERROR NOM MISSING";
		$form = 1;
	}
	elseif ($validlog == 0) // Sinon si $validlog == 0
	{
		echo "ERROR : Prenom & Nom déjà utilisés : débrouille toi cette ligne de code me gave"; // Affichage message d'erreur : prénom déjà utilisé, et $form = 1
		$form = 1;
	}
	elseif ($mail == NULL) // Sinon si POSTmail est vide
	{
		echo "ERROR : MAIL MISSING"; // Affichage message d'erreur et $form=1
		$form = 1;
	}
	elseif (strlen($tel) != 10 OR $tel == NULL)
	{
		echo "ERROR : TELEPHONE NUMBER SYNTAX";
		$form = 1;
	}
	else // Sinon
	{
		echo "gros caca";
		$form = 0; // Aucune erreur roulez jeunesse
	}
}


if ($form = 2)
{ echo "caca";
?>
	<form method="post" action="signup.php">
		<p>
		<label for="nom">Votre nom : </label><input type="text" name="nom" id="nom"/><br/>
		<label for="prenom">Votre prénom : </label><input type="text" name="prenom" id="prenom"/><br/>
		Votre (gros) sexe : 
		<label for="sexe1">Masculin</label><input type="radio" name="sexe" id="sexe1" value="1"/>
		<label for="sexe2">Féminin</label><input type="radio" name="sexe" id="sexe2" value="2"/><br/>
		<label for="mail">Votre e-mail : </label><input type="text" name="mail" id="mail"/><br/>
		<label for="tel">Votre n° de téléphone : </label><input type="text" name="tel" id="tel"/><br/>
		<label for="mdp">Votre mot de pass : </label><input type="password" name="mdp" id="mdp"/><br/>
		<label for="mdpc">Confirmation du mot de pass : </label><input type="password" name="mdpc" id="mdpc"/>
		<input type="submit" value="ENVOIE LA SAUCE BEBEY" name="ok"/>
		</p>
	</form>
<?php }

elseif ($form = 1) // Si $form=1
{ 
	// Si sexe = 1 à la précédente : alors sexe1 checked, ce qui met "checked" dans la case "homme" (par exemple)
	if ($sexe = 1)
	{ $sexe1 = "checked"; }
	elseif ($sexe = 2)
	{ $sexe2 = "checked"; }
	
	// Affichage du formulaire
?>
	<form method="post" action="signup.php">
		<p>
		<label for="nom">Votre nom : </label><input type="text" name="nom" id="nom" value="<?php echo $nom; ?>"/><br/>
		<label for="prenom">Votre prénom : </label><input type="text" name="prenom" id="prenom" value="<?php echo $prenom; ?>"/><br/>
		<label for="sexe">Votre (gros) sexe : </label><input type="radio" name="sexe" id="sexe" value="1" checked="<?php echo $sexe1; ?>"/><br/>
													  <input type="radio" name="sexe" id="sexe" value="2" checked="<?php echo $sexe2; ?>"/><br/>
		<label for="mail">Votre e-mail : </label><input type="text" name="mail" id="mail" value="<?php echo $mail; ?>"/><br/>
		<label for="tel">Votre n° de téléphone : </label><input type="text" name="tel" id="tel" value="<?php echo $tel; ?>"/><br/>
		<label for="mdp">Votre mot de pass : </label><input type="password" name="mdp" id="mdp"/><br/>
		<label for="mdpc">Confirmation du mot de pass : </label><input type="password" name="mdpc" id="mdpc"/>
		<input type="submit" value="ENVOIE LA SAUCE BEBEY" name="ok"/>
		</p>
	</form>
<?php }
elseif ($form = 0) // Sinon si $form=0
{
	echo "REGISTERING SUCCESSFULL!"; // Enregistrement réussi, on entre les données dans la base de données
	
	mysql_connect("localhost","root","");
	mysql_select_db("csamb-taa");
	
	mysql_query("INSERT INTO membres('nom', 'prenom', 'mdp', 'sexe', 'mail', 'tel', 'id', 'accessadmin') VALUES('$nom', '$prenom', '$mdp', '$sexe', '$mail', '$tel', '', '1')");
}
?>
Ainsi, ici, quoi qu'il arrive, que la variable $_POST['ok'] existe ou non, on passe par les deux boucles : le if(isset($_POST['ok'] == FALSE) et le elseif(isset($_POST['ok']))... Et le résultat n'est pas particulièrement satisfaisant... :p

J'en profite pour aller me coucher, en espérant que quelqu'un puisse m'expliquer où est mon erreur/incompréhension d'ici demain!