Я создал активацию регистрации учетной записи script моей, я проверил ее снова и снова, чтобы найти ошибки, я не вижу конкретной ошибки...
Домен будет выглядеть следующим образом:
http://domain.com/include/register.php?key=true&p=AfRWDCOWF0BO6KSb6UmNMf7d333gaBOB
Что происходит из электронной почты, когда пользователь нажимает на нее, они перенаправляются на этот script:
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");
}
}
Это даже не работает, я смотрел в базе данных с пользователем с этим ключом, он соответствует, но он продолжает появляться как ошибка, которая меня очень раздражает. База данных правильная, таблица и столбец прав, ничего плохого в базе данных, это script, который не работает.
Помогите мне, ребята.
Спасибо:)
$_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 Injection получить change $key = $_GET['p'];
to $key = mysql_real_escape_string($_GET['p']);
header()
не работает. В header()
адрес URL должен быть заполнен следующим образом: http://www.example.com/somewhere/index.php$_GET['p']
! Если этого не существует и существует $_GET['key']
, вы найдете всех активированных пользователей. Тогда я думаю, что установка user_key в '' является обязательной, если у вас есть маркер user_activated.вы не должны использовать:
if(mysql_affected_rows($result) > 0)
Вы должны использовать mysql_num_rows()
Ваша проблема:
$result = mysql_query($sql) or die(mysql_error());
"или" делает ваш оператор boolean
, поэтому $result получает 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
OR совпадает с || и является оператором логического оператора.
Это будет работать:
$result = mysql_query($sql);
if(!$result) die(mysql_error());
Та же ошибка была сделана несколько часов назад: ссылка
Случаи, в которых может использоваться OR:
defined('FOO') or
define('FOO', 'BAR');
mysql_connect(...) or die(...);
mysql_select_db( .... ) or die(...);
mysql_query('UPDATE ...') or die(...);
if(FOO or BAR) { ... }