2015-06-23 20 views
6

Nie jestem pewien, co się tutaj dzieje. Właśnie korzystałem z tutoriala online i pojawiły się te błędy.Błąd krytyczny: wywołanie zapytania funkcji składowej() o wartości zerowej

Dostaję następujące błędy

Błąd

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 

Kod

<?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

zmiennej $ db' 'jest wewnątrz funkcji, a zatem poza zakresem od kodu, który definiuje go. Zadeklaruj to globalnie lub lepiej, przekazuj jako argument do swojej funkcji. Zobacz podręcznik PHP w [scope] (http://php.net/manual/en/language.variables.scope.php) –

+0

Zmieniłem zmienne, a pierwszy błąd został naprawiony, ale nadal otrzymuję: Fatal błąd: wywołanie niezdefiniowanej funkcji mysqli_result() – MPStimpson

+0

Myślę, że to dlatego, że używasz OOP w pierwszej części i proceduralnej dla wyników. – Rasclatt

Odpowiedz

11

pierwsze, oświadczył $ db poza funkcją. Jeśli chcesz go używać wewnątrz funkcji, należy umieścić to na początku kodu funkcji:

global $db; 

I odgadnąć, kiedy pisał:

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

czego naprawdę pragnął:

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

Nie dostaję już żadnych błędów, ale nie mogę dostać się do "user_exists ($ username) === false" kiedy testuję, czy masz jakąś inną mądrość, aby podzielić się ze mną dzisiaj :) – MPStimpson

+0

Tak, zapytanie SQL zawsze zwróci 1 wiersz, przy czym 1 pole mówi, że liczba użytkowników jest równa nazwie użytkownika. Zmień to na "SELECT * FROM users WHERE UserName = '$ username'" 'i zadziała –

+0

Wyobraziłem to, ale dziękuję bardzo! Byłeś bardzo pomocny! To właśnie dostaję za ślepe podążanie za tutorialami – MPStimpson

0

wstaw tę linię do konstrukcji nadrzędnej: $ this-> load-> database();

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

ten sposób .. to powinno działać ..

Powiązane problemy