2015-06-23 8 views
6

Non sono sicuro di cosa stia succedendo qui. Stavo seguendo un tutorial online e questi errori sono saltati fuori.Errore irreversibile: chiamata a una funzione membro query() su null

sto ottenendo i seguenti errori

errore

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 

Codice

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

La variabile '$ db' è all'interno di una funzione, e quindi fuori portata dal codice che lo definisce. Dichiaralo globale o, meglio, passalo come argomento alla tua funzione. Vedi il manuale PHP su [scope] (http://php.net/manual/en/language.variables.scope.php) –

+0

Ho cambiato le variabili, e il primo errore è stato risolto, ma sto ancora ottenendo: Fatal errore: chiamata alla funzione non definita mysqli_result() – MPStimpson

+0

Penso che sia perché si sta utilizzando OOP sulla prima parte e procedurale per i risultati. – Rasclatt

risposta

11

In primo luogo, è dichiarato $ db di fuori della funzione. Se si desidera utilizzarlo all'interno della funzione, si dovrebbe mettere questo all'inizio del vostro codice di funzione:

global $db; 

E credo che, quando hai scritto:

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

ciò che si voleva davvero era:

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

Non ricevo più errori, ma non riesco a entrare nel 'user_exists ($ username) === false' quando sto testando hai altra saggezza da condividere con me oggi :) – MPStimpson

+0

Sì, la query SQL restituirà sempre 1 riga, con 1 campo che indica la quantità di utenti uguale a nome utente. Cambialo in "" SELECT * FROM users WHERE UserName = '$ username' "' e funzionerà –

+0

L'ho capito, ma grazie mille! Sei stato molto utile! Questo è quello che ottengo per seguire ciecamente i tutorial – MPStimpson

0

inserire questa riga nel costrutto padre: $ this-> load-> database();

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

questo modo .. dovrebbe funzionare ..