Problem ze skryptem rejestracji i logowania - neneth - 28-10-2010
Witam, na początku chcę zaznaczyć, że jestem początkującym webmasterem i przepraszam za głupie pytania, ale to dla mnie duży problem. Znalazłem w sieci skrypt rejestracji i logowania, ale brakuje mi pewnego przekierowania i nie wiem, co i gdzie wstawić. Mam następujące piki:
logowanie.php
Kod PHP: session_start(); // rozpoczÄ_cie sesji
if (!isset($_SESSION['login'])) { // dostÄ_p dla niezalogowanego uĹźytkownika
if ($_POST['wyslane']) { // jeĹźeli formularz zostaĹ_ wysĹ_any, to wykonuje siÄ_ poniĹźszy skrypt
include 'db.php'; // poĹ_Ä_czenie siÄ_ z bazÄ_ danych $tabela = 'uzytkownik'; // zdefiniowanie tabeli MySQL
$login = $_POST["login"]; $haslo = $_POST["haslo"];
$haslo = md5($haslo); // szyfrowanie podanego hasĹ_a
$wynik=mysql_query("SELECT * FROM $tabela WHERE login='$login' and haslo='$haslo' and status=0");
// jeĹźeli uĹźytkownik zarejestrowaĹ_ siÄ_, a nie aktywowaĹ_ swojego konta, to wyĹ_wietla siÄ_ komunikat if (mysql_num_rows($wynik) == 1) { $informacja = mysql_fetch_array($wynik); echo '<p>Nie aktywowałeś jeszcze swojego konta. Aby to zrobić, wejdź w swoją skrzynkę odbiorczą, a następnie znajdź wiadmość z linkiem aktywacyjnym i aktywuj swoje konto.</p>'; exit; }
// jeĹźeli wszystko jest dobrze, uĹźytkownik siÄ_ loguje $wynik=mysql_query("SELECT * FROM $tabela WHERE login='$login' and haslo='$haslo' and status=1");
if (mysql_num_rows($wynik) == 1) { $informacja = mysql_fetch_array($wynik); $_SESSION["login"] = $informacja["login"]; header('Location: index.php '); } else { echo '<p>Zostały wprowadzone nieprawidłowe dane. Wypełnij formularz ponownie.</p>'; } mysql_close($polaczenie); }
// tworzenie formularza HTML echo <<< KONIEC <p style="text-align:left"></p><font size=2; color="#0000ff"><b> REJESTRACJA/LOGOWANIE</font></b> <br> <br> <form action="logowanie.php" method="post"> <input type="hidden" name="wyslane" value="TRUE" />
<p> <span style="color:#0000ff">Login:</span> <input type="text" name="login" /></p> <p> <span style="color:#0000ff">Hasło: </span><input type="password" name="haslo" /></p>
<p><input type="submit" value="Zaloguj się" /></p>
</form> KONIEC;
} else { header('Location: / '); // zalogowany uĹźytkownik zostaje przekierowany na stronÄ_ gĹ_ĂłwnÄ_ }
if ($_GET["wylogowanie"] == "tak") { // niszczenie sesji uĹźytkownika session_unset(); session_destroy(); header('Location: / '); // przekierwanie na stronÄ_ gĹ_ĂłwnÄ_ }
rejestracja.php
Kod PHP: session_start(); // rozpoczĂ__cie sesji
if (!isset($_SESSION['login'])) { // dostĂ__p dla zalogowanego uĚźytkownika
include 'db.php'; // poÄš_Ă__czenie siĂ__ z bazĂ__ danych $tabela = 'uzytkownik'; // zdefiniowanie tabeli MySQL require_once('recaptchalib.php'); // doÄš_Ă__czenie moduÄš_u reCAPTCHA $privatekey = '6Ld83r0SAAAAAP1CMPSwPazjG-6QLO9J8RpyZjTT '; // prywatny klucz reCAPTCHA $publickey = '6Ld83r0SAAAAALNYbNZEBieqh5k3KVad4we8Bmbb'; // publiczny klucz reCAPTCHA
if ($_POST["wyslane"]) { // jeĚźeli formularz zostaÄš_ wysÄš_any, to wykonuje siĂ__ poniĚźszy skrypt
// filtrowanie treĚ_ci wprowadzonych przez uĚźytkownika $login = htmlspecialchars(stripslashes(strip_tags(trim($_POST["login"]))), ENT_QUOTES); $haslo = $_POST["haslo"]; $haslo2 = $_POST["haslo2"]; $email = htmlspecialchars(stripslashes(strip_tags(trim($_POST["email"]))), ENT_QUOTES); $email2 = htmlspecialchars(stripslashes(strip_tags(trim($_POST["email2"]))), ENT_QUOTES); $imie = htmlspecialchars(addslashes(strip_tags(trim($_POST["imie"]))), ENT_QUOTES); $nazwisko = htmlspecialchars(addslashes(strip_tags(trim($_POST["nazwisko"]))), ENT_QUOTES); $resp = recaptcha_check_answer ($privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]);
// system sprawdza czy prawidÄš_o zostaÄš_y wprowadzone dane if (strlen($login) < 3 or strlen($login) > 30 or !eregi("^[a-zA-Z0-9_.]+$", $login)) { $blad++; echo '<p>ProszĂ__ poprawny wprowadziĂ__ login (od 3 do 30 znakÄ_Ĺ_w).</p>'; } else { $wynik = mysql_query("SELECT * FROM $tabela WHERE login='$login'"); if (mysql_num_rows($wynik) <> 0) { $blad++; echo '<p>Podana nazwa uĚźytkownika zostaÄš_a juĚź zajĂ__ta.</p>'; } } if (strlen($haslo) < 6 or strlen($haslo) > 30 ) { $blad++; echo '<p>ProszĂ__ poprawnie wpisaĂ__ hasÄš_o (od 6 znakÄ_Ĺ_w do 30 znakÄ_Ĺ_w). </p>'; } if ($haslo !== $haslo2) { $blad++; echo '<p> Podane hasÄš_a nie sĂ__ ze sobĂ__ zgodne. </p>'; } if (!eregi("^[0-9a-z_.-]+@([0-9a-z-]+.)+[a-z]{2,4}$", $email)) { $blad++; echo '<p> ProszĂ__ wprowadziĂ__ poprawnie adres email.</p>'; } else { $wynik = mysql_query("SELECT * FROM $tabela WHERE email='$email'"); if (mysql_num_rows($wynik) <> 0) { $blad++; echo '<p> Podany adres e-mail jest juĚź zajĂ__ty.</p>'; } } if ($email !== $email2) { $blad++; echo '<p> Podane adresy e-mail nie sĂ__ ze sobĂ__ zgodne.</p>'; } if (!$resp->is_valid) { $error = $resp->error; echo '<p>ProszĂ__ wpisaĂ__ poprawnie wyrazy z obrazka.</p>'; $blad++; }
// jeĚźeli nie ma Ěźadnego bĚ_edu, uĚźytkownik zostaje zarejestronwany i wysĚ_any do niego e-mail z linkiem aktywacyjnym if ($blad == 0) {
$haslo = md5($haslo); // zaszyfrowanie hasla $kod = uniqid(rand()); // tworzenie unikalnego kodu dla uĚźytkownika
$wynik = mysql_query("INSERT INTO $tabela VALUES('', '$imie', '$nazwisko', '$login', '$haslo', '$email', '$kod', NOW(), '')"); if ($wynik) { $list = "Witaj $login ! Kliknij w poniĚźszy link, aby aktywowaĂ__ swoje konto. http://smuklasylwetka.home.pl/weryfikacja.php?weryfikacja=potwierdz&kod=$kod"; mail($email, "Rejestracja uĚźytkownika", $list, "From: <[email protected]>"); echo '<p>DziĂ__kujemy za rejestracjĂ__! W ciĂ__gu nabliĚźszych 5 minut dostaniesz wiadomoÄš_Ă__ e-mail z dalszymi wskazÄ_Ĺ_wkami rejestracji.</p>'; mysql_close($polaczenie); exit; } } mysql_close($polaczenie); }
// tworzenie formularza HTML echo <<< KONIEC
<form action="rejestracja.php" method="post"> <input type="hidden" name="wyslane" value="TRUE" />
<p>ImiĂ__: <input type="text" name="imie" /></p> <p>Nazwisko: <input type="text" name="nazwisko" /></p> <p>Login*: <input type="text" name="login" /></p> <p>HasÄš_o*: <input type="password" name="haslo" /></p> <p>PowtÄ_Ĺ_rz hasÄš_o*: <input type="password" name="haslo2" /></p> <p>Adres e-mail*: <input type="text" name="email" /></p> <p>PowtĂłrz adres e-mail*: <input type="text" name="email2" /></p> KONIEC;
echo recaptcha_get_html($publickey); // wyÄš_wietlanie reCAPTCHA echo <<< KONIEC
<p><input type="submit" value="wyÄš_lij" /></p></form> KONIEC;
} else { header('Location: / '); // zalogowany uĚźytkownik zostaje przekierowany na stronĂ__ gÄš_Ä_Ĺ_wnĂ__ }
zmiana-danych.php
Kod PHP: session_start();
include 'db.php'; // poĹ_Ä_czenie siÄ_ z bazÄ_ danych $tabela = 'uzytkownik'; // zdefiniowanie tabeli MySQL
if (isset($_SESSION['login'])) { // dostÄ_p dla zalogowanego uĹźytkownika
if ($_POST['wyslane']) { // jeĹźeli formularz zostaĹ_ wysĹ_any, to wykonuje siÄ_ poniĹźszy skrypt
// filtrowanie treĹ_ci wprowadzonych przez uĹźytkownika $email = htmlspecialchars(stripslashes(strip_tags(trim($_POST["email"]))), ENT_QUOTES);
$haslo = $_POST["haslo"]; $haslo2 = $_POST["haslo2"];
// system sprawdza czy prawidĹ_owo zostaĹ_y wprowadzone dane if (!eregi("^[0-9a-z_.-]+@([0-9a-z-]+.)+[a-z]{2,4}$", $email)) { $blad++; echo '<p>ProszÄ_ wprowadziÄ_ poprawnie adres email </p>'; } $wynik = mysql_query("SELECT * FROM $tabela WHERE login='{$_SESSION["login"]}'"); if ($wynik) { $informacja = mysql_fetch_array($wynik); if ($email !== $informacja['email']) { $wynik = mysql_query("SELECT * FROM $tabela WHERE email='$email'"); if (mysql_num_rows($wynik) <> 0) { $blad++; echo '<p> Podany adres e-mail jest juĹź zajÄ_ty.</p>'; } } }
if ($haslo) { if (strlen($haslo) < 6 or strlen($haslo) > 30) { $blad++; echo '<p>ProszÄ_ poprawnie wpisaÄ_ hasĹ_o (od 6 znakĂłw do 30 znakĂłw) <p/>'; } }
if ($haslo !== $haslo2) { $blad++; echo '<p>Podane hasĹ_a nie sÄ_ ze sobÄ_ zgodne <p/>'; }
// jeĹźeli bĹ_Ä_d nie wystÄ_piĹ_, to dane zostajÄ_ prawidĹ_owo zapisane z bazie MySQL if ($blad == 0) { if ($haslo == false) { $wynik = mysql_query("UPDATE $tabela SET email='$email' WHERE login='{$_SESSION['login']}'"); } else { $haslo = md5($haslo); // szyfrowanie hasla $wynik = mysql_query("UPDATE $tabela SET haslo='$haslo', email='$email' WHERE login='{$_SESSION['login']}'"); }
if ($wynik) { echo '<p>Dane zostaĹ_y zmienione</p>'; } else { echo '<p>Dane nie zostaĹ_y zmienione</p>'; } } }
$wynik = mysql_query("SELECT * FROM $tabela WHERE login='{$_SESSION["login"]}'"); if ($wynik) { $informacja = mysql_fetch_array($wynik);
// tworzenie formularza HTML z danymi uĹźytkownika echo <<< KONIEC
<form action="zmiana-danych.php" method="post"> <input type="hidden" name="wyslane" value="TRUE" />
<p>Login: <input type="text" name="login" disabled="disabled" value="{$informacja['login']}" /></p> <p>Adres e-mail: <input type="text" name="email" value="{$informacja['email']}" /></p> <p>HasĹ_o: <input type="password" name="haslo" /></p> <p>PowtĂłrz hasĹ_o: <input type="password" name="haslo2" /></p>
<p><input type="submit" value="wyĹ_lij" /></p> KONIEC; } mysql_close($polaczenie);
} else {
header('Location: / '); // niezalogowany uĹźytkownik zostaje przekierowany na stronÄ_ gĹ_ĂłwnÄ_
}
przypomnienie.php
Kod PHP: session_start(); // rozpoczÄ_cie sesji
if (!isset($_SESSION['login'])) { // dostÄ_p dla niezalogowanego uĹźytkownika
include 'db.php'; // poĹ_Ä_czenie siÄ_ z bazÄ_ danych $tabela = 'uzytkownik'; // zdefiniowanie tabeli MySQL
if ($_POST['wyslane']) { // jeĹźeli formularz zostaĹ_ wysĹ_any, to wykonuje siÄ_ poniĹźszy skrypt
$login = htmlspecialchars(stripslashes(strip_tags(trim($_POST["login"]))), ENT_QUOTES); // filtrowanie $_POST['login']
$hasloodszyfrowane = uniqid(rand()); // tworzenie nowe hasĹ_a $haslo = md5($hasloodszyfrowane); // szyfrowanie hasĹ_a
// uĹźytkownikowi zostaje zmienione hasĹ_o, ktĂłre system wygenerowaĹ_ // jeĹźeli podanego loginu nie ma w bazie, wyĹ_wietla siÄ_ komunikat $wynik = mysql_query("UPDATE $tabela SET haslo='$haslo' WHERE login='$login' and status=1");
$wynik = mysql_query("SELECT * FROM $tabela WHERE login='$login' and status=1");
if (mysql_num_rows($wynik) == 1) { $informacja = mysql_fetch_array($wynik); $email = $informacja["email"]; $list="Twoje nowe wygenerowane hasĹ_o to: $hasloodszyfrowane"; mail($email, "Przypomnienie hasla", $list, "From: <[email protected]>"); echo '<p>Nowe hasĹ_o zostaĹ_o wysĹ_ane na adres e-mail wykorzystany podczas rejestracji konta.</p>'; } else { echo '<p>UĹźytkownik o podanym loginie nie istnieje!</p>'; } mysql_close($polaczenie); }
// tworzenie formularza HTML echo <<< KONIEC
<form action="przypomnienie.php" method="post"> <input type="hidden" name="wyslane" value="TRUE" />
<p>Login: <input type="text" name="login" /></p>
<p><input type="submit" value="wyĹ_lij" /></p> KONIEC;
} else { header('Location: index.php '); // zalogowany uĹźytkownik zostaje przekierowany na stronÄ_ gĹ_ĂłwnÄ_ }
weryfikacja.php
Kod PHP: if ($_GET['weryfikacja'] == 'potwierdz') {
include 'db.php'; // poĹ_Ä_czenie siÄ_ z bazÄ_ danych $tabela = 'uzytkownik'; // zdefiniowanie tabeli MySQL
$kod = htmlspecialchars(stripslashes(strip_tags(trim($_GET['kod']))), ENT_QUOTES); // filtrowanie $_GET['kod']
// jeĹźeli kod znajduje siÄ_ URL, skrypt najpierw patrzy czy uĹźytkownik ma aktywne konto // jeĹźeli nie ma, wtedy zmienia siÄ_ jego status, jeĹźeli nie upĹ_ynÄ_Ĺ_o 48 godzin od rejestracji $wynik = mysql_query("SELECT * FROM $tabela
WHERE kod='$kod' and status=1"); if (mysql_num_rows($wynik) == 1) { echo '<p>AktywowaĹ_eĹ_ juĹź swoje konto.</p'; exit; } else { $wynik = mysql_query("DELETE FROM $tabela WHERE data<=DATE_SUB(NOW(),INTERVAL 2 DAY) and status=0"); $wynik = mysql_query("UPDATE $tabela SET status='1', data=NOW() WHERE kod='$kod' and status=0"); $wynik = mysql_query("SELECT * FROM $tabela WHERE kod='$kod' and status=1"); if (mysql_num_rows($wynik) == 1) { echo '<p>DziÄ_kujemy. Rejestracja zostaĹ_a zakoĹ_czona poprawnie. MoĹźesz siÄ_ teraz zalogowaÄ_.</p>'; } }
// jeĹźeli zostaĹ_ wprowadzony zĹ_y link, wyĹ_wietla siÄ_ bĹ_Ä_d if (!$kod or mysql_num_rows($wynik)<>1) { echo '<p>Aktywowanie konta nie powiodĹ_o siÄ_.</p>'; } mysql_close($polaczenie);
}
do tego jest jeszcze plik połączenia z bazą danych db.php
Mój problem jest następujący: po wykonaniu logowania testowego wszystko wydaje się w porządku, ale kiedy próbuję się zalogować używając innego loginu i hasła, wyskakuje mi komunikat że hasło i login jest nieprawidłowy. Tutaj powinno być przekierowanie do rejestracji, a nie nie przekierowuje. Wiem że chodzi o wpisanie tylko jednej linijki, ale bardzo proszę o pomoc jakoś życzliwą osobę. Niech mi ktoś wskaże, co gdzie wpisać. Mam też problem z ustawieniem kodowania. W pliku logowanie.php wszystko jest dobrze, a na stronie wyskakują krzaczki i nie mogę sformatować formularza na swoje potrzeby. Proszę o pomoc i z góry dziękuję.
[php]
RE: Problem ze skryptem rejestracji i logowania - swinia - 28-10-2010
W miejscu gdzie jest komunikat o nieprawidłowych danych wklej
header("location:rejestracja.php");
a jakie masz kodowanie w meta??
jak masz ustawione rodzaj kodowania w swoim edytorze?
RE: Problem ze skryptem rejestracji i logowania - neneth - 15-11-2010
(28-10-2010, 14:34)swinia napisał(a): W miejscu gdzie jest komunikat o nieprawidłowych danych wklej
header("location:rejestracja.php");
a jakie masz kodowanie w meta??
jak masz ustawione rodzaj kodowania w swoim edytorze?
Witam,
jakiś czas temu pisałam o moim problemie ze skryptem rejestracji i logowania. Mój problem jest następujący. Musiałem przebudować stronkę i na stronie mam index.php mam zaincludowany skrypt logowania - ukazuje się jako pierwszy, a dopiero jak logowanie nie jest prawidłowe, to powinien włączyć się formularz rejestracji. U mnie nie działa skrypt logowania i nie mam pojęcia, dlaczego. Pokazuje mi się taki błąd:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /logowanie.php:9) in /logowanie.php on line 11
Zostały wprowadzone nieprawidłowe dane. Musisz się zarejestrować.
Warning: mysql_close(): supplied argument is not a valid MySQL-Link resource in /logowanie.php on line 46
A oto skrypt logowania:
Kod PHP: session_start(); // rozpoczÄ_cie sesji if (!isset($_SESSION['login'])) { // dostÄ_p dla niezalogowanego uĹźytkownika
if ($_POST['wyslane']) { // jeĹźeli formularz zostaĹ_ wysĹ_any, to wykonuje siÄ_ poniĹźszy skrypt
include 'db.php'; // poĹ_Ä_czenie siÄ_ z bazÄ_ danych $tabela = 'uzytkownik'; // zdefiniowanie tabeli MySQL
$login = $_POST["login"]; $haslo = $_POST["haslo"];
$haslo = md5($haslo); // szyfrowanie podanego hasĹ_a
$wynik=mysql_query("SELECT * FROM $tabela WHERE login='$login' and haslo='$haslo' and status=0");
// jeĹźeli uĹźytkownik zarejestrowaĹ_ siÄ_, a nie aktywowaĹ_ swojego konta, to wyĹ_wietla siÄ_ komunikat if (mysql_num_rows($wynik) == 1) { $informacja = mysql_fetch_array($wynik); echo '<p>Nie aktywowałeś jeszcze swojego konta. Aby to zrobić, wejdź w swoją skrzynkę odbiorczą, a następnie znajdź wiadmość z linkiem aktywacyjnym i aktywuj swoje konto.</p>'; exit; }
// jeĹźeli wszystko jest dobrze, uĹźytkownik siÄ_ loguje $wynik=mysql_query("SELECT * FROM $tabela WHERE login='$login' and haslo='$haslo' and status=1");
if (mysql_num_rows($wynik) == 1) { $informacja = mysql_fetch_array($wynik); $_SESSION["login"] = $informacja["login"]; header('Location: index.php '); } else { echo '<p>Zostały wprowadzone nieprawidłowe dane. Musisz się zarejestrować.</p>'; } mysql_close($polaczenie); }
// tworzenie formularza HTML echo <<< KONIEC <center> <form action="logowanie.php" method="post"> <input type="hidden" name="wyslane" value="TRUE" />
Login: <input type="text" name="login" /> <br> Hasło:<input type="password" name="haslo" /> <br> <br> <input type="submit" value="Zaloguj się" />
</form> </center> KONIEC;
} else { header('Location: / '); // zalogowany uĹźytkownik zostaje przekierowany na stronÄ_ gĹ_ĂłwnÄ_ }
if ($_GET["wylogowanie"] == "tak") { // niszczenie sesji uĹźytkownika session_unset(); session_destroy(); header('Location: / '); // przekierwanie na stronÄ_ gĹ_ĂłwnÄ_ }
Proszę o pomoc, to dla mnie ważne.
RE: Problem ze skryptem rejestracji i logowania - ixtab - 15-11-2010
1. Jeśli nie masz na 100% żadnej spacji, ani jakiegokolwiek innego znaku przed session_start(); to masz złe kodowanie pliku, Przekonwertuj plik na UTF-8 bez BOM.
2. Usuń mysql_close($polaczenie), PHP sam zakończy połączenie po wykonaniu programu
|