Aller au contenu

Espace membre problème


Woody18

Sujets conseillés

Bonjour,

Alors voilà j' ai essayer de refaire un script de membres par rapport à un script que j' ai trouver et donc j' ai tout modifier. Mon but est de pouvoir accéder à une page administrateur avec un login et mot de passe rentré manuellement dans la BDD afin de rajouter/supprimer des news par exemple ou autre ...

Le problème c' est que j' envoi mes informations avec ce code :

<div id="account">
<div class="form">
<form method="post"action="traitement.php">
<label for="compte">Compte :</label>
<input type="text" name="login"/><br/><br/>
<label for="pass">Password :</label>
<input type="password" name="pass"/><br/><br/>
;

<input type="submit" name="send" value="Envoyer"/>
</form>
</div>

Et une fois les informations envoyés ma page de traitement reste blanche. Je ne sais pas d' ou cela peut venir je suis presque sur que ce n' est pas grand chose mais ça fait deux jours que je cherche en vain une réponse. Je désespère !

<?php
//Transformation donnée POST en variable
$login = htmlspecialchars($_POST['login']);
$pass = htmlspecialchars($_POST['pass']);

//Vérification postage login et pass
if (isset($_POST['login']) AND isset($_POST['pass']))
{
//Connexion à base de donnée sql
include('sql.php');

//Tester si le couple login pass existe
$sql = 'SELECT count(*) FROM admin WHERE login="'.mysql_escape_string('$login').'" AND pass="'.mysql_escape_string('$pass').'"';
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$data = mysql_fetch_array($req);
mysql_free_result($req);
mysql_close();

//Vérification utilisateur membre
if ($data[0] == 1) {
session_start();
$_SESSION['login'] = ('$login');
header('Location: membre.php');
exit();
}

elseif ($data[0] == 0) {
$erreur = 'Compte non reconnu.';
}
}

else {
echo 'Un des champs de connexion est vide.';

}

?>

Je vous remercie d' avance pour votre aide.

Cordialement Fred.

Modifié par Woody18
Lien vers le commentaire
Partager sur d’autres sites

Salut,

Ton script a quelques problèmes... Je m'explique:

$sql = 'SELECT count(*) FROM admin WHERE login="'.mysql_escape_string('$login').'" AND pass="'.mysql_escape_string($pass).'"'; 

Ici, tu ne fais que compter le nombre d'entrées répondant aux critères du login et du mdp.

Ensuite, pourquoi utilises-tu mysql_free_result() pour une si petite requête ?

Tu utilises $data[0], pour avoir une telle variable, tu aurais dû utiliser mysql_fetch_row() qui t'aurait permis de récupérer les valeurs de la base de donnée en tableau. Etant donné que cette variable n'est pas valide, la condition que tu écris plus bas ne sert à rien. Peut-être que c'est une méthode que je ne connais pas, si c'est le cas, désolé.

Bref, voici ton code corrigé avec des explications afin que tu comprennes. Je te conseille de le refaire afin d'apprendre. Ton idée de base était bonne (vérifier si le nombre de donnée était plus grand que 1 avec double critère dans la requête, cependant, la méthode que je te propose d'utiliser est bien plus répandue et pratique dans le cas où il y aurait un souci de connexion. En bidouillant le code, on peut voir si c'est le mot de passe ou le nom d'utilisateur qui est mauvais. Après, c'est une question de goût.

<?php
//Transformation donnée POST en variable ; Ajout de addslashes dans le cas où il y aurait des apostrophes
$login = htmlspecialchars(addslashes($_POST['login']));
$pass = htmlspecialchars(addslashes($_POST['pass']));

//Vérification postage login et pass
if (isset($login) AND isset($pass))
{
//Connexion à base de donnée sql
include('sql.php');

//Tester si le couple login pass existe
// Cherchons dans la bdd le compte admin via le login
$requete = mysql_query("SELECT login, pass FROM admin WHERE login='".mysql_escape_string('$login')."'");
if(mysql_num_rows($requete) < 1) { // Si le nombre d'entrée est inférieur à 1
echo 'Compte non reconnu.';
}
else { // Sinon, cela signifie que le compte est reconnu, nous pouvons continuer
$admin = mysql_fetch_array($requete);
if ($admin['pass'] == $pass) { // Si le mot de passe de la bdd = à celui entré
session_start();
$_SESSION['login'] = $login;
header('Location: membre.php');
exit();
}
else { // Sinon, compte non reconnu.
echo 'Compte non reconnu.';
}
}
}

else {
echo 'Un des champs de connexion est vide.';
}
mysql_close();
?>

J'ai préféré refaire le code que d'expliquer car c'est relativement dur d'expliquer ce que l'on a en tête. Je me répète mais refais toi-même le script afin d'apprendre. Ce code est là afin de te permettre de comprendre comment t'y prendre.

J'espère avoir pu t'aider en tout cas.

Luan.

PS: pense à indenter ton code, quand tu auras énormément de conditions, si tu n'indentes pas, tu auras du mal...

PS2: quand tu utilises une fonction (genre addslashes() ou mysql_real_escape_string(), inutile de mettre les guillemets quand il y a une variable entre.

Modifié par Luan
Lien vers le commentaire
Partager sur d’autres sites

hummm en fait j' ai essayer de comprendre ton code ... de l' utiliser donc aussi ... Et toujours le même problème page traitement blanche... Je sais pas trop comment faire du coup. Je pense que le problème doit venir d' ailleurs. Il doit manquer une information peut être ? PArce que en fait même en n' entrant rien le else devrait afficher quelque chose en l' occurence : <<Un des champs et vide>>

Et la même pas...

Merci pour ta réponse en tout cas

Lien vers le commentaire
Partager sur d’autres sites

Salut,

Essaie d'enlever le exit(); Sinon, cela vent peut-être de l'hébergeur. Le fichier sql.php contient la connexion à la bdd je suppose ? Rien d'autre dedans qui pourrait embêter le script ?

Luan.

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir,

Oui le fichier sql.php contient bien la connexion à la BDD. Je sais pas du tout comment faire je trouve pas de solution. Cela vient peut être de mon wamp. Est ce que par hasard t' accepterai que je t' envoi mes fichier en archive pour essayer chez toi ?

Merci par avance

Lien vers le commentaire
Partager sur d’autres sites

Ca ne me dérange pas mais je doute que le problème vienne de MAMP. As-tu essayé d'enlever le exit(); ?

Au cas où, remplace cette ligne:

if (isset($login) AND isset($pass))

par celle-ci:

if (isset($login) AND isset($pass) AND isset($_POST['send']))

Si tu veux m'envoyer, les fichiers, ça ne me pose pas de problème.

Luan.

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...