Passwort vergessen script

trc120

Gesperrt
Hallo

Ich weis ich bin sehr lästig, möchte jedoch nur fragen, ob es irgentwo ein fertiges "Passwort vergessen script " gibt.
Ich komme mit meinem nicht weiter, irgent etwas gehe ich da von Grundauf falsch an.
 
Ich kenne jetzt kein fertiges. Zeig uns doch was du bisher versucht hast.
So aufwändig ist das garnicht zu realisieren.
 
Naja, aber nicht lachen ;)

Ich bekomme zwar das e-mail mit dem neuen Passwort, aber
1.) er spring sofort nach dem Absenden auf die Startseite.
2.) und er speichert das neue Passwort nicht in die DB.

PHP:
<?php

  include "include/db_verbindung.php";
	  


// Auslesen des Formulars und zuweisen in Variablen
//*************************************************

$benutzername  = $_POST['benutzername'];
$email         = $_POST['email'];
$passwort      = $_POST['passwort'];
$new_passwort  = $_POST['new_passwort'];


$passwort_md5      = md5($passwort);
$new_passwort_md5  = md5($new_passwort);

/*********************************************************************************/

// SELECT-Befehl für Abfrage einer Tabelle
// ***************************************
$anfrage = "SELECT benutzername FROM userdaten WHERE benutzername ='".mysql_real_escape_string($_SESSION['benutzername'])."'";

	  $ergebnis = $db -> query($anfrage);// Senden an Dabenbank
// Wenn Daten gefunden wurden
   if ($benutzername == $benutzername)
     {
	  echo "Bitte Benutzername und E-mail aintragen!<br>";
	 }
	
     else
     {
      echo "Abfrage Fehlgeschlagen";
     }
/*********************************************************************************/
  if (isset($_POST['senden']))
{ 


//  NEW Passwort generrieren
$array_b = explode(",", "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,W,X,Y,Z,1,2,3,4,5,6,7,8,9,0");
srand ((double)microtime()*1000000);
for($i=0;$i<6;$i++) 
    {
    $z = rand(0,30);
    $new_passwort .= "".$array_b[$z]."";
    }

/*********************************************************************************/




//  Neues Passwort in datenbank eintragen 
$anfrage = "UPDATE userdaten SET  
               passwort     = '".mysql_real_escape_string(md5($_SESSION['passwort']))."'
               WHERE benutzername = '".mysql_real_escape_string($_SESSION['benutzername'])."'" OR die(mysql_error());
$ergebnis = $db -> query ($anfrage);

if ($passwort == $new_passwort)
{

   echo $ergebnis -> affected_rows. " Datensätze wurden geändert!<br>";
}

else
{
   echo "Keine Datensätze gefunden!<br>";
}


 


//  Auffbau des Mailversands.
//  An den neuen Benutzer.

   $an          = $email;
   $betreff     = "Passwort";
   $absender    = "From:BullDog13@gmx.net";
   $mailinhalt  = "Sie haben Ihr Passwort angefordert!\n\n";
   $mailinhalt .= "Ihr Passwort wurde Ihnen zugeschickt, und lautet:\n\n";
   $mailinhalt .= "Passwort:".$new_passwort."\n";

   @mail($an,$betreff,$mailinhalt,$absender);
 


 
} // ende if klammer send button  



 $db -> close(); 
 

?>
 
Du setzt auch das Passwort in der DB auf das Passwort aus der Session. Solltest du nicht das neu generierte Passwort abspeichern?
 
mal ne andere frage für was is das?

Den du kannst ja mal drüber nach denken ein CMS einzusetzten.
Die können all sowas schon und auch etwas besser und sicherer als deine Variante.

Für diese CMS wie Joomla, Typo3, Drupal , .... gibt es auch Erweiterungen wie Sand am Meer, damit kannst so ziehmlich alles machen. ;)
 
Hallo!
Du setzt auch das Passwort in der DB auf das Passwort aus der Session.
Ich frage mich eher was das Passwort überhaupt in der Session zu suchen hat?!
Abgesehen davon dass eine Session (inkl. dem Passwort) "enführt" werden kann, frage ich mich auch warum jemand sein Passwort anfordern sollte wenn er sich doch offensichtlich eingelogt hat. ;)
Gut, es gibt zwar die Möglichkeit dass man per Cookie dauerhaft eingelogt bleibt, aber was ist wenn das Cookie gelöscht wird?
Solltest du nicht das neu generierte Passwort abspeichern?
Korrekt, aber bitte nicht schon bei der Passwortanforderung. ;)
Warum? Nun, es könnte sich ja auch jemand einen Scherz erlauben oder sogar böse Absichten haben.
Ich würde den User einen Bestätigungslink an die hinterlegte e-Mail Adresse schicken.
Dazu muss er bei der Passwortanforderung zumindest seinen Benutzernamen und die hinterlegte e-Mail Adresse angeben.
Ist beides korrekt, bekommt er den Link zugeschickt.
Wenn er diesen Link anklickt wird ein neues Passwort generiert und in die Datenbank eingetragen.
Damit der User das neue Passwort auch kennt, bekommt er nun eine weitere e-Mail mit seinen Zugangsdaten (inkl. dem neuen Passwort).

Das hätte den Vorteil dass der User nicht ungewollt ein neues Passwort bekommt (z.B. weil er sich auf der Website verklickt hat ;) ).

Gruss Dr Dau
 
Habe das jetzt umgeschrieben, die fehler bleiben aber immer noch.

PHP:
<?php

  include "include/db_verbindung.php";
	  


// Auslesen des Formulars und zuweisen in Variablen
//*************************************************

$benutzername  = $_POST['benutzername'];
$email         = $_POST['email'];
$passwort      = $_POST['passwort'];
$new_passwort  = $_POST['new_passwort'];


$passwort_md5      = md5($passwort);
$new_passwort_md5  = md5($new_passwort);

/*********************************************************************************/

?>
<form method="post" action="">
 <table>
  <tr>
    <td>Benutzername:</td>
    <td>E-Mail Adresse:</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td><input type="text" name="benutzername" size="25"></td>
    <td><input type="email" name="email" size="25"></td>
    <td><input type="submit" value="Anfordern" name="senden"></td>
  </tr>
 </table>
</form><br>
<?php
/*********************************************************************************/
// SELECT-Befehl für Abfrage einer Tabelle
// ***************************************
$anfrage = "SELECT benutzername FROM userdaten WHERE benutzername ='".mysql_real_escape_string($_POST['benutzername'])."'";
    $ergebnis = $db -> query($anfrage);// Senden an Dabenbank
      if ($benutzername == $benutzername)
       {
	    echo "Bitte Benutzername und E-mail aintragen!<br>";
	   }
        else
       {
        echo "Abfrage Fehlgeschlagen";
       }
/*********************************************************************************/
  if (isset($_POST['senden']))
{
$anfrage = "UPDATE userdaten SET passwort = '".mysql_real_escape_string(md5($_REQUEST['new_passwort']))."' WHERE benutzername = '".mysql_real_escape_string($_POST['benutzername'])."'" ;
	 $ergebnis = $db -> query ($anfrage);
          if ($db -> affected_rows > 0)
            {
             echo $db -> affected_rows." Passwort wurden geändert!<br>Ihnen wurde eine E-mail zugesendet.<br>";
            }
	
	        else
            {
             echo "Änderung Fehlgeschlagen!<br>";
            }

//  NEW Passwort generrieren
$array_b = explode(",", "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,W,X,Y,Z,1,2,3,4,5,6,7,8,9,0");
srand ((double)microtime()*1000000);
for($i=0;$i<6;$i++) 
    {
    $z = rand(0,30);
    $new_passwort .= "".$array_b[$z]."";
    }

/*********************************************************************************/
//  Auffbau des Mailversands.

   $an          = $email;
   $betreff     = "Passwort";
   $absender    = "From:BullDog13@gmx.net";
   $mailinhalt  = "Sie haben Ihr Passwort angefordert!\n\n";
   $mailinhalt .= "Ihr Passwort wurde Ihnen zugeschickt, und lautet:\n\n";
   $mailinhalt .= "Passwort:".$new_passwort."\n";

   @mail($an,$betreff,$mailinhalt,$absender);

} // ende if klammer send button  


 $db -> close(); 
 

?>
 
Hier vielleicht noch nen kleiner Tipp

statt
PHP:
//  NEW Passwort generrieren
$array_b = explode(",", "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,W,X,Y,Z,1,2,3,4,5,6,7,8,9,0");
srand ((double)microtime()*1000000);
for($i=0;$i<6;$i++) 
    {
    $z = rand(0,30);
    $new_passwort .= "".$array_b[$z]."";
    }

kannst dus auch so machen
PHP:
$new_passwort = substr(md5(time().microtime()),0,6);

das Ergebnis ist identisch
 
hallo also wenn ich das so mache wie da steht da
Fatal error: Call to a member function query() on a non-object in /usr/export/www/vhosts/funnetwork/hosting/domi021/pw_vergessen.php on line 41

und das ist die zeile:

$ergebnis = $db -> query($anfrage);// Senden an Dabenbank

bitte helfen
 
Zurück