2013-04-17 2 views
-1

Это кажется очень простым, но для жизни меня не может понять, почему это не работает. Я пытаюсь просто передать объект в функцию, но я получаю эту ошибку:Пропустить объект как параметр в функции, не работающей

Допустимая фатальная ошибка: Аргумент 3, переданный write_query(), должен быть экземпляром mysqli, null given, вызывается в C: \ xampp \ htdocs \ CSP \ Логин \ login.php в строке 28 и определены в C: \ XAMPP \ HTDOCS \ CSP \ php_scripts \ login_script.php на линии 40

это мои функции определения:

function conn_database() 
    { 
     if (!empty($_POST['userid']) && !empty($_POST['password'])) 
     { 
      $conn = new mysqli('localhost', 'root', '', 'csp'); 

      if (mysqli_connect_errno()) 
      { 
       echo 'Connection to database failed:'.mysqli_connect_error(); 
       exit(); 
      } 
      return $conn; 
     } 

    } 


function write_query($userid, $password, mysqli $conn) 
    { 
     $query = 'select * from authorized_users ' 
     ."where userid= '$userid'" 
     ."and password_id='$password'"; 
     $result = $conn->query($query); 
     return $result; 
    } 

Я называя их следующим образом:

$conn = conn_database(); 
$result = write_query($userid, $password, $conn); 

Я тип, намекающий на определение write_query(), но из того, что я понимаю из ошибки, мой третий аргумент не считается экземпляром mysqli. (Я знаю, что мне нужно солить пароль и все, я просто пытаюсь заставить это работать в первую очередь). Любые предложения будут оценены

+1

Эта строка, вероятно, возвращает 'false':' if (! Empty ($ _ POST ['userid']) &&! Empty ($ _ POST ['password'])) '. Выполнение 'var_dump ($ _ POST)' внутри 'get_connection' поможет вам отладить проблему. –

+0

Функция conn_database(), вероятно, возвращает NULL. Я не вижу смысла if-statements ($ _POST ...), не имеет смысла вообще. – bestprogrammerintheworld

+0

@bestprogrammerintheworld, похоже, логика OP заключается в том, что он хочет только подключиться к базе данных, когда пользователь отправляет свои учетные данные (login.php). – Prisoner

ответ

2

Ваш третий параметр не является экземпляром mysqli. Он равен нулю. Это потому, что ваша функция get_connection ничего не возвращает.

Почему вы проверить для этого:

if (!empty($_POST['userid']) && !empty($_POST['password'])) 

Это означает, что код будет только пытаться подключиться к серверу SQL, если вы предоставите его с почтовыми данными только userid и password. Если это поведение, которое вы хотите, вы должны поставить if заявление вне функции, что-то вроде этого:

if (!empty($_POST['userid']) && !empty($_POST['password'])) 
    $conn = conn_database(); 
    $result = write_query($userid, $password, $conn); 
} 

хотя кажется, что userid и password не установлены, независимо. Обязательно проверьте атрибут name на своих входах и сделайте var_dump($_POST), чтобы увидеть, что размещено в вашем скрипте.

+0

Мои аргументы в пользу проверки состояли в том, чтобы убедиться, что пользователь хотя бы попытался заполнить имя пользователя и пароль перед подключением к базе данных вместо того, чтобы тратить время/ресурсы на пустую форму, я просто пошел по ней неправильно. Но ваше решение исправило это, спасибо :) –

Смежные вопросы