Вопрос

Я создал этот сценарий активации регистрации учетной записи, я снова проверил его снова и снова найти ошибки, я не вижу определенную ошибку ...

Домен будет таким:

http://domain.com/include/register.phpykey=true&p=afrwdcowf0bo6ksb6umnmf7d333gabob.

Который исходит из электронного письма, когда пользователь нажимает его, они перенаправлены на этот скрипт:

if($_GET['key'] == true)
{
    $key = $_GET['p'];

    $sql = "SELECT * FROM users
            WHERE user_key = '" . $key . "'";

    $result = mysql_query($sql) or die(mysql_error());

    if(mysql_affected_rows($result) > 0)
    {
        $sql = "UPDATE users
                SET user_key = '', user_active = '1'
                WHERE user_key = '" . $key . "'";

        $result = mysql_query(sql) or die(mysql_error());

        if($result)
        {
            $_SESSION['PROCESS'] = $lang['Account_activated'];
            header("Location: ../index.php");
        }
        else
        {
            $_SESSION['ERROR'] = $lang['Key_error'];
            header("Location: ../index.php");
        }
    }
    else
    {
        $_SESSION['ERROR'] = $lang['Invalid_key'];
        header("Location: ../index.php");
    }
}

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

Помогите мне, ребята.

Спасибо :)

Это было полезно?

Решение

  1. Изменять $_GET['key'] == true к $_GET['key'] == "true"
  2. Вы делаете до этого if, успешный mysql_connect(...) или mysql_pconnect(...) ?
  3. Изменять mysql_affected_rows($result); к mysql_num_rows($result);. Отказ Затронул вы можете использовать для DELETE или UPDATE SQL утверждения.
  4. До того, как вы вторым, если был открыт, добавь перед вами вторым mysql_result(...), mysql_free_result($result); Бесплатная память, выделенная предыдущему результату.
  5. if($result) изменить if(mysql_affected_rows($result));. Отказ Вы можете сделать это здесь.
  6. После header(...); Функциональный вызов добавить return 0; или exit(0); Зависит от вашей полной логики кода.
  7. Ты используешь $key переменная внутри SQL утверждения, чтобы получить ваш код более безопасным на SQL инъекционные атаки получить сдачу $key = $_GET['p']; к $key = mysql_real_escape_string($_GET['p']);
  8. Я думаю, что ваше местоположение в header() Функции не удаются. В header() URL-адрес должен быть заполнен: http://www.example.com/someways/index.php.
  9. И проверьте ваш $_GET['p'] Переменная существует !! Если это не существует, а если $_GET['key'] Существует, вы найдете все активированные пользователи. Тогда я думаю, что настройки user_key '- это несесштаб, если у вас есть маркер user_axtived.

Другие советы

Вы не должны использовать:

if(mysql_affected_rows($result) > 0)

Вы должны использовать mysql_num_rows ()

Ваша проблема:

$result = mysql_query($sql) or die(mysql_error());

«Или» делает ваше заявление boolean так доллар получает True Вместо того, чтобы значение, возвращенное mysql_query ()

echo 'Hello' or die('bye'); // outputs nothing, because result is True not 'Hello'

3 or die() == True; // true
3 or die() != 3; // true

ИЛИ такой же как || и это Оператор логического утверждения.

Это будет работать:

$result = mysql_query($sql);
if(!$result) die(mysql_error());    

Та же ошибка была сделана несколько часов назад: связь


Случаи, где или можно использовать:

defined('FOO') or
    define('FOO', 'BAR');

mysql_connect(...) or die(...);

mysql_select_db( .... ) or die(...);

mysql_query('UPDATE ...') or die(...);

if(FOO or BAR) { ... }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top