Page 1 sur 2
login
Posté : 12 avr. 2010, 11:57
par aquiev
Bonjour, j'ai un pb, je suis en train de créer un formulaire permettant de se logger pour un accés au site, cependant le code que j'ai trouvé et modifié comporte une erreur, car lors de la connexion le serveur internet s'arréte, cependant le login et mot de passe sont bien présent dans ma base de données.
Merci de m'aider c'est assez urgent.
Voici le code :
<?php
// on teste si le visiteur a soumis le formulaire de connexion
if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) {
$base = mysql_connect ('localhost', 'root', '');
mysql_select_db ('djp', $base);
// on teste si une entrée de la base contient ce couple login / pass
$sql = 'SELECT count(*) FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'" AND pass_md5="'.md5(mysql_escape_string($_POST['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();
// si on obtient une réponse, alors l'utilisateur est un membre
if ($data[0] == 1) {
session_start();
$_SESSION['login'] = $_POST['login'];
//<p><strong>Vous êtes bien connecté !!!!</strong></p>
header('Location: deco.php');
exit();
}
// si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
elseif ($data[0] == 0) {
$erreur = 'Compte non reconnu.';
}
// sinon, alors la, il y a un gros problème :)
else {
$erreur = 'Probème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
}
}
else {
$erreur = 'Au moins un des champs est vide.';
}
}
?>
<html>
<head>
<title>Accueil</title>
</head>
<body>
Connexion à l'espace membre :<br />
<form action="index.php" method="post">
Login : <input type="text" name="login" value="<?php if (isset($_POST['login'])) echo htmlentities(trim($_POST['login'])); ?>"><br />
Mot de passe : <input type="password" name="pass" value="<?php if (isset($_POST['pass'])) echo htmlentities(trim($_POST['pass'])); ?>"><br />
<input type="submit" name="connexion" value="Connexion">
</form>
<a href="inscription.php">Vous inscrire</a>
<?php
if (isset($erreur)) echo '<br /><br />',$erreur;
?>
<a href="formulaire.php?id=1"><p><strong>Bon d'intervention sur site : fiche à remplir</strong></p></a>
</body>
</html>
Re: login
Posté : 12 avr. 2010, 12:07
par visualight
Bonjour,
Quel est le message d'erreur que tu rencontre ?
Pourrais tu mettre ton code dans une balise php ou code (voir bouton quand tu édites ta page) pour que ce soit plus clair ?
J'ai remarqué que tu faisais appel à session_start(); en plein milieu de ton code.
Le session_start(); doit toujours être au dessus de la page :
<?php
session_start();
... ton code
?>
De plus je ne sais pas si ton système d'affichage d'erreur fonctionne :
if (isset($erreur)) echo ' ',$erreur;
// Deviens
if (isset($erreur)) {
echo $erreur;
}
// OU
if (isset($erreur)) {
echo 'Erreur : '.$erreur;
}
// OU
if (isset($erreur)) echo $erreur;
// OU
if (isset($erreur)) echo 'Erreur : '.$erreur;
A+
raph
Re: login
Posté : 12 avr. 2010, 14:01
par AB
J'ai remarqué que tu faisais appel à session_start(); en plein milieu de ton code.
Le session_start(); doit toujours être au dessus de la page :
Non, pas nécessairement.
@aquiev
Il y a un
tuto complet ici
Sinon après $data = mysql_fetch_array($req); écris var_dump($data); pour voir ce que cela retourne.
Re: login
Posté : 12 avr. 2010, 14:04
par aquiev
Merci à tous les 2 alors pour répondre je n'ai pas vraiment de msg d'erreur cependant, lorsque je m'identifie ma page localhost cherche longtemps e c'est le navigateur qui fini par se fermer.
Revoici le code :
<?php
// on teste si le visiteur a soumis le formulaire de connexion
if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) {
$base = mysql_connect ('localhost', 'root', '');
mysql_select_db ('djp', $base);
// on teste si une entrée de la base contient ce couple login / pass
$sql = 'SELECT count(*) FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'" AND pass_md5="'.md5(mysql_escape_string($_POST['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();
// si on obtient une réponse, alors l'utilisateur est un membre
if ($data[0] == 1) {
session_start();
$_SESSION['login'] = $_POST['login'];
//<p><strong>Vous êtes bien connecté !!!!</strong></p>
header('Location: deco.php');
exit();
}
// si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
elseif ($data[0] == 0) {
$erreur = 'Compte non reconnu.';
}
// sinon, alors la, il y a un gros problème :)
else {
$erreur = 'Probème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
}
}
else {
$erreur = 'Au moins un des champs est vide.';
}
}
?>
<html>
<head>
<title>Accueil</title>
</head>
<body>
Connexion à l'espace membre :<br />
<form action="index.php" method="post">
Login : <input type="text" name="login" value="<?php if (isset($_POST['login'])) echo htmlentities(trim($_POST['login'])); ?>"><br />
Mot de passe : <input type="password" name="pass" value="<?php if (isset($_POST['pass'])) echo htmlentities(trim($_POST['pass'])); ?>"><br />
<input type="submit" name="connexion" value="Connexion">
</form>
<a href="inscription.php">Vous inscrire</a>
<?php
if (isset($erreur)) echo '<br /><br />',$erreur;
?>
<a href="formulaire.php?id=1"><p><strong>Bon d'intervention sur site : fiche à remplir</strong></p></a>
</body>
</html>
Re: login
Posté : 12 avr. 2010, 14:10
par visualight
Teste le retour de $DATA comme l'as dit AB.
Essaye aussi de voir en mettant ton mysql_close(); à la fin du document (pour tester).
Re: login
Posté : 12 avr. 2010, 14:22
par aquiev
Merci.
Cependant le
mysql_close();
a la fin ne fonctionne pas.
De plus lorsque je met $DATA cela ne change rien et n'affiche rien, ça continue à faire exactement le même.
Re: login
Posté : 12 avr. 2010, 14:42
par AB
if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) {
Il y a des ')' en trop dans la ligne ci-dessus.
Sinon je t'ai donné un lien plus haut vers un tuto complet (avec code fonctionnel qu'il te suffit de copier coller pour tester)

Re: login
Posté : 12 avr. 2010, 14:52
par aquiev
Je vais tester ton tuto, cependant j'aurai bien voulu savoir l'erreur de mon code.
Pour ce qui est des parenthéses il y en a autant d'ouvrante que de fermante.
Merci
Re: login
Posté : 12 avr. 2010, 15:03
par aquiev
Je ne parviens à adapter ton tuto a mon site, il n'effectue rien et ne rempli pas ma base de données cependant j'ai bien changer les informations pour faire correspondre.
De plus je débute en php donc j'ai encore bien du mal.
Re: login
Posté : 12 avr. 2010, 15:22
par AB
Pour ce qui est des parenthéses il y en a autant d'ouvrante que de fermante.
Oui tu as raison j'ai été un peu dérouté par ta façon de faire (redondant de faire isset suivit de !empty) et de séparer les conditions en plusieurs blocs mais ce n'est pas une erreur, juste un peu bizarre dans ce contexte.
Pour le tuto, ben prends ton temps. Les codes d'authentification et d'inscription doivent être maîtrisés avant de partir "dans la nature".
Qu'est-ce qui ne fonctionne pas quand tu essaies le code du tuto ? Essaies-le d'abord dans une page vierge avant de tenter une adaptation.
Au minimum cela devrait te retourner des messages d'erreurs si cela ne fonctionne pas.
Soit patient, tu te dis débutant et dix minutes après avoir regardé le tuto tu dis que cela ne fonctionne pas... pour un débutant faut un peu plus de dix minutes quand même...
Et essayes d'être précis quand tu dis que cela ne fonctionne pas sinon on ne pourras pas t'aider

Re: login
Posté : 12 avr. 2010, 16:06
par aquiev
Il est vrai que je n'ai peu etre pas passé beaucoup de tps sur le tuto, mais c'est parce que j'aimerai comprendre le probléme de mon code, car je ne le trouve pas. Si vraiment je ne parviens pas a trouver alors je me poserai plus longuement sur ton tuto;
Merci
Re: login
Posté : 12 avr. 2010, 16:10
par aquiev
Désormais je n'ai plus le même message d'erreur cad je n'ai plus "Appache HTTP serveur à cessé de fonctionner...." mais lorsque je m'identifie sur le site ac login et mot de passe existant ds la base de données, il essaie de charger la page mais reste sur la même (cad celle d'identification) en la remettant à vide!!!!
Merci de m'aider j'ai besoin de vous
Re: login
Posté : 12 avr. 2010, 16:15
par AB
Vérifies que ton serveur d'évaluation est démarré et fonctionne correctement. Tu utilises quoi, wamp ou easyphp ?
Re: login
Posté : 12 avr. 2010, 16:21
par aquiev
J'utilise wamp server,
il fonctionne correctement car mon formulaire d'inscription lui fonctionne mais c'est mon formulaire d'identification qui ne veux pas fonctionner, d'ou le fait que j'en conclu que ca ne viens pas de wamp
Re: login
Posté : 12 avr. 2010, 16:43
par aquiev
A premiere vue de ce que je viens de voir, le pb serai au niveau de la recherche d'identification si elle est correct ou non , le bouton de renvoie fonctionne bien, mais il ne parviens peut etre pas a faire le lien entre la bdd et les informations rentrées. Cependant je ne vois pas l'erreur dans le code.
Merci d'avance!