Не могу вставить значения через php в mysql - PullRequest
1 голос
/ 06 апреля 2020

Я новичок в PHP / SQL и попробовал учебник. Я создал базу данных с пользователем, который имеет права на чтение и запись. Также таблица с именем «сотрудники» со столбцами: имя пользователя, пароль, адрес электронной почты, токен

Это мой код:

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Account erstellen</title>
  </head>
  <body>
    <?php
    if(isset($_POST["submit"])){
      require("mysql.php");
      $stmt = $mysql->prepare("SELECT * FROM employees WHERE USERNAME = :user"); //Username überprüfen
      $stmt->bindParam(":user", $_POST["username"]);
      $stmt->execute();
      $count = $stmt->rowCount();
      if($count == 0){
        //Username ist frei
        $stmt = $mysql->prepare("SELECT * FROM employees WHERE EMAIL = :email"); //Username überprüfen
        $stmt->bindParam(":email", $_POST["email"]);
        $stmt->execute();
        $count = $stmt->rowCount();
        if($count == 0){
          if($_POST["pw"] == $_POST["pw2"]){
            //User anlegen
            $stmt = $mysql->prepare("INSERT INTO employees (USERNAME, PASSWORD, EMAIL, TOKEN) VALUES (:user, :pw, :email, null)");
            $stmt->bindParam(":user", $_POST["username"]);
            $hash = password_hash($_POST["pw"], PASSWORD_BCRYPT);
            $stmt->bindParam(":pw", $hash);
            $stmt->bindParam(":email", $_POST["email"]);
            $stmt->execute();
            echo "Account created successfully";
          } else {
            echo "Passwords doesn't match";
          }
        } else {
          echo "E-Mail is already used";
        }
      } else {
        echo "Username not available";
      }
    }
     ?>
    <h1>Account erstellen</h1>
    <form action="register.php" method="post">
      <input type="text" name="username" placeholder="Username" required><br>
      <input type="text" name="email" placeholder="Email" required><br>
      <input type="password" name="pw" placeholder="Passwort" required><br>
      <input type="password" name="pw2" placeholder="Passwort wiederholen" required><br>
      <button type="submit" name="submit">Erstellen</button>
    </form>
    <br>
    <a href="index.php">Do you have already a account?</a>
  </body>
</html>

После ввода имени пользователя, почты и 2x пароля в мою форму и нажмите при "создании" я получаю сообщение "Аккаунт успешно создан", но значения отсутствуют в моей базе данных.

Я попытался отладить его с помощью F12 (Firefox), параметры были переданы .......

Ответы [ 3 ]

1 голос
/ 06 апреля 2020

https://www.php.net/manual/en/pdostatement.rowcount

RowCount не возвращает счетчик для выбранных запросов при некоторых условиях. Вы можете получить результаты запроса с помощью if ($stmt->fetchColumn() !== false).

. Также нет обработки ошибок для $ stmt-> execute (если только у вас не включено исключение: $mysql->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);), поэтому он будет представить «Учетная запись создана успешно», даже если это заявление не удалось. Попробуйте if ($stmt->execute()) { good } else { bad } Это также хорошее место для ->rowCount()

0 голосов
/ 07 апреля 2020

Спасибо за вашу помощь!

Моя ошибка была глупой .. Я не принял "нулевые" значения для "Token", поэтому вставка каждый раз заканчивалась неудачей. Спасибо за подсказки, я сделаю обработку ошибок: P

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

Если значения отсутствуют в базе данных, это означает, что произошла ошибка соединения с базой данных. И, как я вижу, вы не подключили форму к базе данных.

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