Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem ze sprawdzaniem funkcji
Forum PHP.pl > Forum > Przedszkole
-Anka-
Witam!

Napisałam sobie skrypt weryfikacji użytkownika poprzez email. No i tutaj pojawił się problem. Mianowicie...

Oto funkcja wraz z plikiem sprawdzającym:
  1. <?php
  2. include ("init.php");
  3.  
  4. function user_activation ()
  5. {
  6.  $password = $_GET['hash'];
  7.  $timestamp = base64_decode($_GET['timestamp']);
  8. $query = mysql_query("UPDATE users SET status=1 WHERE (password = '$password') AND (timestamp = '$timestamp')") or die (mysql_error());
  9. }
  10.  
  11. if (!user_activation ()){
  12. echo 'nieaktywne';
  13. } else {
  14. echo ' konto aktywowane';
  15. }
  16.  
  17. ?>


Problem polega nie na działaniu funkcji, ale na moim zapewne nie rozumieniu jeszcze pewnych elementów php.

Jak zapewne widzicie, w momencie wejścia użytkownika na podany link, zostają pobrane i sprawdzone z bazą dane. To można pominąć, bo wszystko działa jak należy. Wysyłanie także działa.

Chciałabym uzyskać coś innego, otóż... W momencie, kiedy użytkownik wchodzi na link, aktywuje konto, no i dostaje ładną wiadomość powitalną. Ale czy jest możliwość jakiegoś czasowego ograniczenia poprawności linku?smile.gif

Wybaczcie moje, może ciutkę zagmatwane, wyjaśnienia, ale mój parser nie potrafi interpretować jeszcze wszystkich wiadomości, a poza tym, z php mam doczynienia raptem dwa dni.

PS Czy można gdzieś znaleść manual w postaci pliku PDF do wydrukowania?

PS 2 Błagam...zmieńcie captcha, bo za cholerę nie mogę jej przeczytać.

Pozdrawiam
Anka aka ColdSand
-Anka-
No i zapomniałam o jeszcze jednym. Kiedy wysyła dane do bazy wyświetla mi echo, że konto jest nieaktywne. Ale kiedy nie wysyła tych danych, bo już w bazie są, wysyła to samo. Tego nie rozumiem.
nospor
zajrzyj do manuala i zobacz jak dzialaja funkcje.
Jak nic nie zwracasz to tak jakbys zwrocila false, czyli:
if (!user_activation ()){
jest zawsze spelnione.

Funkcja musi zwracac wynik dzialania.
-Anka-
@nospor: Problem w tym, że chyba za dużo manuala mam na raz;)

Zmieniłam fragment sprawdzający na:
  1. <?php
  2. if (user_activation ()){
  3. echo 'Your account has been activated.';
  4. } else {
  5. echo 'Your account has been already activated.';
  6. }
  7. ?>


I za każdym razem zwraca mi drugą opcję.
smialy
Nie wiem czy nie za późno ale może nie smile.gif
Aby zadziałało:
Kod
<?php
if (user_activation ()){
echo 'Your account has been activated.';
} else {
echo 'Your account has been already activated.';
}
?>


funkcja user_activation() musi zwracać wartość: 'return'. Samo wysłanie zapytania nic nie da. Jeśli jest ok to return true inaczej return false. Poza tym raczej nie powinno się wysyłać hasła użytkownika w adresie :/ Raczej dodatkowe pole w tabeli z wygenerowanym hashem. Może być osobna tabela.

Kod
function user_activation ()
{
    $hash = preg_replace('/[^a-zA-Z0-9]/'','',$_GET['hash']); //filtrowanie aby hash składał się tylko z liter i liczb
    return mysql_query('UPDATE users SET status=1 WHERE hash =  \''. #hash .'\' LIMIT 1');
    //mysql_query zwraca wartość logiczną dla update czyli jeśli zamieni jakiś rekord to true a jeśli nie to false
    // return zwraca to co otrzyma z query
}


Jeśli chcesz ograniczyć czasowo aktywacje to trzeba raczej w tabeli w nowym polu np: czas_rejestraji typu DATE wstawić przy rejestracji NOW() a pozniej funkcja DATE_DIFF() porównać.

Tak bym kombinował smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.