PHP, обратите внимание: неопределенная переменная, как исправить? - PullRequest
0 голосов
/ 26 мая 2018

У меня есть форма регистрации здесь, я дурак в PHP (это php для приложения для Android), она работала, но я обнаружил, что могу зарегистрироваться с тем же именем пользователя и адресом электронной почты, поэтому я добавил функции для проверки базы данных на то же имя пользователяи предотвратите это, так как я глупый, я получаю эту ошибку при попытке зарегистрироваться -

Примечание: неопределенная переменная: con в /storage/ssd1/448/5907448/public_html/Register.php в строке 27

Предупреждение: mysqli_prepare () ожидает, что параметром 1 будет mysqli, значение NULL указано в /storage/ssd1/448/5907448/public_html/Register.php в строке 27

Предупреждение: mysqli_stmt_bind_param () ожидает параметр 1быть mysqli_stmt, ноль указан в /storage/ssd1/448/5907448/public_html/Register.php в строке 28

Предупреждение: mysqli_stmt_execute () ожидает, что параметр 1 будет mysqli_stmt, ноль указан в / storage / ssd1 /448/5907448 / public_html / Register.php в строке 29 {"success": true}

Мой PHP

<?php
$response = array();
if (!isset($_POST["username"], $_POST["email"], $_POST["password"])) {
        $response['success'] = false;
        $response['Error'] = "No needed data";
        echo json_encode($response);
        exit(0);
}

ob_start();
$con = mysqli_connect("host", "username", "password", "database");
ob_end_clean();

if (!$con) {
    $response['success'] = false;
    $response['Error'] = "Error Connecting" . PHP_EOL;
    $response['Error'] .= "Error Code: " . mysqli_connect_errno() . PHP_EOL;
    $response['Error'] .= "Error: " . mysqli_connect_error() . PHP_EOL;
    echo json_encode($response);
    exit(0);
}

     function registerUser() {
    $username = $_POST["username"];
    $email = $_POST["email"];
    $password = $_POST["password"];
    $statement = mysqli_prepare($con, "INSERT INTO user (username, email, password) VALUES (?, ?, ?)");
    mysqli_stmt_bind_param($statement, "sss", $username, $email, $password);
    mysqli_stmt_execute($statement);
     }

    function usernameAvailable() {
        global $con, $username;
        $statement = mysqli_prepare($con, "SELECT * FROM user WHERE username = ?"); 
        mysqli_stmt_bind_param($statement, "s", $username);
        mysqli_stmt_execute($statement);
        mysqli_stmt_store_result($statement);
        $count = mysqli_stmt_num_rows($statement);
        mysqli_stmt_close($statement); 
        if ($count < 1){
            return true; 
        }else {
            return false; 
        }
    }
    $response["success"] = false;  
    if (usernameAvailable()){
        registerUser();
        $response["success"] = true;  
    }

    echo json_encode($response);
    ?>

PS - данные подключения изменены по умолчанию.

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

Добавьте вашу переменную $con к параметрам ваших функций, которым необходим доступ к базе данных, например, registerUser () и usernameAvailable ()

0 голосов
/ 26 мая 2018

Вы ссылались на глобальный $ con, и он возвращает неопределенное значение.Убедитесь, что оно имеет значение, отладив его с помощью print_r или других альтернатив.Из-за того, что он возвращает undefined, никакие функции не выполняются

Хотя ссылаться на глобальную переменную плохая практика.Я бы порекомендовал либо установить функцию, которая возвращает переменную $ con, либо передать ее.

function returnCon(){
    $con = mysqli_connect("host", "username", "password", "database");

    return $con
}

Вы можете использовать

$con = returnCon();
...