MYSQLI Объектно-ориентированный, что не так с моим скриптом? - PullRequest
0 голосов
/ 10 ноября 2018

Я пытаюсь выполнить запрос и посмотреть, хорошо ли он идет, но сейчас он не вводит 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();
}   

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

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

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

Вы очень близки. Используйте $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 голосов
/ 10 ноября 2018

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

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

и

$result = $stmt->fetch();

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

$conn->query($stmt);

(пример представлен на https://secure.php.net/manual/en/mysqli-stmt.fetch.php). Обратите внимание, что для этого вам нужно будет указать имена столбцов, которые вы хотите извлечь из базы данных, вместо использования * в вашем запросе SQL и для каждого столбца данные извлекаются из запроса, у вас должна быть переменная for в параметрах 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...