[RESOLU] Probleme de réponse sur formulaire

Petit nouveau ! | 5 Messages

31 juil. 2012, 20:40

Bonjour,

Etant débutant en PHP, je réalise actuellement un script qui va allée cherché des informations dans une table.
Cepandant,
selon le champ remplie dans le formulaires, d'autre form vont être afficher pour continuer la requête de l'utilisateur.

Voici mon script:
<form method="post" action="CompteBan.php">
Entrer un login de compte: <input type="text" name="login"/><input value="Valider" type="submit" /></br>
</form>
<?php
if (!isset($_POST['login'])) 
{
echo "Vous n'avez entrer aucun compte";
}
else 
{
	if (isset($_POST['login'])) 
	{
	$db = mysql_select_db('account');
	$sql = mysql_query("SELECT * FROM account WHERE login='".$_POST['login']."'");
		while ($req = mysql_fetch_array($sql) or die(mysql_error())) 
		{
			if ($req['status'] == 'BAN') 
			{
			echo "
			<table>
			<tr>
			<td>
			Id:".$req['id']."</br>
			Compte:<font color=\"#000985\">".$req['login']."</font></br>
			E-mail:".$req['email']."</br>
			Date de création:".$req['create_time']."</br>
			Ip:".$req['ip']."</br>
			Compte Bannie par:<font color=\"#B9121B\">".$req['gm_ban']."</font></br>
			Compte bannie le:".$req['baned']."</br>
			Raison du Ban:<font color=\"#C03000\">".$req['raison_ban']."</font></br>
			Temp du Banissement:<font color=\"#002F2F\">".$req['bantime']."</font></br>
			</tr>
			</td>
			</table>
			</br>
			";
			}
			else 
			{
			echo "Le compte ".$_POST['login']." existe mais n'est pas bannis</br>
			Bannir le compte:
			<form method=\"post\">
			Oui<input type=\"checkbox\" value=\"Oui\" name=\"box[]\">
			Non<input type=\"checkbox\" value=\"Non\" name=\"box[]\">
			<input  type=\"submit\"/>
			</form>";
			if (isset($_POST['box'])) {
				foreach ($_POST['box'] as $val) 
				{
					if ($val == "Oui")
					{
					echo "Entrez un temp de Bannissement(Pas de temps = Ban définitif):";
					}
						else
						{
						echo "Aucune modification apporté au compte ".$_POST['login'].".";
						}
				}		
			}
			}
		}
	}
	else 
	{ 
		if (isset($val)) 
		{
		echo "Aucun compte selectionner ou une erreur c'est produite".$val."";
		}
	}
}
?>
Le problème ici est que si l'utilisateur n'existe pas, la suite du formulaire s'affiche mais ne retourne aucun des deux Echo suivant et me renvoie a la base qui est "Vous n'avez entrer aucun compte".

Quelqu'un aurait-il une idée sur l'erreur qui se trouve dans le code actuelle?
Merci d'avance pour vos futur réponses.

Cdt, Arkax

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

31 juil. 2012, 23:06

En fait, tu peux déjà modifier la structure de ton code :
if (!isset($_POST['login'])) {
        echo "Vous n'avez entrer aucun compte";
}
else { // si tu es dans le else, c'est que $_POST['login'] est bien défini... 
        if (isset($_POST['login'])) { // ...  il n'est donc pas utile de le tester à nouveau
              ...
       else {
              ...
       }
} 
De plus, dans la mesure où ton login doit être unique en base (du moins je l'espère), au lieu d'un while() pour parcourir le seul enregistrement que ta requête va retourner, tu peux utiliser un if(). Tu pourras dès lors ajouter un else lorsque ta requête ne trouve pas de résultat (login spécifié inexistant)

Enfin, ton or die(mysql_error()) est mal placé, il devrait être utilisé lors de l'exécution de la requête sql et non dans le parcours du résultat :)
        $sql = mysql_query("SELECT * FROM account WHERE login='".$_POST['login']."'") or die(mysql_error());
        if ($req = mysql_fetch_array($sql)) {
                ... // ton traitement lorsque le login est trouvé
        }
        else {
                ... // ton traitement lorsque le login N'EST PAS trouvé
        }
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 5 Messages

01 août 2012, 13:37

Re bonjour et merci pour ta réponse :)
En effet la fonction du script ayant changé, le while n'était plus nécéssaire.
J'ai donc modifier la structure comme tu me la conseiller mais je me trouve toujours confronter au même problème.
Une fois arriver a la réponse qui dit que le compte existe mais n'est pas banni, les deux checbox s'affiche mais ne retourne rien ensuite.
Revoici mon code modifier.
<?php
if (!isset($_POST['login'])) 
{
echo "Vous n'avez entrer aucun compte";
}
else 
{
	$db = mysql_select_db('account');
	$sql = mysql_query("SELECT * FROM account WHERE login='".$_POST['login']."'") or die(mysql_error()) ;
		$req = mysql_fetch_array($sql);
			if ($req['status'] == 'BAN') 
			{
			echo "
			<table>
			<tr>
			<td>
			Id:".$req['id']."</br>
			Compte:<font color=\"#000985\">".$req['login']."</font></br>
			E-mail:".$req['email']."</br>
			Date de création:".$req['create_time']."</br>
			Ip:".$req['ip']."</br>
			Compte Bannie par:<font color=\"#B9121B\">".$req['gm_ban']."</font></br>
			Compte bannie le:".$req['baned']."</br>
			Raison du Ban:<font color=\"#C03000\">".$req['raison_ban']."</font></br>
			Temp du Banissement:<font color=\"#002F2F\">".$req['bantime']."</font></br>
			</tr>
			</td>
			</table>
			</br>
			";
			}
			else 
			{
			echo "Le compte ".$_POST['login']." existe mais n'est pas bannis</br>
			Bannir le compte:
			<form method=\"post\">
			Oui<input type=\"checkbox\" value=\"Oui\" name=\"box[]\">
			Non<input type=\"checkbox\" value=\"Non\" name=\"box[]\">
			<input  type=\"submit\"/>
			</form>";
			if (isset($_POST['box'])) 
			{
				foreach ($_POST['box'] as $val) 
				{
					if ($val == "Oui")
					{
					echo "Entrez un temp de Bannissement(Pas de temps = Ban définitif):";
					}
					else
					{
					echo "Aucune modification apporté au compte ".$_POST['login'].".";
					}
				}		
			}
			}
		if (isset($val)) 
		{
		echo "Aucun compte selectionner ou une erreur c'est produite".$val."";
		}
}
?>
Merci d'avance :)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

01 août 2012, 15:11

C'est parce que tu as totalement viré le while, alors que dans mon code, je te suggère de le remplacer par un if() pour tester s'il y a des résultats, ce qui te permet du coup d'utiliser un else (quand aucun résultat n'est trouvé).

Voici ce que ton code devrait faire (n'hésites pas à écrire les algorithme, c'est beaucoup plus facile ensuite pour savoir si tu as oublié des cas où si ton traitement correspondra bien à ce que tu attends :))

Code : Tout sélectionner

SI aucun login n'est envoyé AFFICHE message d'erreur : aucun login envoyé SINON charge les données depuis la base SI les données sont chargées : if ($req = mysql_fetch_array($sql)) SI utilisateur banni traitement SINON traitement (affiche les cases, ...) ... FIN SI SINON AFFICHE un message d'erreur : login inexistant FIN SI FIN SI
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 5 Messages

01 août 2012, 19:10

Re bonjour,

J'ai corriger cette erreur aussi, mais le problème en lui même ne vient pas de la, la requete ce fait comme voulu et le compte est bien trouvé suivant la recherche.
Ces seulement a partir de ces ligne ci-dessous que sa cloche, on dirait que $val n'est pas reconnu.
echo "Le compte ".$_POST['login']." existe mais n'est pas bannis</br> //Ok, il renvoie bien que le login existe mais qu'il n'est pas banni.
			Bannir le compte:
			<form method=\"post\"> //Ici on selectionne Oui ou Non pour bannir
			Oui<input type=\"checkbox\" value=\"Oui\" name=\"box[]\"> 
			Non<input type=\"checkbox\" value=\"Non\" name=\"box[]\">
			<input  type=\"submit\"/>
			</form>";
			if (isset($_POST['box']))  //Et ensuite rien ne se passe, renvoie directement au if du debut énoncer a la fin de ce code
			{
				foreach ($_POST['box'] as $val) 
				{
					if ($val == "Oui")
					{
					echo "Entrez un temp de Bannissement(Pas de temps = Ban définitif):";
					}
					else
					{
					echo "Aucune modification apporté au compte ".$_POST['login'].".";
					}
				}		
			}
			}
		}
//Cela me Renvoie directement a la clause du debut qui est:
if (!isset($_POST['login'])) 
{
echo "Vous n'avez entrer aucun compte";
}

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

01 août 2012, 20:45

Ok, en fait le problème est surtout au niveau du choix des outils. En fait, au lieu de case checkbox, il faudrait que tu utilises un bouton radio (puisqu'on ne peut pas être à la fois banni et pas banni ;)).

Le bouton radio fonctionne comme la case à cocher. Il suffit juste que chacun des boutons d'un même groupe porte le même nom :
                        Oui<input type=\"radio\" value=\"Oui\" name=\"box\"> 
                        Non<input type=\"radio\" value=\"Non\" name=\"box\">
J'ai également viré les crochets dans le nom de l'input, puisque l'on envoi pas un tableau, mais uniquement une valeur. Du coup pas besoin de foreach, il te suffit juste de tester if (isset($_POST['box'])) et la valeur de $_POST['box'] qui sera égale à Oui ou à Non selon ce qui aura été coché :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 5 Messages

02 août 2012, 03:09

Haha, en effet ceçie m'éclaircie déjà plus l'esprit,

... Malheureusement, toujours le même symptome docteur ...

Donc, pour testé si la variable de box était bien pris en compte, je me suis permis d'y mettre un get dans le form a la place d'un post:

Résultat retourner dans l'url: http://127.0.0.1:8080/cms/CompteBan.php?box=Oui Pour le choix Oui dans bannir utilisateur et pour la suite ...
Je me retrouve toujours avec mon "Vous n'avez entrer aucun compte" au lieu de la réponse qui normalement devrait être: "Entrez un temp de Bannissement(Pas de temps = Ban définitif):"
Donc au final, code éclaircie mais toujours la même erreur.

Je repose mon code au cas ou :o
<?php
if (!isset($_POST['login'])) 
{
echo "Vous n'avez entrer aucun compte";
}
else 
{
	$db = mysql_select_db('account');
	$sql = mysql_query("SELECT * FROM account WHERE login='".$_POST['login']."'") or die(mysql_error()) ;
		if ($req = mysql_fetch_array($sql)) {
			if ($req['status'] == 'BAN') 
			{
			echo "
			<table>
			<tr>
			<td>
			Id:".$req['id']."</br>
			Compte:<font color=\"#000985\">".$req['login']."</font></br>
			E-mail:".$req['email']."</br>
			Date de création:".$req['create_time']."</br>
			Ip:".$req['ip']."</br>
			Compte Bannie par:<font color=\"#B9121B\">".$req['gm_ban']."</font></br>
			Compte bannie le:".$req['baned']."</br>
			Raison du Ban:<font color=\"#C03000\">".$req['raison_ban']."</font></br>
			Temp du Banissement:<font color=\"#002F2F\">".$req['bantime']."</font></br>
			</tr>
			</td>
			</table>
			</br>
			";
			}
			else 
			{
			echo "Le compte ".$_POST['login']." existe mais n'est pas bannis</br>
			Bannir le compte:
			<form method=\"get\">
			Oui<input type=\"radio\" value=\"Oui\" name=\"box\"/>
			Non<input type=\"radio\" value=\"Non\" name=\"box\"/>
			<input  type=\"submit\"/>
			</form>";
				if (isset($_GET['box'])) 
				{
					if ($_GET['box'] == 'Oui') 
					{
					echo "Entrez un temp de Bannissement(Pas de temps = Ban définitif):";
					}
					else
					{
					echo "Aucune modification apporté au compte ".$_POST['login'].".";
					}
				}		
			}
		}
	else
	{
	echo "Aucun compte selectionner ou une erreur c'est produite.";
	}
}
?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 août 2012, 10:57

Ah oki, en fait, le problème maintenant c'est que l'on ne sait pas qui tu essayes de bannir, puisque tu n'envois plus l'info login :)

Repasse ton formulaire en POST (puisque maintenant tu sais que l'info est bien envoyée) et ajoute un champ hidden qui contiendra le login sur lequel tu travailles :)

Code : Tout sélectionner

<form method=\"get\"> Oui<input type=\"radio\" value=\"Oui\" name=\"box\"/> Non<input type=\"radio\" value=\"Non\" name=\"box\"/> <input type=\"hidden\" name=\"login\" value=\"" . $_POST['login'] . "\" /> <input type=\"submit\"/> </form>
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 5 Messages

02 août 2012, 13:06

It's Work :D
Merci beaucoup pour ta précieuse aide :)

Cdt, Arkax