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

Langage PHP Discussion :

Problème d'identification (password+mail)


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 23
    Points : 13
    Points
    13
    Par défaut Problème d'identification (password+mail)
    Bonjour,

    Je suis en train de coder une page d'identification où il suffit donc d'entrer mail + password pour être identifier.
    J'ai une base de données comprenant quelques identifiants prédéfinis afin de vérifier si ça marche ou non.
    Le problème est que non, malgré le fait que ma requête fonctionne sous SQL.
    Voici ma partie de 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
    <?php
     
    	$host = "localhost";
    	$user = "root";
    	$passwd = "";
    	$database = "librairie";
     
    	$conn = mysqli_connect($host, $user, $passwd)
    		or die ("Erreur de connection");
     
    $StrQuery="SELECT mailCli FROM clients WHERE mailCli = '".$_POST['email']."'";
    $result=mysqli_query($conn,$StrQuery);
    print_r($result);
     
    if ($result != NULL)
    {
    echo "verif password";
    } // fin du if 
     
    else 
    { 
    echo "inscription";
    }// fin du else 
     
    ?>

    Avec ceci, le message "inscription" s'affiche systématiquement, même si le champs reste vierge...
    Je souhaite juste affiché un message pour le moment, je pense qu'une fois ce problème résolu, ça ira tout seul.

    Merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 453
    Points : 550
    Points
    550
    Par défaut
    Essayez avec:

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $result=mysqli_query($conn,$StrQuery);
    $result=mysqli_fetch_row($result);
    $result=$result[0];

  3. #3
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Citation Envoyé par PHP Manual
    Cette fonction retourne TRUE en cas de succès, FALSE en cas d'échec. Pour SELECT, SHOW, DESCRIBE ou EXPLAIN, mysqli_query() retournera un résultat sous la forme d'un objet.
    mysqli_query() ne retourne JAMAIS NULL

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    Merci de m'aider

    Warning: mysqli_fetch_row() expects parameter 1 to be mysqli_result, boolean given in D:\www\demo\fonctionlogin.php on line 23


    Il s'agit de la ligne :
    $result=mysqli_fetch_row($result);

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par darkstar123456 Voir le message
    mysqli_query() ne retourne JAMAIS NULL
    Ah ! Ceci explique cela...
    Je vais voir ce que je peux faire et je tiens au courant

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 453
    Points : 550
    Points
    550
    Par défaut
    Pourquoi n'utilisez-vous pas les fonctions mysql au lieu des fonctions mysqli ? o_O

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    Bon bah j'ai toujours le même problème, je dois mal faire quelque chose
    Avec : if ($result == TRUE) il me retourne "inscription"
    Et avec if ($result = TRUE) il me retourne "verif password"

    Citation Envoyé par sachav Voir le message
    Pourquoi n'utilisez-vous pas les fonctions mysql au lieu des fonctions mysqli ? o_O
    A vrai dire je suis en formation, le formateur nous a conseillé comme ca donc comme je suis bête et discipliné...

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 453
    Points : 550
    Points
    550
    Par défaut
    Heu... essayez :

    Code php : 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
     
     
    $host = "localhost";
    $user = "root";
    $passwd = "";
    $database = "librairie";
     
    $conn = mysql_connect($host, $user, $passwd)
    or die ("Erreur de connection");
     
    $StrQuery="SELECT mailCli FROM clients WHERE mailCli = '".$_POST['email']."'";
     
    $result=mysql_query($conn,$StrQuery);
    $result=mysql_fetch_array($result);
    $result=$result[0];
     
    print_r($result);
     
    if ($result != NULL)
    {
    echo "verif password";
    } // fin du if
     
    else
    {
    echo "inscription";
    }// fin du else

  9. #9
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Citation Envoyé par NeiBaF Voir le message
    Bon bah j'ai toujours le même problème, je dois mal faire quelque chose
    Avec : if ($result == TRUE) il me retourne "inscription"
    Et avec if ($result = TRUE) il me retourne "verif password"


    A vrai dire je suis en formation, le formateur nous a conseillé comme ca donc comme je suis bête et discipliné...
    double égalité => test
    simple égalité => assignation


    donc tester if ($result = TRUE) sera toujours vrai vu qu'il s'agit d'assigner TRUE à la variable $result

    Sinon pareil, je conseil d'utiliser mysql_ plutot que mysqli_, je me suis jamais bien intéressé aux différences car je sais que mysql_ est beaucoup plus simple et possède beaucoup plus de fonctions...

    D'ailleurs dans ce cas-ci, il suffit alors de tester grace à mysql_num_rows() juste apres le mysql_query()

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    J'ai fais toute une batterie de tests, rien de bien concluant.
    En revanche j'ai vu que j'avais oublié de me connecter à ma base j'ai donc ajouté "mysqli_select_db($conn, $database);" en pensant resoudre mon problème, mais que néni.
    La solution de sachav ne fonctionne pas non plus

    Merci à vous de m'aider en tous les cas. Je prends bonne note de tes remarques darkstar123456

  11. #11
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Effectivement, il y a des erreurs et du mix mysql_ / mysqli_ dans le code de sachav

    Voici une tite correction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    // Connexion à la base de données MySQL
    $conn = mysql_connect($host, $user, $passwd) or die ("Erreur de connection");
    $conn = mysql_select_db($db_name, $conn) or die(mysql_error());
     
    // Requête
    $sql = "SELECT mailCli FROM clients WHERE mailCli = '".$_POST['email']."'";
    $result = mysql_query($sql) or die("ERROR SQL : <br /> ".$sql."<br />".mysql_error());
    if (mysql_num_rows($result) > 0) { // On vérifie si on a au moins 1 résultat
    	echo "verif password";
    } else {
    	echo "inscription";
    }?>

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par darkstar123456 Voir le message
    Effectivement, il y a des erreurs et du mix mysql_ / mysqli_ dans le code de sachav

    Voici une tite correction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    // Connexion à la base de données MySQL
    $conn = mysql_connect($host, $user, $passwd) or die ("Erreur de connection");
    $conn = mysql_select_db($db_name, $conn) or die(mysql_error());
     
    // Requête
    $sql = "SELECT mailCli FROM clients WHERE mailCli = '".$_POST['email']."'";
    $result = mysql_query($sql) or die("ERROR SQL : <br /> ".$sql."<br />".mysql_error());
    if (mysql_num_rows($result) > 0) { // On vérifie si on a au moins 1 résultat
    	echo "verif password";
    } else {
    	echo "inscription";
    }?>
    Nickel, merci
    Il ne me reste plus qu'à déchiffrer la chose.
    Je vois que du coup nous passons à du mysql et plus mysqli.

  13. #13
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Citation Envoyé par NeiBaF Voir le message
    Je vois que du coup nous passons à du mysql et plus mysqli.
    Voui, c'est bien plus simple

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    Quelles sont concrètement les différences entre les deux ?

  15. #15
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Citation Envoyé par NeiBaF Voir le message
    Quelles sont concrètement les différences entre les deux ?
    Comme je l'ai dit plus haut, je ne sais pas trop


    Ha ben du coup j'en ai profité pour me renseigner...
    http://www.developpez.net/forums/d37...-mysql-mysqli/

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    Merci C'est gentil
    J'ai eu des problèmes Internet hier j'ai pas pu répondre avant désolé.
    Tant que je suis lancé j'ai un "parse error" sur la ligne du "and if"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $sql = "SELECT mailCli FROM clients WHERE mailCli = '".$_POST['email']."'"; // Vérifie si l'email entré existe dans la bdd
    $sql2 = "SELECT passCli FROM clients WHERE maiCli = '".$_POST['email']."'"; // Vérifie si le pass entré correspond au mail
     
    $result = mysql_query($sql) or die("ERROR SQL : <br /> ".$sql."<br />".mysql_error()); // Résultat query 1
    $result2 = mysql_query($sql2) or die("ERROR SQL : <br /> ".$sql2."<br />".mysql_error()); // Résultat query 2
     
    					if (mysql_num_rows($result) > 0) // Vérifie si l'email existe dans la base de données
    				{ 
    				and if (mysql_fetch_array($result2) == $_POST['password'])// Si ok, vérifie si le password entré correspond à ce du mail dans la bdd
    				   {
    				    echo "OK man";
    				   }//fin du and if
    				} // fin du if
    Je souhaite donc vérifier si le mot de passe entré, correspond au mot de passe enregistré dans ma base, en fonction du mail entré.
    J'ai du mal avec la syntaxe

  17. #17
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Hmmm j'ai remodifé ton code en quelque chose de plus correct... j'ai mis quelques commentaires mais si tu as besoin de plus d'infos, n'hésite pas à me demander

    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
    <?php
    $error = "";
    $email = mysql_real_escape_string($_POST['email']); // Pour se proteger des injections SQL
    $password = mysql_real_escape_string($_POST['password']); // Pour se proteger des injections SQL
    $sql = "SELECT mailCli FROM clients WHERE mailCli = '".$email."'";
    $q = mysql_query($sql) or die("ERROR SQL : <br />".$sql."<br />".mysql_error());
    if (mysql_num_rows($q) > 0) {
    	// Si l'email existe, on va vérifier le password
    	// On sépare les requêtes SQL, en effet il n'est pas nécessaire d'exécuter la seconde si la première ne passe pas ;)
    	$sql = "SELECT passCli FROM clients WHERE mailCli = '".$email."'";
    	$q = mysql_query($sql) or die("ERROR SQL : <br />".$sql."<br />".mysql_error());
    	if (mysql_result($q,0) != $password) {
    		$error = "Mot de passe incorrect.";
    	} else {
    		// Traitements à effectuer si un user a saisi les bons mail & password
    		// ...
    	}
    } else {
    	$error = "Cette adresse e-mail n'existe pas.";
    }
    if (!empty($error)) {
    	echo "<p>ERREUR : ".$error."</p>";
    }
    ?>
    NB : normalement il faudrait un peu plus de tests du genre : est-ce que le formulaire a bien été soumis ?
    est-ce que les différents champs ne sont pas vides ?
    est-ce que les différents champs contiennent bien quelque chose qu'on attend ? (par exemple pour l'email, ça sert à rien de regarder dans la DB si on reçoit : $_POST['email'] => 1132132)

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 23
    Points : 13
    Points
    13
    Par défaut
    Merci
    C'est très gentil de ta part de m'aider de la sorte

    Tout marche très bien et je comprends le code donc je suis content, j'apprends quelques trucs qui me serviront sans doute beaucoup

    En revanche, je ne comprend pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $email = mysql_real_escape_string($_POST['email']); // Pour se proteger des injections SQL
    $password = mysql_real_escape_string($_POST['password']); // Pour se proteger des injections SQL
    Qu'est ce qu'une injection ?

    Et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (!empty($error)) {
    	echo "<p>ERREUR : ".$error."</p>";
    }
    Je comprends bien qu'il s'agit de déterminer si un champs reste vide ou non.
    Mais la syntaxe des paramètres du "if" me perturbent un peu.

  19. #19
    Membre chevronné Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Points : 1 895
    Points
    1 895
    Par défaut
    Citation Envoyé par NeiBaF Voir le message
    Qu'est ce qu'une injection ?
    regarde là :
    http://securite.developpez.com/faq/?..._sql_injection
    GNAP !

  20. #20
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Une injection SQL... hmmm ben c'est un petit malin qui écrit "spécialement" les données d'une variable pour essayer de hacker ton serveur...

    exemple avec un code login basique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    // SQL de base
    $sql = "SELECT login, pwd FROM membres WHERE login = '".$_POST['login'];."'";
     
    // Ce qu'on attend de manière générale
    SELECT login, pwd FROM membres WHERE login = 'darkstar123456' // n'est vrai que si on trouve "darkstar123456"
     
    // Injection SQL, dans l'input du login on va écrire :
    // ' OR 1 OR 1 = '1
    // Ce qui donnera
    SELECT login, pwd FROM membres WHERE login = '' OR 1 OR 1 = '1' // toujours vrai, le mec peut se log comme il veut :)
    hop ici l'injection avec un peu de couleur, ça sera plus clair... ^^
    En rouge : ce que le mec met dans l'input du login
    En bleu : la requete de base
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT login, pwd FROM membres WHERE login = '' OR 1 OR 1 = '1'


    Pour ce qui est du if() en fait, il s'agit d'un simple test binaire... écrire un ! devant une fonction ou une variable veut dire la même chose que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(!$var) // similaire à if($var == false)
    if($var) // similaire à if($var == true)
    if(!myFunction()) // similaire à if(myFunction() == false)
    if(myFunction()) // similaire à if(myFunction() == true)

Discussions similaires

  1. Problème d'envoie de mail par SMTP
    Par yass dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 12/09/2008, 16h45
  2. [FLASH MX] Problème flash et fonction mail() php
    Par proutcore dans le forum Flash
    Réponses: 7
    Dernier message: 21/05/2007, 12h21
  3. [Logiciel] Outlook : problème réception massive de mails
    Par malbaladejo dans le forum Outlook
    Réponses: 1
    Dernier message: 09/12/2005, 14h00
  4. [Mail] problème avec la fonction mail()
    Par artotal dans le forum Langage
    Réponses: 2
    Dernier message: 13/11/2005, 03h14
  5. [Mail] Problème envoi formulaire par mail
    Par Nicos77 dans le forum Langage
    Réponses: 5
    Dernier message: 10/11/2005, 17h11

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