Zawsze możesz zapisać na serwerze zapytanie i ponawiać je do skutku
- odwołujesz się poprzez domena.pl/skrypt.php?SID=“CiągZnakówKtóryAlgorytmicznieJesteśWstanieOdtworzyć”.Można bardziej jaśniej.Scrypt wysyła mi teraz linka na maila i jak zapisać go by przejść do zmiany hasła.
skrypt.php, to skrypt, który zmieni hasło po kliknięciu w link
SID=“CośTam”, to ciąg znaków, po których jednoznacznie zidentyfikujesz usera (musimy wiedzieć, kto chce zmienić hasło), przy czym ciąg ten nie może być np. ID bo ktoś wpisze np. 1 i będzie userowi zmieniał hasło. Najlepiej konkatenować kilka rzeczy z bazy np id + hash (stare hasło + nick).
Kiedy zostanie podany SID, który jest poprawny dla jakiegoś usera (realnie rzecz biorąc, może się to zdarzyć tylko poprzez kliknięcie). Wywołujesz skrypt, który utworzy losowe hasło, wyśle je do użytkownika w drugiej wiadomości email, a do bazy zapisze jego hash MD5.
Oczywiście pomiń cudzysłowy w URL, dodałem je tylko po to, żebyś się nie zgubił, gdzie się kończy URL.
Wydumałem sobie ta,że ten scrypt:
<?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.= 'zmien haslo';
$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";
}
?> [/code]
ma wysłać Link i otworzyć plik zmiana.php:
[code]<?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($sql); echo 'Email_to: ’ . $email_to; // jeśli $count =1 if($count==1){ { $alphanum = array(‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘g’,‘h’,‘i’,‘j’,‘k’,‘m’,‘n’,‘o’,‘p’,‘q’,‘r’,‘s’,‘t’,‘u’,‘v’,‘x’,‘y’,‘z’,‘A’,‘B’,‘C’,‘D’,‘E’,‘F’,‘G’,‘H’,‘I’,‘J’,‘K’,‘M’,‘N’,‘P’,‘Q’,‘R’,‘S’,‘T’,‘U’,‘V’,‘W’,‘X’,‘Y’,‘Z’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’); $chars = sizeof($alphanum); $a = time(); mt_srand($a); for ($i=0; $i < 6; $i++) { $randnum = intval(mt_rand(0,56)); $newpassword .= $alphanum[$randnum]; } $crypt_pass = md5($newpassword); $sql = (“UPDATE uzytkownicy SET haslo = ‘$crypt_pass’ WHERE email = ‘$email’”); mysql_query($sql); $newpassword=$rows[‘haslo’]; $to=$email_to; $subject = “Nowe hasło”; $message. = “Twoje nowe hasło brzmi:”; $message .= $newpassword; $header = “From: Administrator”."\r\n"; $header .= “Reply-To: webmaster@yourwebsite.com”."\r\n"; $header .= “MIME-Version: 1.0”."\r\n"; $header .= “Content-Type: text/plain; charset=iso-8859-2”."\r\n"; $header .= “Content-Transfer-Encoding: 8bit”."\r\n"; $header .= “X-Mailer: PHP v”.phpversion(); mail($mailto, $subject, $message, $header); echo mysql_error() ?>
,który zmieni hasło i wyśle ponownie na maila.Ale coś jest żle w kodzie.Pomóżcie poprawić ten scrypt.No i jak zapisać ten link do tego kodu ‘zmien haslo’;???Dalej nie wiem z tym sid-em.Po co to???
To nie ma być post tylko get, bo niby jak chcesz formularz do posta wysyłać w mailu ?
sid >> bierzesz z bazy hash np starego hasła, po kliknięciu w link zmieniasz go na podane przez usera.
Czy w pierwszym scrypie zmienić też na GET,bo zapisałem teraz link tak:
$messages.= 'zmien haslo';[/code]
jak go poprawnie zapisać???i dalej przekazanie:
[code]<?php require ‘db.php’; if ($_GET[‘id’] == ‘email_to’) $query=(“SELECT haslo FROM uzytkownicy WHERE email =’$email_to’”); $result=mysql_query($query); $count=mysql_num_rows($sql); echo 'Email_to: ’ . $email_to; // jeśli $count =1 if($count==1)
W php przed zmiennymi daje się dolara …
if ($_GET['id'] == 'email_to') $query=("SELECT haslo FROM uzytkownicy WHERE email ='$email_to'"); [/code]
to jest źle tut do geta ;]
Nie rozumiem o co chodzi czy chodzi o zapis w if.
To odnosiło się do czegoś innego, warunek też jest zły. Ogólnie wszystko jest złe. W skrypcie co to robi masz pobrać z bazy hash jaki masz w id i potem go zmienić na random i wysłać go na maila. A wysyłasz link w postaci: link?id=hash_z_pasem. Linki najprościej dawać w postaci “bla”;
CZy chodzi o ORDER BY RAND()w zapytaniu i czy to w 1-szym scrypcie zrobić.CZy chodzi o tohttp://www.hapart.pl/php/php-generowanie-losowego-hasla.html
po przerwie technicznej na serwerze scrypt w ogóle nie działa,może ktoś wie jak to zmienić lub zna scrypt który działa to proszę o pomoc.
Jeżeli skrypt dla tych samych danych wejściowych raz działa a raz nie, oznacz to tyle, że nie jest to wina skryptu. Zmień serwer, bo mogę się założyć, że co dziesiąty użytkownik tego pseudohostingu rozsyła maile (SPAM) przy pomocy pętla+mail(). Ponieważ host jest darmowy liczba socketów SMTP na pewno jest ograniczona i to do bardzo małej ilości, jak 50 takich osób się nawet znajdzie, to mail() może nie być wstanie znaleźć akurat wolnego socketu (tłumaczyłem już efekt RapidShare na sieci osiedlowej).
Ewentualnie sam zostań floodem, sprawdzaj czy mail() zwrócił false jeśli tak spróbuj wysłać jeszcze raz (aż do skutku). Aczkolwiek nie gwarantuje to, że kiedykolwiek trafisz na wolny socket (przypadek pesymistyczny).
Mam pytanie co w tym zapytaniu jest żle,bo cały czas pokazuje błąd w tej lini???
mysql_query("UPDATE `uzytkownicy` SET `haslo`='$haslomd5' WHERE `nick`='$_POST[nick]'") or die(mysql_error());
Sprawdź wszystkie cudzysłowy i apostrofy
Usiłuję napisać skrypt,który zmieni hasło i wyśle na maila,coś mi nie wychodzi pomóżcie poprawić skrypt:
<?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){ function generatePassword($email_to) {
$haslomd5 =substr(md5(time().rand()),0,$email_to);
$sql=("UPDATEuzytkownicySEThaslo='$haslomd5'WHEREemail='$email_to'"); mysql_query($sql); $haslomd5=$rows['haslo']
$to=$email_to;
$subject="temat e-maila";
$header="From: twojAdres@gmail.com";
$messages.= "Twoje hasło do Bazy \r\n";
$messages.= "Twoje hasło do bazy to $haslomd5 \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";
}
?>
Nie wnikałem we skrypt, bo to jest nie możliwe ze względu na jego “rozjeżdżanie się”
// jeśli $count =1 if($count==1){
Jesteś świadom, że komentarz ‘//’ jest liniowy i komentujesz też ifa? Zaopatrz się w jakiś edytor sprawdzający na bieżąco składnie, bo to jest żenua.
function generatePassword($email_to) {
Definicja funkcji, która nie wiadomo, gdzie się kończy i nawet nie ma jej wywołania. Moja rada zgłoś się do jakiegoś webmastera i przyszykuj się na przetrzebienie portfela.
$sql=("UPDATEuzytkownicySEThaslo='$haslomd5'WHEREemail='$email_to'");
To jest bardzo bałaganiarskie podejście, obrażające poniekąd tych co chcą ci pomóc, na moją pomoc nie masz co liczyć, jeśli nie zmienisz stosunku - tyle w tym temacie. Wklejasz bałagan i prosisz o posprzątanie - szukaj naiwniaków dalej…