В настоящее время я работаю над проектом, в котором мне нужно заставить пользователя зарегистрироваться, а затем на адрес электронной почты администратора веб-сайта отправляется электронное письмо со ссылкой для утверждения (содержащей php-страницу ниже, электронную почту пользователя и sha512). Когда нажимается ссылка утверждения, она предназначена для обновления таблицы с соответствующим адресом электронной почты и изменением isApproved на 1, но ничего не делает, кроме печати эха.
Я попытался изменить команды SQL, добавив ` вокруг имен, поискав их на w3schools, stackoverflow и других форумах, но ничего не нашел.
<?php
$hash = $_GET['h'];
$email = $_GET['e'];
if ($hash == hash('sha512', 'ACCEPT')){
$host = "redacted";
$dbUsername = "redacted";
$dbPassword = "redacted";
$dbname = "redacted";
//create connection
$conn = mysqli_connect($host, $dbUsername, $dbPassword, $dbname);
if (mysqli_connect_error())
{
die('Connect Error('. mysqli_connect_errno().')'.mysqli_connect_error());
}
else
{
$sql = "UPDATE `User` SET `isApproved`='1' WHERE `User`.`email`=$email";
echo("approved");
}
?>
Все, что я вижу при открытии веб-сайта, «одобрено», чего я и ожидал, но записи в базе данных остаются неизменными.
Я думаю, вы не выполнили команду выполнения.
$conn = mysqli_connect($host, $dbUsername, $dbPassword, $dbname);
....
$sql = "UPDATE `User` SET `isApproved`='1' WHERE `User`.`email`=$email";
$stmt = mysqli_prepare($conn, $sql);
mysqli_stmt_execute($stmt);
Все еще говорит, что ожидает stmt как параметр 1
Это потому, что вы не выполняете оператор запроса.
$sql = "UPDATE `User` SET `isApproved`='1' WHERE `User`.`email`=$email";
— это запрос, который вы написали, но не выполнили. Вам нужно выполнить его, используя метод mysqli_query(), передавая соединение и запрос в параметрах mysqli_query($conn, $sql);
. Вы можете прочитать больше об этом здесь.
<?php
$hash = $_GET['h'];
$email = $_GET['e'];
if ($hash == hash('sha512', 'ACCEPT')){
$host = "redacted";
$dbUsername = "redacted";
$dbPassword = "redacted";
$dbname = "redacted";
//create connection
$conn = mysqli_connect($host, $dbUsername, $dbPassword, $dbname);
if (mysqli_connect_error())
{
die('Connect Error('. mysqli_connect_errno().')'.mysqli_connect_error());
}
else
{
$sql = "UPDATE `User` SET `isApproved`='1' WHERE `User`.`email`=$email";
mysqli_query($conn, $sql); // <------- Run SQL Query
echo("approved");
}
?>
Можете ли вы поделиться структурой вашей таблицы?
Код работает нормально. Проблема скорее всего в запросе. Попробуйте выполнить следующий запрос. $sql = "UPDATE User SET isApproved=1 WHERE User.email=$email;";
еще ничего :/
Интересно, почему он не выполняется. Попробуйте $sql = "UPDATE User SET isApproved=1 WHERE email=$email;";
К сожалению, по-прежнему ничего, все выполняется, кроме фактического изменения дабатазы.
Это работает, просто вам нужно выбрать пользователя, используя первичный ключ, а не только данные таблицы.
Прохладный! Рад, что это сработало. Отклонение редактирования, поскольку в коде ничего не меняется, кроме запроса, поскольку ранее не было строки с данным условием. Удачного кодирования :)
Предупреждение: mysqli_execute() ожидает, что параметр 1 будет mysqli_stmt