База данных SQL не хранит пользовательские входы

спросил: 28 марта 2018 в 03:16 в: php

Я создал регистрационную форму, которая принимает имя пользователя, имя пользователя, адрес электронной почты и пароль. Я также создал базу данных sql с помощью панели управления XAMPP, назвал регистрацию базы данных и создал таблицу с именем "пользователи" для хранения всех входов.

Когда пользователь вводит эти данные, они должны быть представленная на странице входа, а в фоновом режиме данные должны храниться в базе данных .. но когда я открыл phpmyadmin для проверки таблицы, нет данных, сохраненных.

Ниже приведен код, который я использовал для отправил входные данные от пользователя в базу данных, которая является моим файлом "server.php":

<?php
session_start();// initializing variables
$name = "";
$email = "";
$username = "";
$errors = array(); // connect to the database
$db = mysqli_connect('localhost', 'root', 'root', 'registration');// REGISTER USER
if (isset($_POST['reg_user'])) {
  // receive all input values from the form
  $name = mysqli_real_escape_string($db, $_POST['name']); 
  $email = mysqli_real_escape_string($db, $_POST['email']);
  $username = mysqli_real_escape_string($db, $_POST['username']);
  $password_1 = mysqli_real_escape_string($db, $_POST['password_1']);
  $password_2 = mysqli_real_escape_string($db, $_POST['password_2']);  // form validation: ensure that the form is correctly filled ...
  // by adding (array_push()) corresponding error unto $errors array
  if (empty($name)) { array_push($errors, "Name is required");  
  }
  if (empty($email)) { array_push($errors, "Email is required"); 
  }
  if (empty($username)) { array_push($errors, "Username is required"); }
  if (empty($password_1)) { array_push($errors, "Password is required"); }
  if ($password_1 != $password_2) {
    array_push($errors, "The two passwords do not match");
  }  // first check the database to make sure 
  // a user does not already exist with the same username and/or email
  $user_check_query = "SELECT * FROM users WHERE username='$username' OR email='$email' LIMIT 1";
  $result = mysqli_query($db, $user_check_query);
  $user = mysqli_fetch_assoc($result);  if ($user) { // if user exists
    if ($user['username'] === $username) {
      array_push($errors, "Username already exists");
    }    if ($user['email'] === $email) {
      array_push($errors, "email already exists");
    }
  }  // Finally, register user if there are no errors in the form
  if (count($errors) == 0) {
    $password = md5($password_1);//encrypt the password before saving in the database    $query = "INSERT INTO users (name, email, username, password) 
              VALUES('$name', '$email', '$username', '$password')";
    mysqli_query($db, $query);
    $_SESSION['username'] = $username;
    $_SESSION['success'] = "You are now logged in";
    header('location: login.php');
  }
}// ... 
// ... // LOGIN USER
if (isset($_POST['login_user'])) {
  $username = mysqli_real_escape_string($db, $_POST['username']);
  $password = mysqli_real_escape_string($db, $_POST['password']);  if (empty($username)) {
    array_push($errors, "Username is required");
  }
  if (empty($password)) {
    array_push($errors, "Password is required");
  }  if (count($errors) == 0) {
    $password = md5($password);
    $query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
    $results = mysqli_query($db, $query);
    if (mysqli_num_rows($results) == 1) {
      $_SESSION['username'] = $username;
      $_SESSION['success'] = "You are now logged in";
      header('location: https://georginahughes48.wixsite.com/makeupyourmind');
    }else {
        array_push($errors, "Wrong username/password combination");
    }
  }
}?>

Пожалуйста, дайте мне знать, нужен ли какой-либо дополнительный код, чтобы помочь мне с этой проблемой. . Спасибо заранее!

3 ответа

Есть решение
prasanna puttaswamy ответил: 28 марта 2018 в 03:54

После кода подключения добавьте эту строку

if($db->connect_errno)
{
    echo "Error: ( " .$db->errorno. " )". $db->error;
    die;
}

Просто замените этот код

 if (count($errors) == 0) {
    $password = md5($password_1);//encrypt the password before saving in the database    $query = "INSERT INTO users (name, email, username, password) 
              VALUES('$name', '$email', '$username', '$password')";
    if( mysqli_query($db, $query))
    {
       $_SESSION['username'] = $username;
       $_SESSION['success'] = "You are now logged in";
       header('location: login.php');
   }
   else
   {
      echo mysqli_error($db);
   }
  }
}

Проверьте, нет ли ошибок.

user9435526 ответил: 28 марта 2018 в 03:40
когда я заменяю свой код на ваш, он просто обновляет страницу регистрации и тоже не указывает мне страницу входа в систему .. означает ли это, что моя база данных не подключена? и так, как мне это исправить, пожалуйста ?!
Magnus Eriksson ответил: 28 марта 2018 в 03:42
Как говорит функция mysqli_connect_error(), она предназначена для ошибок connection , а не для ошибок запросов. Вы должны использовать mysqli_error($db), чтобы получить ошибку запроса: php.net/manual/en/mysqli.error.php
prasanna puttaswamy ответил: 28 марта 2018 в 03:43
это означает, что выполнение запроса не выполнено.
user9435526 ответил: 28 марта 2018 в 03:45
@prasannaputtaswamy хорошо, как мне исправить эту ошибку при выполнении запроса, пожалуйста?
user9435526 ответил: 28 марта 2018 в 04:13
@prasannaputtaswamy это сработало! Спасибо, так, так, так, так, очень, очень! Очень ценю это!
hnkubavat ответил: 28 марта 2018 в 03:51

Попробуйте свой код в блоке try catch. Замените свою регистрационную часть следующим:

    // Finally, register user if there are no errors in the form
    try {
      if (count($errors) == 0) {
        $password = md5($password_1);//encrypt the password before saving in the database        $query = "INSERT INTO users (name, email, username, password) 
                  VALUES('$name', '$email', '$username', '$password')";
        mysqli_query($db, $query);
        $_SESSION['username'] = $username;
        $_SESSION['success'] = "You are now logged in";
        header('location: login.php');
      }
   } catch (Exception $e) {
        echo 'Caught exception: ',  $e->getMessage(), "\n";
   }

Это даст вам ошибку, если что-то сломается, иначе ваш код выглядит нормально.

user9435526 ответил: 28 марта 2018 в 04:01
спасибо за ваше предложение .. хотя он все еще делает то же самое, предоставляет мне страницу входа в систему после нажатия кнопки "Зарегистрироваться", и когда я проверяю таблицу пользователей в phpmyadmin, данные отсутствуют :(
hnkubavat ответил: 28 марта 2018 в 04:17
@ user9435526 add die (); после сообщения об исключении для отслеживания, если какое-либо исключение выбрасывает или нет
user9435526 ответил: 28 марта 2018 в 04:19
Проблема уже решена, но спасибо за ваше время и усилия! Ценить это!
Md. Mahmud Hasan ответил: 28 марта 2018 в 04:00

Шаг 1: измените код следующим образом:

        <?php
        session_start();        // initializing variables
        $name = "";
        $email = "";
        $username = "";
        $errors = array();         // connect to the database
        $db = mysqli_connect('localhost', 'root', '', 'registration');        if (!$db) {
            die("Connection failed: " . mysqli_connect_error());
        }        // REGISTER USER
        if (isset($_POST['reg_user'])) {
          // receive all input values from the form
          $name = mysqli_real_escape_string($db, $_POST['name']); 
          $email = mysqli_real_escape_string($db, $_POST['email']);
          $username = mysqli_real_escape_string($db, $_POST['username']);
          $password_1 = mysqli_real_escape_string($db, $_POST['password_1']);
          $password_2 = mysqli_real_escape_string($db, $_POST['password_2']);          // form validation: ensure that the form is correctly filled ...
          // by adding (array_push()) corresponding error unto $errors array
          if (empty($name)) { array_push($errors, "Name is required");  
          }
          if (empty($email)) { array_push($errors, "Email is required"); 
          }
          if (empty($username)) { array_push($errors, "Username is required"); }
          if (empty($password_1)) { array_push($errors, "Password is required"); }
          if ($password_1 != $password_2) {
            array_push($errors, "The two passwords do not match");
          }          // first check the database to make sure 
          // a user does not already exist with the same username and/or email
          $user_check_query = "SELECT * FROM users WHERE username='$username' OR email='$email' LIMIT 1";
          $result = mysqli_query($db, $user_check_query);
          $user = mysqli_fetch_assoc($result);          if ($user) { // if user exists
            if ($user['username'] === $username) {
              array_push($errors, "Username already exists");
            }            if ($user['email'] === $email) {
              array_push($errors, "email already exists");
            }
          }          // Finally, register user if there are no errors in the form
          if (count($errors) == 0) {
            $password = md5($password_1);//encrypt the password before saving in the database            $query = "INSERT INTO users (name, email, username, password) 
                      VALUES('$name', '$email', '$username', '$password')";
                if( mysqli_query($db, $query))
                {
                   $_SESSION['username'] = $username;
                   $_SESSION['success'] = "You are now logged in";
                   header('location: login.php');
               }
               else
               {
                  echo mysqli_error($db);
               }
          }
        }        // ... 
        // ...         // LOGIN USER
        if (isset($_POST['login_user'])) {
          $username = mysqli_real_escape_string($db, $_POST['username']);
          $password = mysqli_real_escape_string($db, $_POST['password']);          if (empty($username)) {
            array_push($errors, "Username is required");
          }
          if (empty($password)) {
            array_push($errors, "Password is required");
          }          if (count($errors) == 0) {
            $password = md5($password);
            $query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
            $results = mysqli_query($db, $query);
            if (mysqli_num_rows($results) == 1) {
              $_SESSION['username'] = $username;
              $_SESSION['success'] = "You are now logged in";
              header('location: https://georginahughes48.wixsite.com/makeupyourmind');
            }else {
                array_push($errors, "Wrong username/password combination");
            }
          }
        }        ?>

Предполагая, что нет пароля для mysql.

Шаг 2: перепроверьте соединение mysql и имена таблиц регистр и орфография

Шаг 3. Проверьте пустые поля, типы полей и длину в таблице. Если у вас есть первичный ключ, проверьте, есть ли автоматическое увеличение или нет. надеюсь, это поможет.

user9435526 ответил: 28 марта 2018 в 04:07
Существует пароль для mysql, и если я изменяю свой код, чтобы повторить ваш, я просто получаю сообщение об ошибке в связи с отсутствующим паролем.