probleme de rang

Eléphant du PHP | 299 Messages

07 nov. 2009, 21:29

bonjour a tous!

j' ai un petit souci, aujourd' hui j' arrive a rien!

les rangs:
membres = 2
admin = 3

J' aimerai juste que les membres allant dans l' admin soit redirigés vers interdit.php, voici ce que j' ai fait, mais admin comme membres y ont accés:

<?php
session_start();
include '../config.php';

$pseudo = $_SESSION['pseudo'];
?>

						<?php
					
						$reponses = mysql_query("SELECT rang, pseudo FROM membres WHERE pseudo = '.$pseudo.'");

						while ($donnees = mysql_fetch_array($reponses) )
						
						$data = mysql_fetch_assoc($donnees);
						{
						?>
						<?php
						$rang = $data['rang'];
?>
						<?php
						
					if ($rang == 2)
					
					
					{
echo '<SCRIPT LANGUAGE="JavaScript">
     document.location.href="../interdit.php"
</SCRIPT>';
exit;


}
else					
					
					?>
					<?php
					}
					?>

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

08 nov. 2009, 12:07

Tu fais appel successivement à mysql_fetch_array et mysql_fetch_assoc alors que ces deux fonctions ont la même utilité et c'est ce double appel qui t'empêche de faire ton test correctement... De plus, tu as une erreur dans ta requête SQL. Si tu ne sors pas ta variable de la chaine, il ne faut pas mettre de "." pour la concaténation, sans quoi ton script cherchera un pseudo commençant et terminant par un point ;)

A noter par ailleurs qu'il n'est pas utile d'ouvrir/fermer les balises php si tu ne mets pas de code html entre les deux, ni de définir un else si tu n'as pas besoin de gérer cette condition. Il n'est pas utile non plus de mettre un while si ta requête ne retourne au maximum qu'un seul enregistrement. (par contre faudra peut être un test si le pseudo n'est pas trouvé)

Enfin, plutôt qu'une redirection en javascript, je te recommande de la faire en php avec un header :)
<?php
                                    
	$sql = "SELECT rang, pseudo FROM membres WHERE pseudo = '".$pseudo."'";    
	$reponses = mysql_query($sql);

	if ($donnees = mysql_fetch_assoc($reponses)) {
		
		$rang = $donnees['rang'];

		if ($rang == 2) {
			header('Location:../interdit.php');
			exit;
		}
	}
	else { // pseudo non trouvé
		header('Location:../interdit.php');
		exit;
	}


	// si l'on arrive ici, c'est que le pseudo existe et le rang différent de 2
	....
?>
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
ViPHP | 1996 Messages

10 nov. 2009, 00:19

Bonjour,

Tu as deux choix :
Faire l'inverse :
<?php
$requete = "SELECT pseudo FROM membres WHERE rang = '"3"'";
$resultat_sql = mysql_query($requete);
$tab_admin = array();
while ($resultat = mysql_fetch_row($resultat_sql))
{
  $tab_admin[] = $resultat[0];
}

$requete = "SELECT pseudo FROM membres WHERE rang = '"2"'";
$resultat_sql = mysql_query($requete);
$tab_membre = array();
while ($resultat = mysql_fetch_row($resultat_sql))
{
  $tab_membre[] = $resultat[0];
}

if (in_array($pseudo,$tab_admin))
{
  //admin
}

if (in_array($pseudo,$tab_membre))
{
  //membre
}
if (!in_array($pseudo,$tab_admin) && !in_array($pseudo,$tab_membre))
{
  //rien du tout
}
?>
Te faire comme te dis Ryle mais avec un switch pour être sûr de tester toute les valeurs
$sql = "SELECT rang, pseudo FROM membres WHERE pseudo = '".$pseudo."' LIMIT 1";    
$reponses = mysql_query($sql);
if (mysql_num_rows($reponses) != 0)
{
  $donnees = mysql_fetch_rows($reponses)
  switch ($donnees[0])
  {
  default :
  //en cas de rang != de 2 ou 3 on sait jamais
  break;

  case 2:
  $direction = "Location:../membre.php?pseudo=".donnees[1];
  break;

  case 3:
  $direction = "Location:../admin.php?pseudo=".donnees[1];
  break;
  }
}
else
{
  $direction =  "Location:../pas_de_pseudo.php";
}
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr