Простой php-скрипт не добавляет пользователя в базу данных mysql

#php #mysql #mysqli

#php #mysql #mysqli

Вопрос:

Скрипт работал нормально, добавляя новых пользователей, прежде чем я добавил код, чтобы проверить, существует ли пользователь уже в базе данных, и это та часть, которую я не могу понять, почему она не работает. Это тестовая среда только для приложений Android, поэтому я предпочитаю самую простую версию.

 <?php

require_once 'connect_db.php';
$conn = new mysqli($hostname, $admin_name, $admin_pwd, $database);
if($conn->connect_error) {
    die($conn->connect_error);
}

if(isset($_REQUEST["username"]) amp;amp; isset($_REQUEST["email"]) amp;amp; isset($_REQUEST["password"]) amp;amp; isset($_REQUEST["user_type"])) {
    echo "Welcome ". $_REQUEST['username']. "<br />";

    $name = $_REQUEST['username'];
    $email = $_REQUEST['email'];
    $pwd = $_REQUEST['password'];
    $user_type = $_REQUEST['user_type'];

    // first check if user already exists
    $query = "SELECT 1 FROM users WHERE `EMAIL` = '$email'";
    $result = $conn->query($query);
    if (!$result) die("Database access failed: " . $conn->error);

    if (mysqli_num_rows($result) > 0) {
        echo "Error inserting user into database. User already exists";
    } else {
        // then do insert new user
        $query_insert_user = "INSERT INTO users (`NAME`, `EMAIL`, `PWD`, `USER_TYPE`) VALUES ('$name', '$email', '$pwd', '$user_type')";

        if ($conn->query($query_insert_user) === TRUE) {
            echo "New record created successfully";
        } else {
            echo "Error: " . $query_insert_user . "<br>" . $conn->error;
        }
    }

    $result->close();
    $conn->close();

} else {
    echo "Error inserting user into database. Missing user parameters";
}
  

?>

Комментарии:

1. Вы широко открыты для внедрения SQL. Вы используете mysqli, поэтому воспользуйтесь подготовленными инструкциями и bind_param . Проверьте наличие ошибок mysqli вместо проверки правильности запроса.

2. попробуйте удалить эту строку: if (!$result) die(«Сбой доступа к базе данных: » . $ conn-> ошибка);

Ответ №1:

измените строку

$query = «ВЫБЕРИТЕ 1 ИЗ пользователей, ГДЕ EMAIL = ‘$email'»;

Для

$query = «ВЫБЕРИТЕ 1 ИЗ пользователей, ГДЕ EMAIL = ‘».$email.»‘ «;

Ответ №2:

Я не смог его протестировать, но на первый взгляд я бы предложил:

  • измените свой запрос на предложение Джеспера (хотя » » должен расширить вашу переменную, но …)
  • и может ли это быть использование mysqli_num_rows($result) when $result->num_rows следует использовать для ООП? Взгляните на руководство по PHP mysqli-result.num-rows

Удачи.

Ответ №3:

Некоторый пример кода от друга просто работает. Я изменил на:

 // first check if user already exists
    $query = "SELECT 1 FROM users WHERE NAME = '$name' OR EMAIL = '$email'";
    $result = mysqli_fetch_array(mysqli_query($conn,$query));
    if (isset($result)){
        echo 'username or email already exist';