[php]przypomnij hasło nie działa

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.

Poza tym popraw to:

$email_to=$_POST['email_to'];

Przepisywanie zmiennych nie jest tu potrzebne, chyba że dodasz addslashes(), które dodatkowo zabezpieczy dodatkowo następne polecenie sql.

$email_to=addslashes($_POST['email_to']);

A co to formularza to obecnie nie stosuje się w takich miejscach tabelek.

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 :smiley: ??Zauważyłem też,że scrypt raz wysyła,a raz nie.Jak to poprawić by działało???

Sprecyzuj pytanie, bo wysłało ci dobrze

$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ć??? :smiley:

Czytaj mój pierwszy post w tym temacie.

Wyciągnął, inaczej nie wysłałby emaila, bo liczba zwróconych mysql_num_rows byłaby równa 0, co uniemożliwiałoby wejście do ifa.

Ciągle cię nie rozumiem.

drugi darom się z cb robi [-X

Po prostu dostaję taką wiadomość:Twoje has�o do Bazy Twoje has�o do bazy to haslo.Powinno przysłać hasło z bazy,czy nie ???

Zależy czy masz takie pole w bazie danych. Btw korzystając z selecta pola nie daje się w cudzysłów.

$messages.= “Twoje hasło do Bazy \r\n”;

$messages.= “Twoje hasło do bazy to $your_password \r\n”;

na moje oko zamiast $your_password wstawia haslo, więc albo masz tam haslo albo zmień zapytanie

$query=("SELECT 'haslo' FROM uzytkownicy WHERE 'email' ='$email_to'");// `alt` jest hasłem w bazie danych [/code]

na

[code=php]$query = ‘SELECT haslo FROM uzytkownicy WHERE email = "’ . $email_to . ‘"’;// alt jest hasłem w bazie danych 

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";

}


?>

Ponieważ nie wyświetla tego

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.

Zmieniłem tak jak żeście mówili,kilka razy próbując wysłać wreszcie wysłało na maila hasło z bazy tylko,że zaszyfrowane.Co z tym zrobić.

md5 działa tylko w jedną stronę, zmieniasz hasło na jakiegoś randoma i wysyłasz je na dany mail

Mój pierwszy post…

jak i gdzie to zapisać,czy w tym samym kodzie.

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).

Coś ten scrypt nie za bardzo działa,raz na parę prób wyśle wiadomość.Mam pytanie czy odwołanie w przychodzącej wiadomości link dodać w :

$messages.= '

.jak odwołać się do formularza zmiany hasła z linka.

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:

  1. 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.

  1. 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.