PHP: невозможно вставить данные в базу данных 000webhostapp - PullRequest
0 голосов
/ 14 марта 2020

У меня есть этот код, пытающийся вставить данные в базу данных 000webhostapp.com, но он всегда возвращает сообщение «Ошибка базы данных: не удалось зарегистрировать». В localhost (мой персональный компьютер) все работает нормально. У меня есть синтаксис, который не применим к 000webhostapp.com? Кроме того, у меня есть другие операторы вставки, которые работают для других таблиц в той же базе данных. Ниже приведен код вставки:

// If user clicks on the sign-up button
if (isset($_POST['signup-btn'])) {
  $firstname = $_POST['firstname'] = ucfirst($_POST['firstname']);
  $lastname = $_POST['lastname'] = ucfirst($_POST['lastname']);;
  $username = $_POST['username'];
  $email = $_POST['email'];
  $twitter = $_POST['twitter'];
  $telegram = $_POST['telegram'];
  $country = $_POST['country'];
  $password = $_POST['password'];
  $passwordConf = $_POST['passwordConf'];

// Validation method for sign-up
  if (empty($firstname)) {
    $errors['username'] = "Firstname required";
  }
  if (empty($lastname)) {
    $errors['username'] = "Lastname required";
  }
  if (empty($username)) {
    $errors['username'] = "Username required";
  }
  if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
      $errors['email'] = "Email address is invalid";
  }
  if (empty($email)) {
    $errors['email'] = "Email required";
  }
  if (empty($twitter)) {
    $errors['twitter'] = "Twitter required";
  }
  if (empty($telegram)) {
    $errors['telegram'] = "Telegram required";
  }
  if (empty($country)) {
    $errors['country'] = "Country required";
  }
  if (empty($password)) {
    $errors['password'] = "Password required";
  }
  if ($password !== $passwordConf) {
    $errors['password'] = "The two password do not match";
  }

  $emailQuery = "SELECT * FROM users WHERE email=? LIMIT 1";
  $stmt = $conn->prepare($emailQuery);
  $stmt->bind_param('s', $email);
  $stmt->execute();
  $result = $stmt->get_result();
  $userCount = $result->num_rows;
  $stmt->close();

  if ($userCount > 0) {
    $errors['email'] = "Email already exists";
  }

  if ($userCount > 0) {
    $errors['username'] = "Username already exists";
  }

  if ($userCount > 0) {
    $errors['twitter'] = "Twitter handle already exists";
  }

  if ($userCount > 0) {
    $errors['telegram'] = "Telegram already exists";
  }

  if (count($errors) === 0) {
    $password = password_hash($password, PASSWORD_DEFAULT);
    $token = bin2hex(random_bytes(50));
    $verified = false;

    $sql = "INSERT INTO users (firstname, lastname, username, email, twitter, telegram, country, verified, token, password) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param('sssssssbss', $firstname, $lastname, $username, $email, $twitter, $telegram, $country, $verified, $token, $password);

    if ($stmt->execute()) {
      // login user
      $user_id = $conn->insert_id;
      $_SESSION['id'] = $user_id;
      $_SESSION['firstname'] = $firstname;
      $_SESSION['lastname'] = $lastname;
      $_SESSION['username'] = $username;
      $_SESSION['email'] = $email;
      $_SESSION['verified'] = $verified;


      sendVerificationEmail($email, $token);

      // flash message
      $_SESSION['message'] = "Registration successful!";
      $_SESSION['alert-class'] = "alert-success";
      header('location: index.php');
      exit();

    } else {
      $errors['db_error'] = "Database error: failed to register";
    }
  }
}

1 Ответ

0 голосов
/ 14 марта 2020

Если ваш код работает в вашей локальной среде, но не работает на удаленном компьютере, возможно, вам придется соответственно пересмотреть конфигурации вашей БД. Поскольку мы не видим ваш реальный код по вашему вопросу, я могу дать вам только абстрактный ответ и псевдокод.

  $your_hostname = "your host name";//should match your environment
  $your_database = "your database name"; //might be changed on your host change it accordingly
  $your_username = "root or username you have set";//might be changed on your host change it accordingly
  $your_password = "";//might be changed on your host change it accordingly
  $db_params = mysql_connect($your_hostname , $your_username , $your_password ) or    trigger_error(mysql_error(),E_USER_ERROR); 

   $db_connect = mysql_select_db(" $your_database " ,$db_params) or die("!db"); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...