SQL Система входа - PullRequest
       5

SQL Система входа

0 голосов
/ 23 февраля 2020

Я закодировал эту систему входа в систему, но всякий раз, когда я пытаюсь войти в систему, используя только имя пользователя и пароль, включенные в таблицу базы данных, меня перенаправляют на индекс. php? Error = sqlerror. Я проверил код на наличие орфографических ошибок, но их нет. Может ли это быть проблемой с подключением к базе данных? Я использую MAMP. Я проверил базу данных, и она отображает сообщение об успехе, поэтому, похоже, оно работает. Вы знаете, что я делаю не так? Спасибо!

ПОДКЛЮЧЕНИЕ БАЗЫ ДАННЫХ (имя файла: dbh.in c. php)


$servername = "127.0.0.1";
$dBUsername = "root";
$dBPassword = "";
$dBName = "gallerydatabase";

$conn = mysqli_connect($servername, $dBUsername, $dBPassword, $dBName);

if (!$conn) {
    echo "Error: Unable to connect to MySQL.";
}
echo "Success";

mysqli_close($conn);
?>

ВХОД PHP КОД (имя файла: login.in c. php)


if (isset($_POST['login-submit'])) {

  require 'dbh.inc.php';

  $mailuid = $_POST['mailuid'];
  $password = $_POST['pwd'];

  if (empty($mailuid) || empty($password)) {
    header ("Location: ../index.php?error=emptyfields");
    exit();
  }
  else {
    $sql = "SELECT * FROM users WHERE uidUsers=?;";
    $stmt = mysqli_stmt_init($conn);
    if (!mysqli_stmt_prepare($stmt, $sql)) {
      header ("Location: ../index.php?error=sqlerror");
      exit();
    }
    else {

      mysqli_stmt_bind_param($stmt, "s", $mailuid);
      mysqli_stmt_execute($stmt);
      $result = mysqli_stmt_get_result($stmt);
      if ($row = mysqli_fetch_assoc($result)) {
        $pwdCheck = password_verify($password, $row['pwdUsers']);
        if ($pwdCheck == false)  {
          header ("Location: ../index.php?error=wrongpwd");
          exit();
        }
        else if ($pwdCheck == true) {
          session_start();
          $_SESSION['userId'] = $row['idUsers'];
          $_SESSION['userUid'] = $row['uidUsers'];

          header ("Location: ../index.php?login=sucess");
          exit();

        }
        else {
          header ("Location: ../index.php?error=wrongpwd");
          exit();
        }
      }
      else {
        header ("Location: ../index.php?error=nouser");
        exit();
      }

    }
  }
}
else {
  header ("Location: ../index.php");
  exit();
}

1 Ответ

0 голосов
/ 23 февраля 2020

Я думаю, что проблема в вашем файле dbh.in c. php, вы создаете соединение $ conn = mysqli_connect ($ servername, $ dBUsername, $ dBPassword, $ dBName); и позже вы также закрываете его mysqli_close ($ conn); .

Так что к тому времени, когда вы используете $ conn в login.in c. php, ваше соединение закрыто. Вам нужно написать функцию в dbh.in c. php, которая возвращает действующее соединение (не вызывать close), используйте его для выполнения запросов / вставки в БД и после этого закройте соединение.

Повторно используемый класс базы данных может быть записан (функциональный стиль) следующим образом

<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

trait DBInfo {
  protected $servername = "127.0.0.1";
    protected $username = "root";
    protected $password = "";
    protected $dbname = "gallerydatabase";
}

class Database{
  use DBInfo;
  function __construct() {}

  function connection(){
      $conn = new mysqli($this->servername, $this->username, 
$this->password, $this->dbname);
      if ($conn->connect_error) {
          die("Connection failed: " . $conn->connect_error);
      } else{
        $conn->autocommit(FALSE);
        return $conn;
      }
  }

  function select($sql, $fn2bind_takestmt, $fn2process_row_return_result){
    try{
      $result = array();
      $conn = $this->connection();
      $stmt = $conn->prepare($sql);
      $fn2bind_takestmt($stmt);
      $stmt->execute();
      $rowset = $stmt->get_result();
      while ($row = $rowset->fetch_assoc()) {
        $obj = $fn2process_row_return_result($row);
        array_push($result, $obj);
      }
    }catch(Exception $e) {
        $result = NULL;
        throw $e;
    }finally{
      if(isset($rowset))$rowset->close();
      if(isset($stmt))$stmt->close();
      if(isset($conn))$conn->close();
    }
    return $result;
  }

  // You can introduce functions for insert, update and delete as well

}

?>

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

<?php
function allow_login($user, $pwd){
    $sql = "SELECT count(*) rec_count FROM users WHERE uidUsers=? and pwdUsers=?"
    $db = new Database();
    $result = $db->select($sql,
                function($stmt) use($user, $pwd){
                  $stmt->bind_param("ss", $user, $pwd); 
                },
                function($row){
                  if($row['rec_count'] > 0){// or whatever
                    return TRUE;
                  }
                    return FALSE;
                }
             );
    if(isset($result)){
      return $result[0];
    }
    return $result;
  }  
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...