Page 1 sur 1

Controle d'accés à une base de données

Posté : 04 mai 2009, 22:25
par Freddo31
Bonjour tout le monde!!
j'ai un petit soucis avec un controle!!
j'explique.
j'utilise Wampp server.j'ai créer une BD directement en dur.j'ai une table pilote ou des nouveaux pilote peuvent s'enregistrer...avec login MdP ...etc...et après moi directement dans le dur, j'ai le choix de rentrée une valeur d'un attribut pour dire si oi ou non le pilote est "admin" ou non.
tout cela dans le but de ne pas rediriger vers la même page après connexion...
si pas admin, on va vers une page ou on a pas accès au panneau d'admin...si on est admin, on a la même page, mais avec un lien vers une page d'administration, ou on peu créer des tables...etc...

donc sur la page de connexion, on tape login et MdP puis on valide avec le bouton valider, et ça me redirige vers une page validation.php qui redirige ensuite vers l'une ou l'autre page suivant si on est admin ou non...le problème c'est qu'au niveau du contrôle...ça merdouille...je vous mets donc le code de ma page validation.php.


<?php
	$login = $_POST['login'];
	$password = $_POST['password'];
	$trouve = FALSE;
	if (isset ($login))
	{
		mysql_connect ("localhost", "root", "") or die ("Erreur de connexion à MySql"); //connexion à la base
		mysql_select_db ("BOMB") or die ("Impossible de sélectionner cette base de donnée");//sélection de la base
	}
	
	$resultat = mysql_query ("SELECT * FROM pilotes");
	while ($data = mysql_fetch_array($resultat) && ($trouve == FALSE))
	{
		if (($data['login'] == $login) && ($data['mdp'] == $password) && ($data['Admin'] == 'o'))
		{
			include ("./indexadmin.php");
			$trouve = TRUE;
		}else
		{
			if (($data['login'] == $login) && ($data['mdp'] == $password))
			{
				include ("./accueil.html");
				$trouve = TRUE;
			}
		}
		}
	}
	if ($trouve == FALSE)
	{
		echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">';
			echo '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >';
				echo'<head>';
					echo '<title>Erreur de connexion</title>';
					echo'<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />';
				echo'</head>';
				echo'<body>';
					echo '<p>Erreur de login ou de mot de passe<p>';
				echo'</body>';
			echo'</html>';
	}
?>

voila, vous en pensez quoi?

Posté : 04 mai 2009, 22:47
par Berzemus
Que ça ne sert à rien d'écrire en italique.

Posté : 04 mai 2009, 23:09
par Freddo31
????
il est ou le rapport?...
c'est un sujet important pour moi...c'est pour mon BTS...alors je demande un peu d'aide...un coup de pouce.

merci d'avance.

Posté : 04 mai 2009, 23:18
par dunbar
C'est accepter ceci (ça merdouille) dans BTS :?:
Parce comme détail d'erreur j'ai déjà vue mieux :?

Posté : 04 mai 2009, 23:22
par Freddo31
sans déconné, c'est un forum d'aide ou un forum de critique la?
à quoi ça sert de répondre comme ça? tu peux pas tout simplement dire que t'as mal compris mon problème?
...entre le 1er qui est un VIPhp et toi...je commence à me demander si le forum vaut vraiment le coup...je galère comme c'est pas possible, on vous me répondez des choses qui n'ont aucun intérêt...

en gros, le problèmes, c'est que j'arrive pas à rediriger correctement l'utilisateur selon si il est admin ou non, ou tout simplement si le logs ou le pass existent ou sont erronées...

c'est plus clair la?

Posté : 04 mai 2009, 23:28
par dunbar
Une bête question mais ton test concernant l'admin il doit être quoi o ou 0
La lettre o ou le chiffre zéro ?

De plus pour une redirection un
header("Location: ./indexadmin.php");
Ne serais pas mieux :?:

Et pourquoi ne pas faire
$resultat = mysql_query ("SELECT * FROM pilotes WHERE login = '" . $login . "'");
De plus il y a une erreur dans cette partie
$resultat = mysql_query ("SELECT * FROM pilotes");
    while ($data = mysql_fetch_array($resultat) && ($trouve == FALSE))
    {
        if (($data['login'] == $login) && ($data['mdp'] == $password) && ($data['Admin'] == 'o'))
        {
            include ("./indexadmin.php");
            $trouve = TRUE;
        }else
        {
            if (($data['login'] == $login) && ($data['mdp'] == $password))
            {
                include ("./accueil.html");
                $trouve = TRUE;
            }
        }
        } <--- a quoi sert celle-ci ?
    }

Posté : 04 mai 2009, 23:32
par Freddo31
c'est la lettre 'o'.
après le include fonctionne bien...disons que quand j'ai qu'un utilisateur enregistré...les redirections fonctionnent mais quand j'en ai plusieurs enregistrés dans la base (1 en tant qu'admin avec le lettre o donc, et un autre sans être admin) et bien la ça marche plus!

Posté : 04 mai 2009, 23:45
par dunbar
Et comme ceci ça ne fonctionne pas mieux :?:
$resultat = mysql_query ("SELECT * FROM pilotes WHERE login = '".$login."'");
    while ($data = mysql_fetch_array($resultat) && ($trouve == FALSE))
    {
        if (($data['login'] == $login) && ($data['mdp'] == $password))
        {
            $redirection = ($data['Admin'] == 'o') ? './indexadmin.php' : 'autre.php' ;
            include ($redirection);
            $trouve = TRUE;
        }else
        {
            if (($data['login'] == $login) && ($data['mdp'] == $password))
            {
                include ("./accueil.html");
                $trouve = TRUE;
            }
        }

    }
J'ai pas tester :!:

Posté : 04 mai 2009, 23:51
par Freddo31
non, ça ne fonctionne pas... :(

je comprend pas...je me prends la tête depuis cet aprem dessus...

Posté : 04 mai 2009, 23:59
par dunbar
Et comme ceci :?:
$resultat = mysql_query ("SELECT * FROM pilotes WHERE login = '".$login."'");
    while ($data = mysql_fetch_array($resultat) && ($trouve == FALSE))
    {
        if (($data['login'] == $login) && ($data['mdp'] == $password))
        {
            $redirection = ($data['Admin'] == 'o') ? './indexadmin.php' : './index.php' ;
            include ($redirection);
         }   

    }

Posté : 05 mai 2009, 00:06
par Freddo31
non plus...mais je dois remplacer tout mon ancien code?
car si il faut ton code marche, mais c'est moi qui l'exploite mal...

Posté : 05 mai 2009, 07:31
par dunbar
$login = $_POST['login'];
$password = $_POST['password'];
$trouve = FALSE;

    if (isset ($login))
	    {
	        mysql_connect ("localhost", "root", "") or die ("Erreur de connexion à MySql"); //connexion à la base
	        mysql_select_db ("BOMB") or die ("Impossible de sélectionner cette base de donnée");//sélection de la base
	    }

    $resultat = mysql_query ("SELECT * FROM pilotes WHERE login = '".$login."'");
    while ($data = mysql_fetch_array($resultat) && ($trouve == FALSE))
	    {
	        if (($data['login'] == $login) && ($data['mdp'] == $password))
	         {
	            $redirection = ($data['Admin'] == 'o') ? './indexadmin.php' : './index.php' ;
	            include ($redirection);
	         }

	    }

    if ($trouve == FALSE)
    {
        echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">';
            echo '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >';
                echo'<head>';
                    echo '<title>Erreur de connexion</title>';
                    echo'<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />';
                echo'</head>';
                echo'<body>';
                    echo '<p>Erreur de login ou de mot de passe<p>';
                echo'</body>';
            echo'</html>';
    }

Posté : 05 mai 2009, 14:20
par Freddo31
marche pas non plus...voila les erreurs...
'.$sql.'
'.mysql_error()); $data = mysql_fetch_assoc($req); if($data['pwd'] != $password) { echo '

Mauvais login / password. Merci de recommencer
'; include('connexion.php'); // On inclut le formulaire d'identification exit; }else { session_start(); $_SESSION['login'] = $login; echo 'Vous etes bien logué'; // ici vous pouvez afficher un lien pour renvoyer // vers la page d'accueil de votre espace membres header("Location: ./accueil.html"); } }else { echo '

Vous avez oublié de remplir un champ.
'; include('login.htm'); // On inclut le formulaire d'identification exit; }*/ $login = $_POST['login']; $password = $_POST['password']; $trouve = FALSE; if (isset ($login)) { mysql_connect ("localhost", "root", "") or die ("Erreur de connexion à MySql"); //connexion à la base mysql_select_db ("BOMB") or die ("Impossible de sélectionner cette base de donnée");//sélection de la base } $resultat = mysql_query ("SELECT * FROM pilotes WHERE login = '".$login."'"); while ($data = mysql_fetch_array($resultat) && ($trouve == FALSE)) { if (($data['login'] == $login) && ($data['mdp'] == $password)) { $redirection = ($data['Admin'] == 'o') ? './indexadmin.php' : './index.php' ; include ($redirection); } } if ($trouve == FALSE) { echo ''; echo ''; echo''; echo ''; echo''; echo''; echo''; echo '

Erreur de login ou de mot de passe

'; echo''; echo''; } ?>

Posté : 05 mai 2009, 16:27
par dunbar
Il doit y avoir un sérieux soucis c'est pas normal que l'on voit le code php avec ton message d'erreur

Posté : 05 mai 2009, 17:34
par AB
Il y a un tuto d'inscription et de connexion dans un espace membre ici http://www.phpfrance.com/forums/voir_sujet-242539.php (avec le code html).
Il te suffira de peu de modifications pour inclure le champ admin et de faire une redirection avec un header suivant les cas.

EDIT : Ah oui le mode italique c'est pénible à lire à l'écran... d'où les remarques. Pour mieux pouvoir t'aider c'est mieux de mettre toutes les chances de ton côté. Au passage, cela vaut aussi pour les corrections de copies...