MYSQLI Объектно-ориентированный, что не так с моим скриптом?

Я пытаюсь выполнить запрос и посмотреть, хорошо ли он идет, но сейчас он не вводит IF или ELSE.
У меня было это в процедурном MySQL, и все работало безупречно, теперь я пытаюсь изменить его на объектно-ориентированный, и он не войдет внутрь, если / иначе.

        if(isset($_POST['submit']))
{
$email = $_POST["email"];
$password = md5($_POST["password"]);

$query = "SELECT * FROM Users WHERE Email=? AND Password=?";
$stmt = $conn->prepare($query);
$stmt->bind_param('ss', $email,$password);
$stmt->execute();
$result = $stmt->get_result();

if ($result->num_rows == 1)
{
?>
<script type="text/javascript">
alert("INSIDE");
</script>
<?php
$row = $result->fetch_assoc();
if(isset($_POST['remember']))
{
$_SESSION["remember"] = "1";
}
$_SESSION["username"] = $row['Username'];
$_SESSION['check'] = "1";
$_SESSION['ID'] = $id;
$_SESSION['permission'] = $row['Admin'];
header("Location: dashboard.php");
exit;
}
else
{
?>
<script type="text/javascript">
alert("Credentials Are Wrong!");
</script>
<?php
exit;
}
$stmt->close();
}

Спасибо вам всем.

-3

Решение

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

$stmt->bind_result($col1, $col2 ...);

а также

$result = $stmt->fetch();

для того, чтобы получить доступ к данным из запроса, а не

$conn->query($stmt);

(пример предоставлен на https://secure.php.net/manual/en/mysqli-stmt.fetch.php). Обратите внимание, что для этого вам нужно будет указать имена столбцов, которые вы хотите извлечь из базы данных, а не использовать * в вашем запросе SQL, и для каждого столбца, из которого извлекаются данные в запросе, у вас должна быть переменная для in Параметры fetch (), поэтому, например, должно работать что-то следующее (обратите внимание, что они могут не совпадать с именами столбцов вашей базы данных):

$email = $_POST["email"];
$password = md5($_POST["password"]);

$stmt = $conn->prepare("SELECT ID, Name FROM Users WHERE Email=? AND Password=?");
$stmt->bind_param('ss', $email, $password);
$stmt->execute();
$stmt->bind_result($id, $name);
$stmt->fetch();
$stmt->close();
echo $id . ': ' . $name;
0

Другие решения

Обновленный ответ

Вы очень близки использование $result = $stmt->get_result(); вместо $result = $stmt->query; чтобы проверить, вернул ли запрос результат или нет.

$email = $_POST["email"];
$password = md5($_POST["password"]);

$query = "SELECT * FROM Users WHERE Email = ? AND Password = ?";
$stmt = $conn->prepare($query);
$stmt->bind_param('ss', $email, $password);
$stmt->execute();
$result = $stmt->get_result();

if($result->num_rows !== 0){

if(isset($_POST['remember'])){
$_SESSION["remember"] = "1";
}

$_SESSION['check'] = "1";
$_SESSION['ID'] = $row['ID'];
header("Location: dashboard.php");
exit();

}else{

echo
'<script type="text/javascript">
alert("Credentials Are Wrong!");
</script>';

exit();

}

$stmt->close();

Поскольку некоторые уже заявили в своих комментариях, не используйте MD5 для хэшей паролей. PHP имеет свои собственные встроенные функции для обработки паролей. Пожалуйста, исследуйте Password_has () а также Password_verify (). Потратьте время, чтобы исследовать и реализовать их сейчас, а не позже. Это сэкономит вам время.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector