Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 03/06/2007, à 23:04

x@v

[PHP/MySql] - implémentation d'un script d'authentification

Bonjour,
je cherche à développer un ensemble de script pour une authentification utilisateur, mais curieusement j'ai du mal, pas si simple, voilà donc se que j'ai fait
http://www.courant-alternatif.org/test_connexion/auth_quanta/authentification.php
email:xav@xav
mot de passe:xav
Je bloque au niveau de mot de passe oubliez qui ouvre une popup. Mais par delà j'ai bien peur de m'y prendre mal.
en code sa donne (la popup) :
2 fonctions :
qui gère la validité d'un mail et qui envoie un mail

///////////////////////////////////////////////////////
function valid_email($address)
{
  // check an email address is possibly valid
  if (ereg("^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$", $address))
    return true;
  else
    echo 'Votre email est invalide';
}
///////////////////////////////////////////////////////
// function pour tester si une requete contient un résultat et envoie un mail...

function mot_passe_perdu($email, $mot_passe, $requete, $texte_afficher, $objet_mail)
{
  if(mysql_num_rows($requete)>0)
   {
   //$hote=$_SERVER['HTTP_HOST'];
     echo $objet_mail;   
   $objet_mail=$objet_mail;
   
      mail($email, $objet_mail, $texte_afficher);
   }
}

Code de la popup avec l'appel des fonctions

<html>
<head>
<title>####### - Retrouver son e-mail</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style>
<!--
A:link {text-decoration: none; color:#FF6300;}
A:visited {text-decoration: none; color: #FF6300;}
A:active {text-decoration: underline; color: #808080;}
A:hover {text-decoration: underline; color: #808080;}
-->
</style>
</head>
<body>
<?php
// connexion à la base et fonction ci-dessus
include('client_fns.php');

if (isset($_POST['email']))
{
    $email = $_POST['email'];
   //valid_email($email);

  $query = 'select * from utilisateur'
           ." WHERE email='$email'";

  $result=mysql_query($query, $lien);

    if(mysql_num_rows($result)>0)
    {
    echo $email;
     // envoyez la mail avec le nouveau mot de passe
  $texte_afficher='Vous avez souhaitez reçevoir votre mot de passe :
'.$mot_passe;
  $objet_mail='Problème: pour le site ';
mot_passe_perdu($email, $mot_passe, $requete, $texte_afficher, $objet_mail);
    }
    else
    {
     echo 'votre mail n\'est pas valide '.$email.' recommancez';
    }
}
?>
  <form action="passperdu.php" method="POST">
    <table align="center" border="0">
      <tr>
        <td align="center"><div align="right"><a href="#" target="main">image</a></div>
        </td>
      </tr>
      <tr>
        <td><div align="center">
          <div align="left">Pour
            recevoir un nouveau mot de passe,<br>
            entrez votre e-mail ci-dessous, <br>
            puis validez.</div>
          </div>
        </td>
      </tr>
      <tr>
        <td align="center"><input type="text" name="email" value=""></td>
      </tr>
      <tr>
        <td align="center" >
          <input type="Submit" name="submit" value="Valider">
        </td>
      </tr>
    </table>
  </form>
</body>
</html>

Merci

Dernière modification par x@v (Le 04/06/2007, à 16:53)


[-- qwerty user --]

Hors ligne

#2 Le 04/06/2007, à 07:52

aktos

Re : [PHP/MySql] - implémentation d'un script d'authentification

Je crois que sur le diste developpez il y plein de choses et d'exemples ...

http://bob.developpez.com/phpauth/

Est ce que tu ne chercherais pas un truc comme cela ?

Hors ligne

#3 Le 04/06/2007, à 12:35

x@v

Re : [PHP/MySql] - implémentation d'un script d'authentification

@arkos
non, mon script est déjà conçu, j'ai besoin de connaître d'autre façon de faire, sur le site que tu me donnes ils se complique la vie, c'est du php3, 4 à la limite.
Mais surtout il mélange le formulaire ave le code, alors que je vais faire une couche en ajax, une fois le tout en php et bien sécurisé. Il ne traite pas non plus l'envoi e passe par mail si on à perdu sont passe. Ce qui me pose problème précisément, mais j'espère réglé cette difficulté très vite et d'autre avis m'interresse.

Dernière modification par x@v (Le 04/06/2007, à 12:45)


[-- qwerty user --]

Hors ligne

#4 Le 04/06/2007, à 12:41

g_barthe

Re : [PHP/MySql] - implémentation d'un script d'authentification

Bonjour,

As tu regardé la dessus aussi : http://www.phpcs.com/recherche.aspx?r=i … &tr=source beaucoup de codes source pour des authentifications.

Après si tu veux réellement utiliser le tien je ne sais pas.


Mon forum perso sur le génie climatique http://le-genie-climatique.positifforum.com/
Le forum des travaux manuels : http://pausebroderie.fr/

Hors ligne

#5 Le 04/06/2007, à 12:42

x@v

Re : [PHP/MySql] - implémentation d'un script d'authentification

@arkos
rien qu'en essayant de détruire la session il y a une erreur, je ne vais pas sauter dessus.
il ne détruit que l'identifiant de session et pas la variable, alors que la procédure idéal est :

unset($_SESSION['.......']);
session_destroy();

on détruit la variable puis l'id de session

Dernière modification par x@v (Le 04/06/2007, à 12:46)


[-- qwerty user --]

Hors ligne

#6 Le 04/06/2007, à 14:04

x@v

Re : [PHP/MySql] - implémentation d'un script d'authentification

Oui j'utilise le mein il fonctionne très bien, j'ai juste besoin de la meilleurs route pour implémenter ma popup.
Si l'utilisateur perd sont mot de passe j'aimerai lui renvoyer. c'est le script ci-dessous.
Donc de façon automatique...
Quelau'un à déjà pratiquer ?
Merci


[-- qwerty user --]

Hors ligne

#7 Le 04/06/2007, à 16:45

x@v

Re : [PHP/MySql] - implémentation d'un script d'authentification

je vais dire une bétise, mais je n'aime pas utilisez les scripts des autres gars.
On est jamais mieux servis par soi même, et mon but est d'apprendre tout en me faisant plaisir ?
D'ailleurs ce modèle, ma permit de conçevoir un cms que je vais mettre en open source. avec un front en ajax

Dernière modification par x@v (Le 04/06/2007, à 16:51)


[-- qwerty user --]

Hors ligne

#8 Le 04/06/2007, à 17:02

leibowitz

Re : [PHP/MySql] - implémentation d'un script d'authentification

J'pige pas bien le problème que tu as.

Puis y'a des informations manquantes... le fichier client_fns.php !

Exemple:

$result=mysql_query($query, $lien);

$lien il sort du fichier client_fns, mais il faut qu'on devinne...

Et $mot_passe ? Il est défini où ?


Autre chose, ton problème semble se situer à cette ligne:

if(mysql_num_rows($result)>0)

Tu peux d'abord tester $result != NULL pour éviter le gros message d'avertissement

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/vhost/courant-alternatif.org/home/html/test_connexion/auth_quanta/client_fns.php on line 38

Bon courage !

PS: si tu veux de l'aide il faut donner toutes les informations nécessaires. C'est dur de t'aider sinon.

Hors ligne

#9 Le 04/06/2007, à 17:26

x@v

Re : [PHP/MySql] - implémentation d'un script d'authentification

client_fns.php ci-dessous, j'ai juste masquer les identifiant de connexion

<?php
############## pour courant-alternatif.org/test_connexion/
$serveur='fldb207.serveursdns.net';
$nom='#####';
$passe='#####';
$base='#####';
$lien=@mysql_connect($serveur, $nom, $passe);

// test de connexion au serveur
if (!$lien) {
    echo "D�sol�, connexion � " .$serveur." impossible\n"; }

if (!@mysql_select_db ($base, $lien)){
    mail("xartotal@hotmail.com", "Probl�me: fldb207.serveursdns.net", "Impossible de se connecter � la base de donn�e ".$serveur."");
    echo '<div style=" font-family:tahoma;">Impossible d\'�tablir une connexion avec le serveur '.$serveur.'</font>\n';
    exit;
}

if (!mysql_select_db($base, $lien)) {
    $erreurbdd=mysql_error();
    return false;
}

///////////////////////////////////////////////////////
function valid_email($address)
{
  // check an email address is possibly valid
  if (ereg("^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$", $address))
    return true;
  else
    echo 'Votre email est invalide';
}
///////////////////////////////////////////////////////
// function pour tester si une requete contient un r�sultat et envoie un mail...

function mot_passe_perdu($email, $mot_passe, $requete, $texte_afficher, $objet_mail)
{
  if(mysql_num_rows($requete)>0)
   {
   //$hote=$_SERVER['HTTP_HOST'];
     echo $objet_mail;   
   $objet_mail=$objet_mail;
   
      mail($email, $objet_mail, $texte_afficher);
   }
}
?>

donc le fichier popup après un allègement sommaire :

<html>
<head>
<title>HARDILUX - Retrouver son e-mail</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style>
<!--
A:link {text-decoration: none; color:#FF6300;}
A:visited {text-decoration: none; color: #FF6300;}
A:active {text-decoration: underline; color: #808080;}
A:hover {text-decoration: underline; color: #808080;}
-->
</style>
</head>
<body>
<?php
include('client_fns.php');

if (isset($_POST['email']))
{
    $email = $_POST['email'];
   //valid_email($email);

  $query = 'select * from utilisateur'
           ." WHERE email='$email'";

  $result=mysql_query($query, $lien);

    if(mysql_num_rows($result)>0)
    {
      echo $email;
      // envoyez la mail avec le nouveau mot de passe
      $texte_afficher='Vous avez souhaitez re�evoir votre mot de passe :
      '.$mot_passe;
      $objet_mail='Probl�me: pour le site ';
      mot_passe_perdu($email, $mot_passe, $requete, $texte_afficher, $objet_mail);
    }
    else
    {
     echo 'votre mail n\'est pas valide '.$email.' recommancez';
    }
}
?>
<form action="passperdu.php" method="POST">
<div><a href="#" target="main">image</a></div>
<div>
Pour
recevoir un nouveau mot de passe,<br>
entrez votre e-mail ci-dessous, <br>
puis validez.
</div>
<input type="text" name="email" value=""><br>
<input type="Submit" name="submit" value="Valider"><br>
</form>
</body>
</html>

tu fait un contrôle sur

$result != NULL

Mais la requette est booléenne
mysql_num_rows($result)>0
renvoie true ou false ?


[-- qwerty user --]

Hors ligne

#10 Le 04/06/2007, à 17:30

x@v

Re : [PHP/MySql] - implémentation d'un script d'authentification

désolé pour l'encodage, je viens tout juste d'installer apache et de le changer


[-- qwerty user --]

Hors ligne

#11 Le 04/06/2007, à 18:08

leibowitz

Re : [PHP/MySql] - implémentation d'un script d'authentification

j'ai juste masquer les identifiant de connexion

Il vaut mieux!

Pour cette fonction, mysql_num_rows($result), si $result n'est pas défini il y a un warning (qui est d'ailleurs affiché lorsqu'on essaye ta page).

C'est pour ça qu'il est préférable de tester d'abord $result.

Tu peux le faire en une fois:

if($result && mysql_num_rows($result)>0 )

Car il faut que le premier test soit vrai pour que le deuxieme soit parcouru. Ce qui enleve le warning.

Par contre je ne vois toujours pas où est défini $mot_passe sur cette ligne

      $texte_afficher='Vous avez souhaitez re�evoir votre mot de passe :'.$mot_passe;

if(mysql_num_rows($result)>0)
    {
      echo $email;
      // envoyez la mail avec le nouveau mot de passe
      $texte_afficher='Vous avez souhaitez re�evoir votre mot de passe :
      '.$mot_passe;
      $objet_mail='Probl�me: pour le site ';
      mot_passe_perdu($email, $mot_passe, $requete, $texte_afficher, $objet_mail);
    }
    else
    {
     echo 'votre mail n\'est pas valide '.$email.' recommancez';
    }

Dernière modification par leibowitz (Le 04/06/2007, à 18:10)

Hors ligne

#12 Le 04/06/2007, à 18:45

x@v

Re : [PHP/MySql] - implémentation d'un script d'authentification

Le test sur result ne me parle guère l'erreur venait de ma fonction mail
dans mon php.ini je dois décommanter cette ligne et mettre un mail ?

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
sendmail_path =xavier.artot@free.fr

Pour la requette sa me tracase, comment ferais-tu (je te tutoie) pour allez cherchez le mot de passe dans le champs , il faut surement faire une deuxième requette, dans le test par exemple, donc je propose une fonction quirenvoie le rèsultat. Mais paut être qu'en reformulant ma requette en mysql_fetch_assoc...
de cette façon je peux aussi appeler le mot de passe par sont nom sans faire d'autre requette ?
thx


[-- qwerty user --]

Hors ligne

#13 Le 04/06/2007, à 23:20

leibowitz

Re : [PHP/MySql] - implémentation d'un script d'authentification

Voilà une petite astuce que j'avais lue il y'a longtemps. Si tes essais, à ce que j'ai compris, se déroule sur ton propre serveur alors tu peux remplacer sendmail par ton propre programme.



sendmail_path = /usr/local/bin/logmail

Dans mon cas, c'est une redirection toute simple qui renvoit tous les mails dans un fichier log. Ce fichier contient le message envoyé, ainsi que les infos utiles (e-mail à qui il est envoyé). Aucun e-mail n'est envoyé grâce à cette astuce (ce qui évite de relever sa boîte à chaque essai.

Le fichier /usr/local/bin/logmail

cat > /tmp/logmail.log

Pour voir le résultat, il faut aller voir le fichier /tmp/logmail.log et dans mon cas il est éffacé à chaque essai.



Le code PHP a proprement parlé ; et ta variable $mot_passe ; non il ne faut pas de deuxième requête. La première est suffisante car tu récupères toutes les informations de l'utilisateur.

$query = 'select * from utilisateur'." WHERE email='$email'"

Et tu as déjà trouvé la solution, il suffit d'utiliser cette petite astuce

list($champ1, $champ2, $champ3) = mysql_fetch_row($result)

Ceci te donnera des variables (champ1, champ2, etc. que tu peux renommer bien entendu) que tu pourras utilser par après.

Résultat:

<?php
include('client_fns.php');

if (isset($_POST['email']))
{
    $email = $_POST['email'];
   //valid_email($email);

  $query = 'select * from utilisateur'
           ." WHERE email='$email'";

  $result=mysql_query($query, $lien);

    if($result && mysql_num_rows($result)>0)
    {
      list($id, $pseudo, $mot_passe) = mysql_fetch_row($result);

      echo $email;
      // envoyez la mail avec le nouveau mot de passe
      $texte_afficher='Vous avez souhaitez re�evoir votre mot de passe :
      '.$mot_passe;
      $objet_mail='Probl�me: pour le site ';
      mot_passe_perdu($email, $mot_passe, $requete, $texte_afficher, $objet_mail);
    }
    else
    {
     echo 'votre mail n\'est pas valide '.$email.' recommancez';
    }
}
?>

Hors ligne

#14 Le 05/06/2007, à 14:23

x@v

Re : [PHP/MySql] - implémentation d'un script d'authentification

impec ton astuces, faut seulement faire attention à l'ordre dans list(....
sa doit correspondre à la table, donc sa fonctionne wink
http://www.courant-alternatif.org/test_connexion/auth_quanta/passperdu.php
je met le code, de la fonction mail, revu complètement.

function mail_confirme ($destinataire,$subject,$message) {
  $headers = "";
  $headers .= "From: $expediteur\r\nReply-To: $reponse\r\nContent-Type: text/html; charset=\"iso-8859-1\"\r\n";
  $result = mail ($destinataire,$subject,$message,$headers);
return $result;
}

code de la page

<body>
<?php
include('client_fns.php');

if (isset($_POST['email']))
{
    $email = $_POST['email'];
   //valid_email($email);

  $query = 'select * from utilisateur'
           ." WHERE email='$email'";

  $result=mysql_query($query, $lien);

    if($result && mysql_num_rows($result)>0 )
    {
list($nom, $mot_passe, $email) = mysql_fetch_row($result);
     
      echo 'Nom '.$nom.'<br>email '.$email.'<br> mot de passe '.$mot_passe.'<br>';
      // envoyez la mail avec le nouveau mot de passe
      $texte_afficher=$nom;
      $texte_afficher.=' Vous avez souhaitez reçevoir votre mot de passe :
      '.$mot_passe.'<br>';
      $texte_afficher.='Merci';
      $objet_mail='Renvoie de votre mot de passe '.$_SERVER["HTTP_REFERER"].$_SERVER["REQUEST_URI"];
      mail_confirme($email, $nom, $texte_afficher, $header);
     echo ' merci '.$nom.', vous allez bientôt reçevoir votre mot de passe<br>';
    echo '<a href="./passperdu.php">passperdu.php</a>';
    exit();
    }
    else
    {
     echo 'votre mail n\'est pas valide '.$email.' recommencez';
    echo '<a href="./passperdu.php">passperdu.php</a>';
    exit();
   
    }
}
?>
<form action="passperdu.php" method="POST">
<div><a href="#" target="main">image</a></div>
<div>
Pour
recevoir un nouveau mot de passe,<br>
entrez votre e-mail ci-dessous, <br>
puis validez.
</div>
<input type="text" name="email" value=""><br>
<input type="Submit" name="submit" value="Valider"><br>
</form>
</body>

Merci


[-- qwerty user --]

Hors ligne

#15 Le 05/06/2007, à 20:09

x@v

Re : [PHP/MySql] - implémentation d'un script d'authentification

j'ai pas bien compris l'astuces ?
Tu crée d'abord un fichier vide ?

cat > /tmp/logmail.log

puis on l'ajoute dans le php.ini ?

sendmail_path = /usr/local/bin/logmail

Et tous les mail que j'envoie d'ici "127.0.0.1" sont écrit dans logmail.log ?
thx

le script est finis, à l'exception d'un renvoi de mot de passe plutôt que celui qui est dans la base et que je devrai crypter, donc donner la possibilité de réenregister un nouveau mot de passe. Mais tout ça est assez simple.
fonction :

$lien=@mysql_connect($serveur, $nom, $passe);

// test de connexion au serveur
if (!$lien) {
    echo "Désolé, connexion au " .$serveur." impossible\n"; }

if (!@mysql_select_db ($base, $lien)){
    mail("xartotal@hotmail.com", "Problème: fldb207.serveursdns.net", "Impossible de se connecter à la base de donnée ".$serveur."");
    echo '<div style=" font-family:tahoma;">Impossible d\'établir une connexion avec le serveur '.$serveur.'</font>\n';
    exit;
}

if (!mysql_select_db($base, $lien)) {
    $erreurbdd=mysql_error();
    return false;
}

///////////////////////////////////////////////////////
function valid_email($address)
{
  // check an email address is possibly valid
  if (ereg("^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$", $address))
    return true;
  else
    return false;
}
///////////////////////////////////////////////////////
// function qui envoie un mail avec les header les plus courant...

function mail_confirme($destinataire,$subject,$message) {
  $from_email = $_SERVER["HOST"];
$date = date("D, j M Y H:i:s -0600"); // avec offset horaire
  $headers = "From: $from_email\r\nReply-To: $reponse\r\nContent-Type: text/html; charset=\"iso-8859-1\"\r\n date : $date ";
  $result = mail ($destinataire,$subject,$message,$headers);
return $result;
}

<?php
session_start();
include('client_fns.php');
entete();
if (isset($_POST['mail_id']) && isset($_POST['passe']))
{
  $mailid = $_POST['mail_id'];
  $passe = $_POST['passe'];
  //$mailid = trim($_POST['mail_id']);
  //$passe = trim($_POST['passe']);

  $query = 'select * from utilisateur'
           ." WHERE email='$mail_id' AND mot_de_passe='$passe'";

  $result=mysql_query($query, $lien);
  //echo $result;
  if (mysql_num_rows($result)>0)
  {
    // créer la variable de session
    $_SESSION['mail_valid'] = $mail_id;
  }
}
?>
<h1>connexion</h1>
<?
  if (isset($_SESSION['mail_valid']))
  {
    echo 'Vous êtes connecté: '.$_SESSION['mail_valid'].' <br />';
    echo '<a href="deconnexion.php">Déconnexion</a><br />';
  }
  else
  {
    if (isset($mail_id))
    {
      echo 'Ce compte n\'existe pas.<br />';
    }
    else
    {
      echo 'IDENTIFICATION !<br />'.$mail_id;
    }
?>
  <form method="post" action="authentification.php">
    email<br>
    <input type="text" name="mail_id"><br>
    Mot de passe:<br>
    <input type="password" name="passe"><br>
    <input type="submit" value="Connexion"><br>
  </form>
<?php
}
?>
<br>
<p><a set="yes" linkindex="0" href="./passperdu.php" onclick="window.open(this.href, 'exemple', 'height=200, width=400, top=100, left=100, toolbar=no, menubar=yes, location=no, resizable=yes, scrollbars=no, status=no'); return false;">Mot de passe oublié ?</a></p>

<p><a href="membres_seulement.php">Membre</a></p>
<a href="page1.php">Page 1</a>
</body>
</html>

Là c'est propre.


[-- qwerty user --]

Hors ligne

#16 Le 06/06/2007, à 03:14

leibowitz

Re : [PHP/MySql] - implémentation d'un script d'authentification

Oui c'est presque cà. Je crée un fichier /usr/local/bin/logmail qui contient ceci

cat > /tmp/logmail.log

Et dans le php.ini tu mets

sendmail_path = /usr/local/bin/logmail

Hors ligne

#17 Le 06/06/2007, à 15:32

x@v

Re : [PHP/MySql] - implémentation d'un script d'authentification

ça marche pas ?
xavier@developpus:/usr/local/bin$ ls -l
total 8
-rwxr-xr-x 1 root root 127 2007-06-04 02:53 firefox32
-rw-r--r-- 1 root root  23 2007-06-06 14:54 logmail
il est en 744, tu l'as mis en 777 ?

Dernière modification par x@v (Le 06/06/2007, à 15:54)


[-- qwerty user --]

Hors ligne

#18 Le 06/06/2007, à 16:15

leibowitz

Re : [PHP/MySql] - implémentation d'un script d'authentification

ls -l /usr/local/bin/logmail
-rwxr-xr-x 1 root root 23 2006-09-21 18:50 /usr/local/bin/logmail

Non, mais au moins qu'il soit exécutable :-)

sudo chmod +x /usr/local/bin/logmail

Hors ligne

#19 Le 06/06/2007, à 16:49

x@v

Re : [PHP/MySql] - implémentation d'un script d'authentification

excellent tu es très fort wink
Merci

Dernière modification par x@v (Le 06/06/2007, à 16:52)


[-- qwerty user --]

Hors ligne