Процесс регистрации в php успешно завершается, когда новый пользователь не отображается в базе данных phpmyadmin - PullRequest
0 голосов
/ 19 июня 2020

Я следил за самым популярным php учебником на YouTube о том, как создать регистрацию и войти в систему, используя PHP:

https://www.youtube.com/watch?v=LC9GaXkdxF8&t=2216s

Сначала у меня возникли некоторые проблемы, но они были просто синтаксическими ошибками, и я смог их исправить. Когда я ввел имя пользователя, адрес электронной почты, пароль и повторно набрал пароль и нажал кнопку «Зарегистрироваться», он дал сообщение об успешном выполнении. Однако проблема заключалась в том, что когда я не вернулся к базе данных phpmyadmin, новая строка для пользователя не отображалась в таблице. Теперь я думаю, что это как-то связано с phpmyadmin или sql, а не с самим кодом. Итак, особенности:

Программа хостинга: Службы XAMPP включены: ProFTPD, Apache, MySQL ОС: MacOS

Вот весь код, который я создал с помощью этого руководство:


signup.in c. php:

<?php
  if (isset($_POST['signup-submit'])) {

    require 'dbh.inc.php';

    $username = $_POST['uid'];
    $email = $_POST['mail'];
    $password = $_POST['pwd'];
    $passwordRepeat = $_POST['pwd-repeat'];

    if (empty($username) || empty($email) || empty($password) || empty($passwordRepeat)) {
      header("Location: ../signup.php?error=emptyfields&uid=" . $username . "&mail=" . $email);
      exit();
    }
    else if (!filter_var($email, FILTER_VALIDATE_EMAIL) && !preg_match("/^[a-zA-Z0-9]*$/", $username)) {
      header("Location: ../signup.php?error=invalidmailuid");
      exit();
    }
    else if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
      header("Location: ../signup.php?error=invalidmail&uid=" . $username);
      exit();
    }
    else if (!preg_match("/^[a-zA-Z0-9]*$/", $username)) {
      header("Location: ../signup.php?error=invaliduid&uid=" . $email);
      exit();
    }
    else if ($password !== $passwordRepeat) {
      header("Location: ../signup.php?error=passwordcheck&uid=" . $username . "&mail=" . $email);
      exit();
    }
    else {

      $sql = "SELECT uidUsers FROM users WHERE  uidUsers=?";
      $stmt = mysqli_stmt_init($conn);
      if(!mysqli_stmt_prepare($stmt, $sql)) {
        header("Location: ../signup.php?error=sqlerror1");
        exit();
      }
      else {
        mysqli_stmt_bind_param($stmt, "s", $username);
        mysqli_stmt_execute($stmt);
        mysqli_stmt_store_result($stmt);
        $resultCheck = mysqli_stmt_num_rows();
        if ($resultCheck > 0) {
          header("Location: ../signup.php?error=usertaken&mail=" . $email);
          exit();
        }
        else {
          $sql = "INSERT INTO users (uidUsers, emailUsers, pwdUsers) VALUES (?, ?, ?)";
          $stmt = mysqli_stmt_init($conn);
          if (!mysqli_stmt_prepare($stmt, $sql)) {
            header("Location: ../signup.php?error=sqlerror2");
            exit();
          }
          else {
            $hashedPwd = password_hash($password, PASSSWORD_DEFAULT);

            mysqli_stmt_bind_param($stmt, "sss", $username, $email, $hashedPwd);
            mysqli_stmt_execute($stmt);
            header("Location: ../signup.php?signup=success");
            exit();
          }

        }

    }

  }

  mysqli_stmt_close($stmt);
  mysqli_close($conn);

}
else {
  header("Location: ../signup.php");
  exit();
}
?>

dbh.in c. php:

<?php
  $servername = 'localhost';
  $dBUsername = "root";
  $dBPassword = "";
  $dBName = "loginsystem";

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

  if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
  }
?>

регистрация. php:

<?php
  $title = 'Sign Up';


  $content = '

  <main>
    <div id="log-in-box">
      <h2>Sign Up and Create an Account</h2>
      <form class="form-signup" action="includes/signup.inc.php" method="post">
        <input type="text" name="uid" placeholder="Username">
        <input type="text" name="mail" placeholder="E-Mail">
        <input type="password" name="pwd" placeholder="Password">
        <input type="password" name="pwd-repeat" placeholder="Repeat Password">
        <button type="submit" name="signup-submit">Sign Up</button>
      </form>
    </div>
  </main>



  ';

include("template.php");

?>

Код MYSQL, который он ввел в phpmyadmin при настройке базы данных (а также вместо того, чтобы называться loginsystemtut для базы данных имя, которое я назвал loginsystem):

CREATE TABLE users (
idUsers int(11) AUTO_INCREMENT PRIMARY KEY NOT NULL,
uidUsers TINYTEXT NOT NULL,
emailUsers TINYTEXT NOT NULL,
pwdUsers LONGTEXT NOT NULL
);

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

SELECT * FROM `users`

1 Ответ

1 голос
/ 20 июня 2020

Проблема фактически решена. Я задал тот же вопрос о субреддите r / php, и кто-то дал мне ответ, что код парня в видео ужасен, и сказал мне, что делать, чтобы это исправить. Я изменил:

else {
    mysqli_stmt_bind_param($stmt, "s", $username);
    mysqli_stmt_execute($stmt);
    mysqli_stmt_store_result($stmt);
    $resultCheck = mysqli_stmt_num_rows();
    if ($resultCheck > 0) {
      header("Location: ../signup.php?error=usertaken&mail=" . $email);
      exit();
    }
    else {
      $sql = "INSERT INTO users (uidUsers, emailUsers, pwdUsers) VALUES (?, ?, ?)";
      $stmt = mysqli_stmt_init($conn);
      if (!mysqli_stmt_prepare($stmt, $sql)) {
        header("Location: ../signup.php?error=sqlerror2");
        exit();
      }
      else {
        $hashedPwd = password_hash($password, PASSSWORD_DEFAULT);

        mysqli_stmt_bind_param($stmt, "sss", $username, $email, $hashedPwd);
        mysqli_stmt_execute($stmt);
        header("Location: ../signup.php?signup=success");
        exit();
      }

    }

на просто:

else {
      $sql = "INSERT INTO users (uidUsers, emailUsers, pwdUsers) VALUES (?, ?, ?)";
      $stmt = $conn->prepare($sql);
      $hashedPwd = password_hash($password, PASSWORD_DEFAULT);
      $stmt->bind_param("sss", $username, $email, $hashedPwd);
      $stmt->execute();
  }

, потому что вам не нужно было делать это с 15 строками кода, когда вам нужно было только 5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...