2015-06-23 2 views
6

Я не уверен, что здесь происходит. Я просто следил за учебником онлайн, и эти ошибки появились.Неустранимая ошибка: вызов функции функции-члена() по нуле

Я получаю следующие ошибки

Ошибка

Notice: Undefined variable: db in C:\xampp\htdocs\wisconsindairyfarmers\admin\login.php on line 7 

Fatal error: Call to a member function query() on null in C:\xampp\htdocs\wisconsindairyfarmers\admin\login.php on line 7 

Код

<?php 
$db = new mysqli('127.0.0.1', 'root', '', 'wisconsindairyfarmers'); 
?> 

<?php 
require '../db/connect.php'; 
require '../functions/general.php'; 

    function user_exists($username){ 
     //$username = sanitize($username); 
     $result = $db->query("SELECT COUNT(UserId) FROM users WHERE UserName = '$username'"); 
     if($result->num_rows){ 
     return (mysqli_result($query, 0) == 1) ? true : false; 
    }} 

if(empty($_POST) === false){ 

    $username = $_POST['username']; 
    $password = $_POST['password']; 

    if(empty($username) === true || empty($password) === true){ 
     echo 'You need to enter a username and password'; 
    } 
    else if(user_exists($username) === false) { 
     echo 'We can\'t find that username.'; 
    } 
} 

?> 
+3

Ваш 'переменная $ db' находится внутри функции, и, таким образом, из сферы от кода, который определяет его. Объявите его глобальным или, лучше, передайте его как аргумент вашей функции. См. Руководство по PHP в [scope] (http://php.net/manual/en/language.variables.scope.php) –

+0

Я изменил переменные, и первая ошибка исправлена, но я все еще получаю: Fatal Ошибка: вызов неопределенной функции mysqli_result() – MPStimpson

+0

Я думаю, это потому, что вы используете ООП в первой части и процедурный для результатов. – Rasclatt

ответ

11

Во-первых, вы объявили $ дб вне функции. Если вы хотите использовать его внутри функции, вы должны поставить это в начале вашего кода функции:

global $db; 

И я думаю, когда вы писали:

if($result->num_rows){ 
     return (mysqli_result($query, 0) == 1) ? true : false; 

, что вы действительно хотели, было:

if ($result->num_rows==1) { return true; } else { return false; } 
+0

Я больше не получаю никаких ошибок, но я не могу попасть в «user_exists ($ username) === false», когда я тестирую, есть ли у вас какая-либо другая мудрость поделиться со мной сегодня :) – MPStimpson

+0

Да, ваш SQL-запрос всегда будет возвращать 1 строку, причем 1 поле говорит, что количество пользователей равно имени пользователя. Измените это на '' SELECT * FROM users WHERE UserName = '$ username' "' и он будет работать –

+0

Я понял это, но спасибо вам большое! Вы очень помогли! Это то, что я получаю для слепо следуя учебникам – MPStimpson

0

Вставить эту строку в родительскую конструкцию: $ this-> load-> database();

function __construct() { 
    parent::__construct(); 
    $this->load->library('lib_name'); 
    $model=array('model_name'); 
    $this->load->model($model); 
    $this->load->database(); 
} 

этот путь .. он должен работать ..

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