Potwierdzenie rejestracji

0

Witam. Mam problem ze skryptem potwierdzenia rejestracji.
Skrypt wysyła maila z linkiem aktywacyjnym (postać linku to adres.pl/user_activate.php?key=md5_loginu).
I problem polega na tym że po wejściu w link nie zmienia pola aktywacji z 0 na 1.

Mój skrypt wygląda tak.
w rejestracji wysyłanie maila:

// Wiadomość
$message = 'Witamy. Niniejszy adres mail zostal uzyty przy rejestracji w serwisie.<br><br>
Jesli nie rejestrowales(as) sie u nas, poprostu zignoruj tego maila.<br>
Aby aktywowac zarejestrowane kont kliknij w ponizszy link<br>
<a href="http://www.adres.pl/user_activate.php?key='.$key.'"><b>Potwierdz rejestracje</b></a>';

$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

// W przypadku każdej linii dłuższej niż 70 znaków powinniśmy użyć funkcji wordwrap()
$message = wordwrap($message, 70);

// Wyślij
mail($email, 'Aktywacja konta na adres.pl', $message, $headers);

W user_activate.php:

$Query='SELECT * FROM users WHERE login="'.mysql_real_escape_string($_GET['user']).'"';
$result = mysql_query($Query) or die(mysql_error());
while ($row = mysql_fetch_array($result))
{
if($row[active]==0) {
  if($_GET['key']==md5($row[login])) {
    $a_user='UPDATE users SET active=1';
    mysql_query($a_user);
}
}
elseif($row[active]==1) {
echo'UWAGA! User juz aktywowany. Mozesz sie zalogowac.';
}
else {
echo'UWAGA! Wystapil blad. Sprawdz poprawnosc link aktywacyjnego lub skontaktuj sie z administracja.';
}
}
0

Jeśli $_GET['user'] to md5 loginu to pierwsze co robisz źle:

$Query='SELECT * FROM users WHERE login="'.mysql_real_escape_string($_GET['user']).'"';

Tutaj sprawdzasz czy login (np. bieniomajster) jest równy 97507e271fd403a0d1238022ad9c8937.

Drugi błąd:

$a_user='UPDATE users SET active=1';
mysql_query($a_user);

Wykonanie tego spowoduje aktywacje wszystkich użytkowników.
Jak dla mnie 'trochę' bez sensu.

Proponuję w wierszu active dla każdego użytkownika przetrzymywać kod token aktywacyjny lub informację '1' oznaczającą aktywność.

Wtedy całość wyglądałaby mniej więcej tak:

// Wiadomość
$message = 'Witamy. Niniejszy adres mail zostal uzyty przy rejestracji w serwisie.<br><br>
Jesli nie rejestrowales(as) sie u nas, poprostu zignoruj tego maila.<br>
Aby aktywowac zarejestrowane kont kliknij w ponizszy link<br>
<a href="http://www.adres.pl/user_activate.php?key='.md5($login).'&login='.$login.'"><b>Potwierdz rejestracje</b></a>'; // Zmiana

mysql_query("UPDATE `users` SET `active`='".md5($login)." WHERE `login`='".$login."' "); // Zmiana

$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

// W przypadku każdej linii dłuższej niż 70 znaków powinniśmy użyć funkcji wordwrap()
$message = wordwrap($message, 70);

// Wyślij
mail($email, 'Aktywacja konta na adres.pl', $message, $headers);
$txt ='Nie udało się';
$select = mysql_query("SELECT * FROM `users` WHERE 
	`login`='".mysql_real_escape_string($_GET['login'])."' AND 
	`active`='".mysql_real_escape_string($_GET['key'])."' 
");
if(mysql_num_rows($select) == 1){
	$query = mysql_query("UPDATE `users` SET `active`='1' WHERE 
		`login`='".mysql_real_escape_string($_GET['login'])."' AND 
		`active`='".mysql_real_escape_string($_GET['key'])."' 
	"); 
	if($query){
		$txt = 'Aktywny';
	}	
}
echo $txt;

Nie sprawdzałem czy działa ale w teorii powinno.

0

Niestety tu

if($query){
                $txt = 'Aktywny';
        }

Jest błąd następującej tresci
Parse error: syntax error, unexpected T_IF in /home/djgarsi/domains/adres.pl/public_html/user_activate.php on line 28.:(

0

Poprawione, średnika wyżej zabrakło.

0

Błędu już nie wywala, ale nie zmienia active na 1.

0

Sprawdziłem i działa.

Zauważ jak wygląda link aktywacyjny. Zmienił się trochę.

0

Wiem. Wrzuciłem dokładnie tak samo jak napisałeś.:(

0

Wklej zrzut tabeli.

0

user image

0

Dodajcie sobie salt do tego MD5, bo samo MD5(login) to nie za ciekawie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1