Активация учетной записи PHP.
-
26-09-2019 - |
Вопрос
Я создал этот сценарий активации регистрации учетной записи, я снова проверил его снова и снова найти ошибки, я не вижу определенную ошибку ...
Домен будет таким:
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");
}
}
Это даже не работает вообще, я посмотрел в базу данных с пользователем с этим ключом, он соответствует, но он продолжает приходить в качестве ошибки, которая крайне раздражает меня. База данных справа, таблица и столбец правы, ничего плохого в базе данных, это сценарий, который не работает.
Помогите мне, ребята.
Спасибо :)
Решение
- Изменять
$_GET['key'] == true
к$_GET['key'] == "true"
- Вы делаете до этого
if
, успешныйmysql_connect(...)
илиmysql_pconnect(...)
? - Изменять
mysql_affected_rows($result);
кmysql_num_rows($result);
. Отказ Затронул вы можете использовать дляDELETE
илиUPDATE
SQL утверждения. - До того, как вы вторым, если был открыт, добавь перед вами вторым
mysql_result(...)
,mysql_free_result($result);
Бесплатная память, выделенная предыдущему результату. if($result)
изменитьif(mysql_affected_rows($result));
. Отказ Вы можете сделать это здесь.- После
header(...);
Функциональный вызов добавитьreturn 0;
илиexit(0);
Зависит от вашей полной логики кода. - Ты используешь
$key
переменная внутри SQL утверждения, чтобы получить ваш код более безопасным на SQL инъекционные атаки получить сдачу$key = $_GET['p'];
к$key = mysql_real_escape_string($_GET['p']);
- Я думаю, что ваше местоположение в
header()
Функции не удаются. Вheader()
URL-адрес должен быть заполнен: http://www.example.com/someways/index.php. - И проверьте ваш
$_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) { ... }