2011-02-02 3 views
0

Кто-нибудь хочет сделать снимок, почему эта активация электронной почты не работает? В принципе, я отправляю две переменные запроса url, которые хранят ключ активации и электронную почту как укусы. Я извлекаю их как list() и использую их как запросы db. Все объекты db работают нормально, когда тестируются, но когда я запускаю скрипт из электронной почты, он выводит эхо-комментарий: «учетная запись теперь активна ...», но когда я проверяю базу данных, она не обновляла эти вещи Я сказал это, например, keykey, status и userid.проблема с скриптом активации электронной почты

Вот странная часть: когда у меня есть только один пользователь в базе данных, код выполняет так, как должен. Но как только я попробую добавить другого пользователя, он не обновляет новые записи в соответствии с инструкциями. Итак, мой вопрос: почему этот код работает только в том случае, если в базе данных есть один пользователь, а не когда есть еще один? Это не имеет никакого смысла. Было бы очень полезно помочь здесь.

include $_SERVER['DOCUMENT_ROOT']. '/video_dating/includes/Database.php'; 
list($queryString,$email) = explode('&', $_SERVER['QUERY_STRING']); 

print_r($email); 
$dbname = new Database(); 
$dbname->Query('select activationkey, id, email from users'); 
$userinfo = $dbname->Getdata(); 
foreach ($userinfo as $users) 
{ 

    if ($queryString == $users['activationkey']) 
    { 
    $dbname->Query("update users set activationkey='', status='activated', userid='1' where email='$email'"); 
    echo "Thank you for registering. Your account is now active. Please login any time."; 

    } 
    else 
     echo "Sorry, your account was not activated."; 
} 

ответ

0

Может быть, что поле userid определяется как ключ? Если да, то он должен быть уникальным, но вы всегда установить его на 1

Попробуйте удалить эту часть из UPDATE:

, userid='1' 
+0

Эй, большое спасибо за быстрый ответ. На самом деле, и это может звучать семантически вводить в заблуждение, но идентификатор пользователя фактически связан с типом учетной записи, которую пользователь имеет (1 является базовым, 2 стандартным и 3 - премиальным), поэтому он не делает auto_increment. При активации они автоматически получают «базовую учетную запись». У меня есть поле id, которое делает auto_increment ... И да, я обязательно добавлю эту меру безопасности, но сначала я хочу, чтобы эта работа работала правильно. Итак, как насчет моего запроса на обновление: мне все еще нужно ссылаться на $ email в строке, чтобы он мог обновлять правильные записи? – bill

+0

Сначала я думаю, вы должны проверить, действительно ли вы получите желаемые значения из QUERY_STRING. Я думаю, что вы должны взорваться '&' не '&'. '&' вы используете в HTML для кодирования '&', если он используется, например. для URI, но внутри QUERY_STRING это будет '&' –

+0

Существует (на мой взгляд) также нет необходимости в двух шагах, просто сделайте обновление: 'update users set activationkey = '', status = 'activated', userid = '1', где email = '$ email' AND activationkey = '$ queryString''. Если обновление прошло успешно, mysql_affected_rows расскажет вам. И, конечно же, вы должны санировать/проверять данные, поступающие от пользователя, прежде чем работать с ними, например, GWW. –

2

я не знаю структуру вашей базы данных, но я предполагаю, что идентификатор является ключ автоматического увеличения. Я предполагаю, что проблема заключается в userid='1' этой части вашего кода, где вы всегда предполагаете, что идентификатор пользователя равен 1.

Вы также можете немного упростить код, просто запросив ключ активации непосредственно.

ie.

$dbname->Query('select activationkey, id, email from users WHERE activationkey="'.$queryString.'" and email = "'.$email.'"'); 

Кроме того, вы должны убедиться в том, что вы избегаете своего запросаString и электронной почты, чтобы предотвратить атаки впрыска базы данных. Вы можете использовать mysql_real_escape_string или альтернативу, основанную на вашем классе базы данных.

+0

Не могли бы вы разместить свою схему таблиц в своем вопросе? – GWW

+0

У меня только 3 таблицы: пользователи, у которых есть все столбцы информации о пользователе (например, имя пользователя, адрес электронной почты, пароль пользователя, пароль, dob). Member, который имеет столбец идентификатора и описания (он описывает, что каждому уровню обслуживания предоставляется пользователь). У меня также есть таблица поиска, которая объединяет поле userid в таблице users с идентификатором таблицы элементов и описанием. Тем не менее, единственной таблицей, на которую влияет этот скрипт активации, является таблица пользователей. И, как я уже сказал, он работает, пока в таблице пользователей есть только одна пользовательская информация. – bill

+0

Это заставляет меня думать, что у вас странная колонка, которая вызывает проблемы. Или, возможно, что-то не так с вашими ключами аутентификации. – GWW