2010-04-26 5 views
3

Quel est le problème avec ce code?où est l'erreur irrécupérable "Impossible d'accéder à la propriété vide" dans la fonction de classe PHP?

<?php 

class users { 

    var $user_id, 
     $f_name, 
     $l_name, 
     $db_host, 
     $db_user, 
     $db_name, 
     $db_table; 

    function users() { 
     $this->$db_host = 'localhost'; 
     $this->$db_user = 'root'; 
     $this->$db_name = 'input_oop'; 
     $this->$db_table = 'users'; 
    } 

    function userInput($f_name, $l_name) { 
     $dbc = mysql_connect($this->db_host , $this->db_user, "") or die ("Cannot connect to database : " .mysql_error()); 
     mysql_select_db($this->db_name) or die (mysql_error()); 
     $query = "insert into $this->db_table values (NULL, \"$f_name\", \"$l_name\")"; 
     $result = mysql_query($query); 
     if(!$result) die (mysql_error()); 

     $this->userID = mysql_insert_id(); 

     mysql_close($dbc); 

     $this->first_name = $f_name; 
     $this->last_name = $l_name; 
    } 

    function userUpdate($new_f_name, $new_l_name) { 
     $dbc = mysql_connect($this->db_host, $this->db_user, "") or die (mysql_error()); 
     mysql_select_db($this->db_name) or die (mysql_error()); 

     $query = "UPDATE $this->db_table set = \"$new_f_name\" , \"$new_l_name\" WHERE user_id = \"$this->user_id\""; 
     $result = mysql_query($query); 

     $this->f_name = $new_f_name; 
     $this->l_name = $new_l_name; 
     $this->user_id = $user_id; 

     mysql_close($dbc); 
    } 

    function userDelete() { 
     $dbc = mysql_connect($this->db_host, $this->db_user, "") or die (mysql_error()); 
     mysql_select_db($this->db_name) or die (mysql_error()); 

     $query = "DELETE FROM $this->db_table WHERE $user_id = \"$this->user_id\""; 

     mysql_close($dbc); 
    } 
} 
?> 

L'erreur est:

Fatal error: Cannot access empty property in C:\xampp\htdocs\jordan_pagaduan\class.php on line 15.

+2

Pour utiliser le format de code, indentez le code source de 4 espaces. Ne pas abuser du HTML. – kennytm

+1

oh l'humanité ... –

Répondre

14

Pour accéder à un class-property à l'intérieur d'une méthode d'une classe, vous devez utiliser $this->propertyName, et non $this->$propertyName.

Ce qui signifie que votre méthode user_input() doit être écrit comme ceci:

function user_input() { 
    $this->db_host = 'localhost'; 
    $this->db_user = 'root'; 
    $this->db_name = 'input_oop'; 
    $this->db_table = 'users'; 
} 

(vous pourriez avoir à faire la même modification à d'autres endroits)


Avec ce que vous avez écrit, $this->db_user n'est jamais défini; et, par la suite, lors de l'utilisation suivante:

$dbc = mysql_connect($this->db_host , $this->db_user, "") 

$this->db_user est nulle; ce qui signifie mysql_connect utilisera le default value - qui, dans votre cas, semble être ODBC, à en juger par le message d'erreur.

(même chose avec les autres propriétés - mais je pris celui-ci comme un exemple, comme la valeur par défaut de la valeur ODBC était présent dans le message d'erreur que vous avez posté. Il a été le choix le plus évident)

Questions connexes