login

aquiev
Invité n'ayant pas de compte PHPfrance

12 avr. 2010, 11:57

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>

Eléphant du PHP | 428 Messages

12 avr. 2010, 12:07

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

ViPHP
AB
ViPHP | 5818 Messages

12 avr. 2010, 14:01

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.

aquiev
Invité n'ayant pas de compte PHPfrance

12 avr. 2010, 14:04

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> 

Eléphant du PHP | 428 Messages

12 avr. 2010, 14:10

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).

aquiev
Invité n'ayant pas de compte PHPfrance

12 avr. 2010, 14:22

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.

ViPHP
AB
ViPHP | 5818 Messages

12 avr. 2010, 14:42

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) :wink:

aquiev
Invité n'ayant pas de compte PHPfrance

12 avr. 2010, 14:52

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

aquiev
Invité n'ayant pas de compte PHPfrance

12 avr. 2010, 15:03

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.

ViPHP
AB
ViPHP | 5818 Messages

12 avr. 2010, 15:22

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 :wink:

aquiev
Invité n'ayant pas de compte PHPfrance

12 avr. 2010, 16:06

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

aquiev
Invité n'ayant pas de compte PHPfrance

12 avr. 2010, 16:10

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

ViPHP
AB
ViPHP | 5818 Messages

12 avr. 2010, 16:15

Vérifies que ton serveur d'évaluation est démarré et fonctionne correctement. Tu utilises quoi, wamp ou easyphp ?

aquiev
Invité n'ayant pas de compte PHPfrance

12 avr. 2010, 16:21

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

aquiev
Invité n'ayant pas de compte PHPfrance

12 avr. 2010, 16:43

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!