script d'authentification : problème

Petit nouveau ! | 4 Messages

04 juin 2007, 20:31

Bonjour;
J'essaye de créer un script qui permet à une personne d'être authentifiée pour accéder à une page.
Je suis sous wamp et dreamweaver v9.
J'ai créé la base sous phpmyadmin et fait insérer un couple de login/pass.
La page d'accueil mest sensée mener vers log.php sensée à son tour rediriger l'internaute en fonction de son mot de passe et login :
s'il est correct -> page reussite.html sinon -> page erreur.htm
Mon problème : je suis bloqué sur log.php qui reste une page vide.
Voyez vous l'erreur? Merci.

Voici le contenu et structure de l'unique table de la base authentifier :


page log.php

Code : Tout sélectionner

<?php //définir les paramètres define("MYHOST","localhost"); define("MYUSER","root"); define("MYPASS",""); define("MYBASE", "authentification"); define("MYTABLE", "client"); //vérifier si les données sont postées if(isset($_POST['login']) && isset($_POST['pass'])) { $login=mysql_escape_string($_POST['login']); $pass=mysql_escape_string($_POST['pass']); } else { echo "mot de passe ou login manquants"; } //se connecter à la base $idcom=@mysql_connect(MYHOST,MYUSER,MYPASS,MYBASE,MYTABLE); if(!$idcom) { echo "Connexion impossible à la base"; } //faire une requête $requete="select * from client where login='$login' AND pass='$pass'"; $idresult=@mysql_query($requete,$idcom); //évaluer les résultats de la requête if(!idresult) { header("Location: erreur.htm"); // redirection à la page d'échec } else { header("Location: reussite.html"); // redirection à la page d'accès } //fermer la connexion à la base mysql_close($idcom); ?>

ViPHP
ViPHP | 5924 Messages

04 juin 2007, 21:38

Pourquoi n'enlèverais-tu pas tout d'abord les @ qui pourrissent l'exécution, en les remplacant par un or die('Erreur : ' . mysql_error()); derrière mysql_query() ?

Petit nouveau ! | 4 Messages

04 juin 2007, 21:41

Voici le nouveau code, mais le même problème persiste.
<?php

//vérifier si les données sont postées
if(isset($_POST['login']) && isset($_POST['pass']))
{
    $login=mysql_escape_string($_POST['login']);
    $pass=mysql_escape_string($_POST['pass']);
}
else 
{
    echo "mot de passe ou login manquants";
}

//se connecter à la base
mysql_connect("localhost", "mysql_user", "mysql_password") or
die("Impossible de se connecter : " . mysql_error());
mysql_select_db("authentifier");

//faire une requête
$requete="select * from client where login='$login' AND pass='$pass'";
$result=@mysql_query($requete);
if(!$result)
{
   echo 'Impossible d\'exécuter la requête : ' . mysql_error();
   exit;
}

//aller chercher la ligne de requête
$row = mysql_fetch_row($result);

//si on ne la trouve pas
if(!$row)
{
     header("Location: erreur.htm"); // redirection à la page erreur
}
//sinon
else 
{
     header("Location: reussite.html"); // redirection à la page reussite
}

//liberation de mémoire
mysql_free_result($result);
?>

ViPHP
ViPHP | 5924 Messages

04 juin 2007, 21:47

Ah, au temps pour moi, je n'avais pas vu que tu testais les valeurs de retour. Non, rien à dire. :)
Bon, hé bien il te reste plus qu'à disséminer des echo dans ton script pour savoir dans quelles conditions l'interpréteur entre. Et faire un var_dump() sur les variables les plus importantes ($_POST,$row, $result).
Au passage, vérifie que tu as mis l'error_reporting sur E_ALL dans ton php.ini, ca peut servir.

Petit nouveau ! | 4 Messages

04 juin 2007, 21:59

J'ai des doutes sur mysql_connect("localhost", "mysql_user", "mysql_password").
Peut être faut-il définir l'user en root et le pass en ""?

ViPHP
ViPHP | 5924 Messages

04 juin 2007, 22:39

Peut être faut-il définir l'user en root et le pass en ""?
C'est à dire ?

Petit nouveau ! | 4 Messages

04 juin 2007, 22:52

J'ai fait qqes modifs, mais j'ai toujours la page vide sous dreamweaver v9.
Ma base est pourtant bien créé et mon wamp marche à 100%.
Sous zend studio 5.5 j'ai le message d'erreur suivant :
mot de passe ou login manquants
Warning: Cannot modify header information - headers already sent by (output started at E:\Documents and Settings\teycir\Bureau\exo_authentification\log.php:15) in E:\Documents and Settings\teycir\Bureau\exo_authentification\log.php on line 38
Mais c'est normal, je suis sous débogeur interne.
<?php
//définition des paramètres
define("MYHOST","localhost");
define("MYUSER","root");
define("MYPASS","");

//vérifier si les données sont postées
if(isset($_POST['login']) && isset($_POST['pass']))
{
    $login=mysql_escape_string($_POST['login']);
    $pass=mysql_escape_string($_POST['pass']);
}
else 
{
    echo "mot de passe ou login manquants";
}

//se connecter à la base
mysql_connect(MYHOST, MYUSER, MYPASS) or
die("Impossible de se connecter : " . mysql_error());
mysql_select_db("authentifier");

//faire une requête
$requete="select * from client where login='$login' AND password='$pass'";
$result=@mysql_query($requete);
if(!$result)
{
   echo 'Impossible d\'exécuter la requête : ' . mysql_error();
   exit;
}

//aller chercher la ligne de requête
$row = mysql_fetch_row($result);

//si on ne la trouve pas
if(!$row)
{
     header("Location: erreur.htm"); // redirection à la page erreur
}
//sinon
else 
{
     header("Location: reussite.html"); // redirection à la page reussite
}

//liberation de mémoire
mysql_free_result($result);
?>

ViPHP
ViPHP | 5924 Messages

04 juin 2007, 23:09

J'ai fait qqes modifs, mais j'ai toujours la page vide sous dreamweaver v9.
Dreamweaver est sensé interpréter le php ???

Mammouth du PHP | 1885 Messages

05 juin 2007, 01:53

 echo "mot de passe ou login manquants"; 
Pourquoi continuer l'exécution du script s'il y a une erreur du genre?
Prévois le coup et arrête l'exécution du script ou redirige sur une autre page. Tu ne peux continuer normalement avec des données manquantes.

De plus, as-tu bien créer ton formulaire à la page précédente? Tu peux utiliser echo, exit, print_r() et/ou var_dump() pour examiner le contenu des variables $_POST récupérée.
La programmation est l'expression de la poésie d'un programmeur
Génération PHP