Я не могу найти способ проверить, было ли взято письмо в моей базе данных mysql (php7) - PullRequest
1 голос
/ 06 апреля 2019

Я создал сайт php7 и mySQL, который позволяет пользователям входить в систему и регистрироваться на сайте.

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

Я сделал свой веб-сайт таким образом, чтобы при нажатии кнопки регистрации браузер направлял к файлу с именем signup.inc.php. Я не знаю, что изменить или как это исправить, я искал решение, и я довольно застрял в этой проблеме, так что помощь была бы хороша:)

Часть, на которой я сосредотачиваюсь:

if ($resultCheck > 0) {
          header("Location: ../signup.php?error=emailtaken");
          exit();

это также включает проверку работающего пользователя:

  else {
    $sql = "SELECT uidUsers AND emailUsers FROM users WHERE uidUsers=? AND emailUsers=?";
    $stmt = mysqli_stmt_init($conn);
    if (!mysqli_stmt_prepare($stmt, $sql)) {
      header("Location: ../signup.php?error=sqlerror");
      exit();
    }
    else{
      mysqli_stmt_bind_param($stmt, "ss", $username, $email);
      mysqli_stmt_execute($stmt);
      mysqli_stmt_store_result($stmt);
      $resultCheck = mysqli_stmt_num_rows($stmt);
      if ($resultCheck > 0) {
        header("Location: ../signup.php?error=usertaken");
        exit();
      }
      else{
        mysqli_stmt_bind_param($stmt, "s", $email);
        mysqli_stmt_execute($stmt);
        mysqli_stmt_store_result($stmt);
        $resultCheck = mysqli_stmt_num_rows($stmt);
        if ($resultCheck > 0) {
          header("Location: ../signup.php?error=emailtaken");
          exit();
        }

Я попробовал несколько вещей, чтобы заставить его работать, возможно, поэтому он грязный, но я не могу заставить работать проверку почты в базе данных. На моем веб-сайте написано «Успешная регистрация», но следует сказать, что «электронная почта занята». Любая помощь? Вот полная страница для справки:

<?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&mail=".$email);
    exit();
  }
  else if($password !== $passwordRepeat){
    header("Location: ../signup.php?error=passwordcheck&uid=".$username."&mail=".$email);
    exit();
  }
  else {
    $sql = "SELECT uidUsers AND emailUsers FROM users WHERE uidUsers=? AND emailUsers=?";
    $stmt = mysqli_stmt_init($conn);
    if (!mysqli_stmt_prepare($stmt, $sql)) {
      header("Location: ../signup.php?error=sqlerror");
      exit();
    }
    else{
      mysqli_stmt_bind_param($stmt, "ss", $username, $email);
      mysqli_stmt_execute($stmt);
      mysqli_stmt_store_result($stmt);
      $resultCheck = mysqli_stmt_num_rows($stmt);
      if ($resultCheck > 0) {
        header("Location: ../signup.php?error=usertaken");
        exit();
      }
      else{
        mysqli_stmt_bind_param($stmt, "s", $email);
        mysqli_stmt_execute($stmt);
        mysqli_stmt_store_result($stmt);
        $resultCheck = mysqli_stmt_num_rows($stmt);
        if ($resultCheck > 0) {
          header("Location: ../signup.php?error=emailtaken");
          exit();
        }
        else {
        //other
          $sql = "INSERT INTO users (uidUsers, emailUsers, pwdUsers) VALUES (?, ?, ?) ";
          $stmt = mysqli_stmt_init($conn);
          if (!mysqli_stmt_prepare($stmt, $sql)) {
            header("Location: ../signup.php?error=sqlerror");
            exit();
          }
          else {
            $hashedPwd = password_hash($password, PASSWORD_DEFAULT);

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

Я пытался исправить ошибку, искал решение и пытался сделать то же самое, что и имя пользователя, но idk

Я хотел, чтобы электронные письма не повторялись, но на моем веб-сайте написано «вход в систему успешен», что неправильно.

1 Ответ

0 голосов
/ 06 апреля 2019

Это происходит из-за условия 'И' в предложении SQL где.Проверьте только имя пользователя Столбец, чтобы проверить, существует.В вашей реализации, это проверка комбинации электронной почты и имени пользователя на наличие дубликатов.Если вы хотите проверить любой из столбцов, используйте «ИЛИ» в предложении where.

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