Znalazłem scrypt przypomnij hasło i nie działa,dokładnie wyświetla błąd:Nie znaleziono takiego adresu e-mail w naszej bazieNie mogli�my wysłać hasła na Twój adres. Spróbuj jeszcze raz.Taki mam formularz:
| Podaj swój e-mail : | |
[/code] i wyślij
[code]<?php require ‘db.php’; // zmienna przesłana z formularza $email_to=$_POST[‘email_to’]; $query=(“SELECT ‘haslo’ FROM uzytkownicy WHERE ‘email’ =’$email_to’”);// alt jest hasłem w bazie danych $result=mysql_query($query); $count=mysql_num_rows($result); // jeśli $count =1 if($count==1){ $rows=mysql_fetch_array($result); $your_password=$rows[‘haslo’]; // ---------------- WYSYŁANIE E-MAILA ---------------- // wysyłam e-mail do … $to=$email_to; // Temat $subject=“temat e-maila”; // nagłówek $header=“from: administrator”; // Wiadomość $messages.= “Twoje hasło do Bazy \r\n”; $messages.= “Twoje hasło do bazy to $your_password \r\n”; // wysyłanie e-maila $sentmail = mail($to,$subject,$messages,$header); }else{ echo “Nie znaleziono takiego adresu e-mail w naszej bazie”; } // jeśli e-mail wysłany if($sentmail){ echo “Twoje hasło zostało wysłane na twój adres e-mail.”; }else{ echo “Nie mogliśmy wysłać hasła na Twój adres. Spróbuj jeszcze raz”; } ?>
.Co jest żle,że nie wysyła na maila,poza tym hasło jest szyfrowane.
Skrypt jest dobry, wydaje mi się, że po prostu post nie przesyła adresu email. Zweryfikuj wstawiając to
'Email_to: ' . $email_to;[/code]
przed
[code=php]// jeśli $count =1 if($count==1){
A ogólnie do metody hasło szyfrowane zapewne md5 albo sha-1. Nie tędy droga do odzyskiwania haseł, hash nic nikomu nie da, a dekodować tego w czasie wielomianowym też się nie da. Musisz zrobić tak:
1. Użytkownik wysyła żądanie o przypomnienie hasła na zarejestrowany email w naszej bazie danych.
2. W emailu dostaje jakiś reflink, który po kliknieciu wywoła skrypt, który wyśle mu drugiego emaila.
3. Zmieniamy użytkownikowi hasło na jakieś random + haszujemy je, a użytkownikowi wysyłamy w drugim mailu hasło, pod które będzie mógł się zalogować i zmienić sobie na jakieś nowe.
Dwie wiadomości email są po to, żeby sprawdzić czy ktoś nie wysyłał przypomnienia na nie swój email. Wprawdzie nie zalogowałby się bez znajomości treści emaila z hasłem, ale usera mogłaby wkurzać sytuacja, w której ktoś ciągle zmienia mu hasło. Ten email będzie najpierw wymagał potwierdzenia od właściciela konta email, że żądanie pochodziło właśnie od niego.
Zresztą pewno widziałeś zmianę hasła na wielu serwisach:
1) Dochodzi mail: Ktoś chce zmienić hasło bla bla bla. Jeśli to nie ty zignoruj, jeśli jednak ty kliknij link poniżej.
2) Po kliknięciu dochodzi drugi mail w którym podane jest jakieś hasło typu A#%ar3a, czyli te losowo wygenerowane.
Poprawiłem i wysłało emaila z taką treścią:Twoje has�o do Bazy Twoje has�o do bazy to haslo,zamiast hasła.O co tu chodzi ??Zauważyłem też,że scrypt raz wysyła,a raz nie.Jak to poprawić by działało???
$messages.= "Twoje hasło do Bazy \r\n";
$messages.= "Twoje hasło do bazy to $your_password \r\n";
Generalnie to wygląda jak z pocztą polską, czasem rzeczy nie dochodzą, sugeruje oparcie skryptu o PHPMailer. Czasem też może być tak, że wiadomość która zostanie wysłana wcześniej dojdzie za 24h a wysłana później w ciągu 5 minut - nie ma na to reguły,
Z tego co się dowiedziałem to zaszyfrowane hasła md5 raczej odszyfrować się nie da,tylko trzeba scrypt zmień hasło.Problem w tym bo nie wiem jak.Odnośnie tego scryptu co podałem raz zadziała,a raz nie.Jak już doszła wiadomość to nie przysłało hasła z bazy tylko:Twoje hasło do Bazy \r\n";to haslo.Czyli scypt nie wyciągnął hasła.Jak to zrobić???
Tak mam pole w bazie haslo,używam select i usunąłem cudzysłowia.Teraz znowu nie chce wysyłać maila,pokazuje:Email_to: wojtek129@poczta.onet.eu .Nie mogli�my wysłać hasła na Twój adres. Spróbuj jeszcze raz.cały kod:
<?php require 'db.php';
$email_to=addslashes($_POST['email_to']);
$query=("SELECT haslo FROM uzytkownicy WHERE email ='$email_to'");
$result=mysql_query($query);
$count=mysql_num_rows($result);
echo 'Email_to: ' . $email_to;
// jeśli $count =1
if($count==1){
$rows=mysql_fetch_array($result);
$your_password=$rows['haslo'];
$to=$email_to;
$subject="temat e-maila";
$header="from: administrator";
$messages.= "Twoje hasło do Bazy \r\n";
$messages.= "Twoje hasło do bazy to $your_password \r\n";
$sentmail = mail($to,$subject,$messages,$header);
} else{
echo "Nie znaleziono takiego adresu e-mail w naszej bazie";
}
if($sentmail){
echo "Twoje hasło zostało wysłane na twój adres e-mail.";
} else{
echo "Nie mogliśmy wysłać hasła na Twój adres. Spróbuj jeszcze raz";
}
?>
echo "Nie znaleziono takiego adresu e-mail w naszej bazie";
Znaczy, że adres jest w bazie, ale funkcja mail, nie może z jakiegoś powodu wysłać na niego maila. Jeżeli korzystasz z php 4.3.*, bądź wcześniej nagłówki rozróżniają duże i małe litery. Spróbuj taki:
$header="From: twojAdres@gmail.com"; // zmień na email admina (nie dopisując żadnych innych rzeczy) [/code]
Jeśli to nie zadziała, to nie mam pojęcia czemu ta funkcja nie działa, ale jak mówiłem z nią są tylko problemy i radze poczytać o klasie PHPMailer tu jest nawet z komentarzami do niej http://phpedia.pl/wiki/Phpmailer.
Tak, w tym samym. Wysyłasz maila z pytaniem, czy próba resetowania hasła pochodzi od użytkownika + link do skryptu, który po kliknięciu zmieni mu hasło (wygeneruje nowe losowe hasło), do bazy zapisze hash md5 nowego hasła, i wyśle mu wygenerowane hasło na maila w drugiej wiadomości.
Ewentualnie jak chcesz łamać hash md5 poczytaj o algorytmie kolizji Stach i Liu, całkiem dobry osiąg ~45 minut na średnim sprzęcie (sarkazm).
To wina serwera, skrypt na moim serwerze działa. Serwer ma prawdopodobnie jakąś z góry narzuconą ilość socketów SMTP, którą może naraz otworzyć. Każde wywołanie mail() otwiera ten socket i zamyka go, jeśli ktoś rozsyła maile w pętli to flooduje serwer. Ponieważ to jakiś darmowy serwer śmiem podejrzewać, że jest współdzielony przez dużo osób. Zatem to działa mniej więcej jak rapidshare w sieci osiedlowej. Ponadto poczytaj jak się preparuje URL pod kątem przesłania $_GET, bo to co piszesz to “twórczość radosna”.
Można na kilka sposobów każdy ma jakieś plusy i minusy:
odwołujesz się poprzez domena.pl/skrypt.php?SID=“CiągZnakówKtóryAlgorytmicznieJesteśWstanieOdtworzyć”
Np. może być jakiś hash z konkatenacji id, hasha starego hasła i jakiejś cyfry.
Jeśli użyjesz czegoś co jest zmieniane, to może być niezbyt dobrze.
odwołujesz się poprzez domena.pl/skrypt.php?SID=“LosowyCiągZnakówKtóryZapisujeszDoBazyPrzyUserze”
Minusem jest to, że potrzeba dodatkowej kolumny w tabeli.
Generalnie potrzebny jest SID, dzięki któremu będzie wiadomo, któremu userowi zmienić hasło + musi być on tak “pokręcony”, że nikt go przypadkiem nie wpisze.