IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

problème avec interface login [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 15
    Par défaut problème avec interface login
    Bonjour,

    Tout d'abord je dois vous idre que je suis novice en php, mon problème c'est que je dois crée une page "index.php" dont laquelle je dois taper le nom de la société et qui va me diriger vers la page "connection.php" pour que les employé de cette société peuvent s'identifie si le nom de la société est correcte (selon la base de donnée)
    J'ai crée index.php et elle marche, voila son code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    <?php
    ob_start();
    session_start();
    ?>
    <?php
    if (isset($_POST['Ok']) && $_POST['Ok'] == 'Ok') {
    	if ((isset($_POST['nomsociete']) && !empty($_POST['nomsociete']))) {
    	$base = mysql_connect ("localhost", "root", "");
    	mysql_select_db ("xxxx", $base);
    	// on teste si une entrée de la base contient ce couple login / pass
    	$sqll = 'SELECT * FROM societe WHERE nomsociete="'.mysql_escape_string($_POST['nomsociete']).'"';
    	$reqq = mysql_query($sqll) or die('Erreur SQL !<br />'.$sqll.'<br />'.mysql_error());
    	$data = mysql_fetch_array($reqq);
    	mysql_free_result($reqq);
    	mysql_close();
    	// si on obtient une réponse, alors l'utilisateur est un membre
    	for ($i = 1; $i <= 100; $i++) {
    	if ($data[0] == $i) {
    		$_SESSION['nomsociete'] = $_POST['nomsociete'];
    		header('Location: connection.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 = 'Client non reconnu.';
    	}
    		// sinon, alors la, il y a un gros problème :)
    	else {
    		$erreur = 'Problè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.';
    	}
    }
    ?>
     
     
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Transparence Informatique</title>
    <link rel="Shortcut Icon" href="img/logo.png">
    <link href="css/reset.css" rel="stylesheet" type="text/css" media="screen"></link>
    <link href="css/Style.css" rel="stylesheet" type="text/css" media="screen"></link>
    </head>
    <body>
    	<header class="header">
    			<a href="http://google.com/" rel="nofollow noopener noreferrer" target="_blank">
    				<img src="img/header.png">
    			</a>
    	</header>
    	<div class="centered">
    		<section>
    			<div class="top">
    			</div>
    			<div class="middle">
    				<form action="index.php" method="post">
    				<p><label for="login">Client : </label><input type="text" name="nomsociete" value="<?php if (isset($_POST['nomsociete'])) echo htmlentities(trim($_POST['nomsociete'])); ?>" placeholder=" Nom du client"></p>
    				<p><input type="submit" name="Ok" value="Ok" class="send"></p>
    				</form>
    			</div>
    			<div class="bottom">
    			</div>
    		</section>
    	</div>
    </body>
    	<?php
    if (isset($erreur)) echo '<br /><br />',$erreur;
    ob_end_flush();
    ?>
    elle me dirige après vers la page connection.php qui ne fonction pas je tape le login et le mot de passe et rien ne se passe même s'il sont correcte il ne me dirige pas vers la page membre.php, voila son code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
     
    <?php
    session_start();
    if (!isset($_SESSION['nomsociete']) && $_SESSION["mail"]) {
    	header ('Location: membre.php');
    	exit();
    }
    ?>
     
    <?php
    // on teste si le visiteur a soumis le formulaire de connexion
    if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
    	if ((isset($_POST['mail']) && !empty($_POST['mail'])) && (isset($_POST['mdp']) && !empty($_POST['mdp']))) {
    	$base = mysql_connect ("localhost", "root", "");
    	mysql_select_db ("modul", $base);
    	// on teste si une entrée de la base contient ce couple login / pass
    	$sql = 'SELECT * FROM users WHERE mail="'.mysql_escape_string($_POST['mail']).'" AND mdp="'.mysql_escape_string($_POST['mdp']).'"';
    	//$sql = 'SELECT mail, mdp, nomsociete FROM users inner join societe on users.idsociete=societe.idsociete where mail="'.mysql_escape_string($_POST['mail']).'" AND mdp="'.mysql_escape_string($_POST['mdp']).'"';
    	$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
    	for ($i = 1; $i <= 100; $i++) {
    	if ($data[0] == $i) {
    		$_SESSION['mail'] = $_POST['mail'];
    		$_SESSION['mdp'] = $_POST['mdp'];
    		header('Location: membre.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 = 'Problè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.';
    	}
    }
    ?>
     
     
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Transparence Informatique</title>
    <link rel="Shortcut Icon" href="img/logo.png">
    <link href="css/reset.css" rel="stylesheet" type="text/css" media="screen"></link>
    <link href="css/Style.css" rel="stylesheet" type="text/css" media="screen"></link>
    </head>
    <body>
    	<header class="header">
    			<a href="http://transinformatique.com/" rel="nofollow noopener noreferrer" target="_blank">
    				<img src="img/header.png">
    			</a>
    		<?php echo 'helloooo '.$_SESSION['nomsociete'].'';?>
    	</header>
    	<div class="centered">
    		<section>
    			<div class="top">
    			</div>
    			<div class="middle">
    				<form action="connection.php" method="post">
    				<p><label for="login">Votre Mail : </label><input type="text" name="mail" value="<?php if (isset($_POST['mail'])) echo htmlentities(trim($_POST['mail'])); ?>" placeholder=" Votre mail"></p>
    				<p><label for="mdp">Mot de passe : </label><input type="password" name="mdp" value="<?php if (isset($_POST['mdp'])) echo htmlentities(trim($_POST['mdp'])); ?>" placeholder=" Votre Mot de passe"></p>
    				<p><input type="submit" name="connexion" value="Connexion" class="send"></p>
    				</form>
    			</div>
    			<div class="bottom">
    			</div>
    		</section>
    	</div>
    </body>

    Aidez moi s'il vous plait

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 93
    Par défaut
    Dans un premier temps à quoi te sert cette boucle dans les 2 fichiers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for ($i = 1; $i <= 100; $i++) {
    Ensuite dans ton fichier connection.php remplace cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (!isset($_SESSION['nomsociete']) && $_SESSION["mail"]) {
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (isset($_SESSION['nomsociete'], $_SESSION['mail'])) {
    et je pense que ca devrait être bon

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 15
    Par défaut
    Citation Envoyé par Nono1nd Voir le message
    Dans un premier temps à quoi te sert cette boucle dans les 2 fichiers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for ($i = 1; $i <= 100; $i++) {
    Ensuite dans ton fichier connection.php remplace cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (!isset($_SESSION['nomsociete']) && $_SESSION["mail"]) {
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (isset($_SESSION['nomsociete'], $_SESSION['mail'])) {
    et je pense que ca devrait être bon

    Merciii maintenant ça marche
    pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for ($i = 1; $i <= 100; $i++) {
    je l'ai fais parce que si je l'enleve j'obtiens cette erreur :
    Problème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.
    alors que j'ai seulement un membre avec le même identifiants

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 93
    Par défaut
    Ok donc c'est bien ce que je pensais, la boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for ($i = 1; $i <= 100; $i++) {
    n'est pas bonne. As tu codé toi même cette partie ou tu l'as récupéré sur internet ?
    En gros ta boucle fait perdre du temps car tu passes 100 fois sans aucune raison, et la comparaison semble comparer l'identifiant de l'utilisateur avec le nombre d'itération de la boucle ce qui n'est pas logique. Et lorsque tu auras plus de 100 utilisateurs ca ne marchera plus.
    Je ne sais pas si c'est très clair, si tu veux je peux essayer de détailler.
    Quoiqu'il en soit la boucle n'as pas lieu d'être et la comparaison n'est pas bonne, cela va te poser des soucis par la suite il faut que tu corriges ce point.

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 15
    Par défaut
    Citation Envoyé par Nono1nd Voir le message
    Ok donc c'est bien ce que je pensais, la boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for ($i = 1; $i <= 100; $i++) {
    n'est pas bonne. As tu codé toi même cette partie ou tu l'as récupéré sur internet ?
    En gros ta boucle fait perdre du temps car tu passes 100 fois sans aucune raison, et la comparaison semble comparer l'identifiant de l'utilisateur avec le nombre d'itération de la boucle ce qui n'est pas logique. Et lorsque tu auras plus de 100 utilisateurs ca ne marchera plus.
    Je ne sais pas si c'est très clair, si tu veux je peux essayer de détailler.
    Quoiqu'il en soit la boucle n'as pas lieu d'être et la comparaison n'est pas bonne, cela va te poser des soucis par la suite il faut que tu corriges ce point.
    j'ai codé cette partie moi même, après avoir l'erreur, et je n'ai pas trouver d'autres solutions c'est pourquoi je l'ai garder

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 93
    Par défaut
    Ok donc je vais essayer d'expliquer pourquoi ton code ne va pas et de t'expliquer la marche à suivre pour que cela fonctionne correctement.

    Sur ta première page tu récupère toutes les sociétés qui possède le nom saisie par l'utilisateur dans le formulaire, c'est ta variable $data qui va stocker ces informations. Pour le moment tout va bien. Vient ensuite ta boucle qui va tester sur l'iterateur $i est égale à la première valeur de ton tableau $data. Je pense que $data[0] correspond à l'identifiant de société dans ta base de données (sans certitude car je ne connais pas ta structure de base de donnée). Si la société recherché possède un identifiant inférieur à 100 alors il va y avoir un moment ou la comparaison sera vrai mais si il est supérieur à 100 ca ne marchera pas. Ensuite ton else if ($data[0] == 0) va comparer l'identifiant de la ligne retourner avec la valeur 0 mais pas vérifier qu'il y a 0 utilisateur retourné, puisque si il n'y a pas d'utilisateur retourné alors $data[0] n'existera pas. Enfin ton dernier else correspond aux autres cas possible.

    La logique de l'algorithme serait plutôt de vérifier si mysql_fetch_array te renvoie bien une donnée, si tu as une données alors c'est que la société éxiste et à ce moment là récupère les variables de session et redirige vers la page suivante. Sinon c'est que la société n'existe pas et informe l'utilisateur que la société n'a pas été trouvé. La logique sera la même pour la page de connection avec le login est le mot de passe. Petit précision mysql_fetch_array te renvoie la première ligne trouvé, si tu veux toutes les autres il faut faire une boucle while, mais ce n'est pas nécessaire dans ce cas.

    PS : mysql_fetch_array est déprécié, je te conseille de te tourner plutôt du coté de PDO, tu trouveras des tutos facilement sur internet.

  7. #7
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 15
    Par défaut
    Citation Envoyé par Nono1nd Voir le message
    Ok donc je vais essayer d'expliquer pourquoi ton code ne va pas et de t'expliquer la marche à suivre pour que cela fonctionne correctement.

    Sur ta première page tu récupère toutes les sociétés qui possède le nom saisie par l'utilisateur dans le formulaire, c'est ta variable $data qui va stocker ces informations. Pour le moment tout va bien. Vient ensuite ta boucle qui va tester sur l'iterateur $i est égale à la première valeur de ton tableau $data. Je pense que $data[0] correspond à l'identifiant de société dans ta base de données (sans certitude car je ne connais pas ta structure de base de donnée). Si la société recherché possède un identifiant inférieur à 100 alors il va y avoir un moment ou la comparaison sera vrai mais si il est supérieur à 100 ca ne marchera pas. Ensuite ton else if ($data[0] == 0) va comparer l'identifiant de la ligne retourner avec la valeur 0 mais pas vérifier qu'il y a 0 utilisateur retourné, puisque si il n'y a pas d'utilisateur retourné alors $data[0] n'existera pas. Enfin ton dernier else correspond aux autres cas possible.

    La logique de l'algorithme serait plutôt de vérifier si mysql_fetch_array te renvoie bien une donnée, si tu as une données alors c'est que la société éxiste et à ce moment là récupère les variables de session et redirige vers la page suivante. Sinon c'est que la société n'existe pas et informe l'utilisateur que la société n'a pas été trouvé. La logique sera la même pour la page de connection avec le login est le mot de passe. Petit précision mysql_fetch_array te renvoie la première ligne trouvé, si tu veux toutes les autres il faut faire une boucle while, mais ce n'est pas nécessaire dans ce cas.

    PS : mysql_fetch_array est déprécié, je te conseille de te tourner plutôt du coté de PDO, tu trouveras des tutos facilement sur internet.

    Merciiii beaucoup, ton explication m'a beaucoup aider a résoudre ce problème que j'ai réglé grace a mysql_num_rows();

    voila le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    if (isset($_POST['Ok']) && $_POST['Ok'] == 'Ok') {
    	if ((isset($_POST['nomsociete']) && !empty($_POST['nomsociete']))) {
    	$base = mysql_connect ("localhost", "root", "");
    	mysql_select_db ("modul", $base);
    	// on teste si une entrée de la base contient ce couple login / pass
    	$sqll = 'SELECT nomsociete FROM societe WHERE nomsociete="'.mysql_escape_string($_POST['nomsociete']).'"';
    	$reqq = mysql_query($sqll) or die('Erreur SQL !<br />'.$sqll.'<br />'.mysql_error());
    	$num_rows = mysql_num_rows($reqq);
     
    	$dataa = mysql_fetch_array($reqq);
    	mysql_free_result($reqq);
    	mysql_close();
    	// si on obtient une réponse, alors l'utilisateur est un membre
    	if ($num_rows == 1) {
    		$_SESSION['nomsociete'] = $_POST['nomsociete'];
    		header('Location: connection.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 ($num_rows == 0) {
    		$erreur = 'Client non reconnu.';
    	}
    		// sinon, alors la, il y a un gros problème :)
    	else {
    		$erreur = 'Problè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.';
    	}
    }
    Merci encore une fois pour le temps que tu m'as accordé
    Bonne journée

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 93
    Par défaut
    Aucun soucis, c'est avec plaisir que j'apporte mon aide, et je suis content que tu ai compris mes explications, cela t'as permis de résoudre ton problème par toi même
    La fonction mysql_num_rows est effectivement une solution (parmis tant d'autres). Cependant je t'invite quand même à te tourner du coté de PDO pour tout les traitements de la base de données, les fonctions que tu utilises sont dépréciées et n’existe plus dans la version 7 de PHP.

    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec interface Phidget
    Par miitch dans le forum Général Java
    Réponses: 4
    Dernier message: 26/06/2012, 16h49
  2. Problèmes avec plusieurs Login et Mots de passe
    Par joesaab dans le forum Général Java
    Réponses: 4
    Dernier message: 15/05/2012, 16h03
  3. [CakePHP] Problème avec les logins
    Par Charvalos dans le forum Bibliothèques et frameworks
    Réponses: 8
    Dernier message: 18/11/2011, 13h31
  4. probléme avec interface enum
    Par amazircool dans le forum Langage
    Réponses: 4
    Dernier message: 28/04/2007, 16h47
  5. [débutant][servlet]Problème avec Servlet login
    Par stago dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 10/05/2005, 00h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo