проблем с активация

systems

Registered
Добър вечер опитвам се да направя активационен фаил които да активира
даден акаунт когато стоиноста в базата с данни е 0 акаунта не е активен
но когато акаунта в базата с данни е активен стоиноста е 1.


да но след като получа линка в пощата за активация на акаунта като щракна на него
ми показва бяла страница а трябва да активира акаунта, аз ли някъде греша
ето ми активационния фаил:

PHP:
<?php
include("connect.php")
$passkey = $_GET['passkey'];
$sql = "UPDATE  users SET is_activated='1' WHERE confirm_code='$passkey'";
$result = mysqli_query($sql) or die(mysqli_error());
if($result)
{
echo "forum accont active";
}
 else
 {
  echo "Some error occur.";
 }
?>


а ето така генерирам ключа:

Код:
$confirm_code=md5(uniqid(rand()));

немога да схвана защо ми дава бяла страница след като щракна на активацинния линк.
 
Най-вероятно не получаваш активационния код. Дай едно echo на $passkey = $_GET['passkey']; Според мен трябва да вземеш URL-a и от него да извлечеш активационния код, да го сравниш с този в базата и ако съвпадат да ъпдейтваш.
 
А как знаеш кой е потребителя? Не виждам да даваш ID на потребителя, който ще ъпдейтваш записа.. lastInsertId('id') ми е ID-то на потребителя, който ще се активира и ще му се променя запиа в базата.
Аз го правя така:
Код:
$activacion = md5(uniqid(rand(),true));

try {

	$stmt = $pdo->prepare('INSERT INTO users (username,password,email,active) VALUES (:username, :password, :email, :active)');
	$stmt->execute(array(
			':username' => $_POST['username'],
		        ':password' => $hashedpassword,
			':email' => $_POST['email'],
			':active' => $activasion
	));
	$id = $pdo->lastInsertId('id');

      // изпращам мейла...
В мейла, който изпращам линка е така:
Код:
http://saita.com/activate.php?x=$id&y=$activacion

При натискане на линка проверявам и сменят така:
Код:
$id = trim($_GET['x']);
$active = trim($_GET['y']);

if(is_numeric($id) && !empty($active)){

	$stmt = $pdo->prepare("UPDATE users SET active = 'Yes' WHERE id = :id AND active = :active");
	$stmt->execute(array(
		':id' => $id,
		':active' => $active
	));
 
Принципно не е нужно да знае кой е потребителя, защото активационният код се очаква да е уникален, и когато го знае него, знае и на кой потребител принадлежи. Правилно си го е направил, само трябва да извлече кода от урл-а и да му направи сравнение.
 
teroristd каза:
Принципно не е нужно да знае кой е потребителя, защото активационният код се очаква да е уникален, и когато го знае него, знае и на кой потребител принадлежи. Правилно си го е направил, само трябва да извлече кода от урл-а и да му направи сравнение.
От гледна точка на перформънса не е ли по-добре да знае потребителя?

В даден момент ако има 10-100к потребители ще трябва да прерови цялата таблица, за да намери уникалния код..
 
В случая този код който ползваш ти, и неговия са един вид идентични. Ти имаш заявка спрямо id, а той спрямо активационен код. Няма никаква разлика в перформънса.
 
Ето това е генерирания код и тои съвпада с този от базата с данни но въпреки това ми дава бял екран активацинния файл:

Код:
http://site.com/confirmation.php?passkey=2dc02c5fc0ac2de53decc3cfb2aca6a3
 
Оправих го сложиш скобите и тръгна да работи благодаря ви.

PHP:
$sql =( "UPDATE  users SET is_activated='1' WHERE confirm_code='$passkey'");
 
Оправих го сложиш скобите и тръгна да работи благодаря ви.

PHP:
$sql =("UPDATE  users SET is_activated='1' WHERE confirm_code='$passkey'");
 
teroristd каза:
В случая този код който ползваш ти, и неговия са един вид идентични. Ти имаш заявка спрямо id, а той спрямо активационен код. Няма никаква разлика в перформънса.
Принципно, като се замислих .. си прав :)
И в двата случая рови еднакво в базата и таблицата
 
vinsbg каза:
teroristd каза:
В случая този код който ползваш ти, и неговия са един вид идентични. Ти имаш заявка спрямо id, а той спрямо активационен код. Няма никаква разлика в перформънса.
Принципно, като се замислих .. си прав :)
И в двата случая рови еднакво в базата и таблицата

Логически погледнато е така :) , вече разлика може да има в зависимост от базата данни и настроиките на полетата.
 

Back
Горе