Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Problem ze skryptem rejestracji i logowania
#1
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>&nbsp;&nbsp;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) < 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) < 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) < 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]
Odpowiedz
#2
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?
Odpowiedz
#3
(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.
Odpowiedz
#4
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
Odpowiedz


Podobne wątki…
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Jaki skrypt na serwis ogłoszeń o pracę? Ładny graficznie,bez potrzeby rejestracji. puma 2 2,362 20-12-2011, 14:53
Ostatni post: ILIES
  Problem ze skryptem na republika.pl marecky 4 3,510 16-12-2011, 14:10
Ostatni post: marecky
  Problemy ze skryptem na dbv.pl Dawid1346 2 2,613 24-10-2011, 17:27
Ostatni post: Dawid1346
  Problem ze skryptem logowania. Lampek 0 1,472 23-08-2011, 21:00
Ostatni post: Lampek
  Banner z oknem do logowania borys24 2 3,243 14-06-2011, 01:33
Ostatni post: borys24

Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości
Sponsorzy i przyjaciele
SeoHost.pl