0

PHP 新手,尤其是 OOP。

我有一个类 User.php,我在 login.php 中使用它。

$vars = $user->login($email, $pass)

目前我正在调用上述登录方法,最终我将调用一个 if 语句来验证等。然而,此刻,我正在尝试连接到数据库,提取一些信息并将该信息添加到我班上的属性。我可以提取信息(由方法 login() 中对象的 var_dumps 验证($results 的 vardump),但由于某种原因,我当前的代码无法更新我的类属性。

这是我的代码

用户.php

<?php

class User {

public $id, $password, $first_name, $last_name;
private $user_level;
protected static $db_fields = array('id', 'first_name', 'last_name', 'pass');
protected static $table_name="users";


public function login($email, $pass) {
    global $database;
    $sql = "SELECT user_id, first_name, last_name, user_level FROM users WHERE (email='$email' AND pass=SHA1('$pass')) AND active IS NULL LIMIT 1";
    $results = self::find_by_sql($sql);
    if (!empty($results)) {
        $this->setuservars($results);
        return array_shift($results);
    } else {
        return false;
    }
//  return !empty($results) ? array_shift($results) : false;
}


private function setuservars($uservariables) {
    $this->id = $uservariables->id;
    $this->first_name = $uservariables->first_name;
    $this->last_name = $uservariables->last_name;
    $this->user_level = $uservariables->user_level;

    }



public static function find_by_sql($sql="") {
    global $database;
    $results_array = $database->query($sql);
    $object_array = array();
    while ($row = $results_array->fetch_assoc()) {
        $object_array[] = self::instantiate($row);
    }
    return $object_array;
}


public function mysqli_array_escape($arg1){
    global $database;
    foreach ($arg1 as $key => $value) {
        $arg1[$key] = $database->real_escape_string($value);
    }
    return $arg1;
}


private static function instantiate($record) {
    // Could check that $record exists and is an array
    $object = new self;
    foreach($record as $attribute=>$value){
        if($object->has_attribute($attribute)) {
            $object->$attribute = $value;
        }
    }
    return $object;
}


private function has_attribute($attribute) {
    return array_key_exists($attribute, $this->attributes());
}

protected function attributes() {
    // return an array of attribute names and their values
    $attributes = array();
    foreach(self::$db_fields as $field) {
        if(property_exists($this, $field)) {
            $attributes[$field] = $this->$field;
        }
    }
    return $attributes;
}

}



$user = new User();


?>

这是我的 login.php(我已经编辑了 if 语句以验证用户是否成功登录,我已替换为“if (1 == 1) {”语句只是为了帮助调试代码。

if (isset($_POST['submitted'])) {

$postdata = $user->mysqli_array_escape($_POST);

//var_dump($user->results);

if (((!isset($_POST['email'])) || ($_POST['email']) == '') || (!isset($_POST['pass']) || ($_POST['pass']) == '') ) {
    //error handling eventually
} else { 
    $email = $_POST['email'];
    $pass = $_POST['pass'];
    $vars = $user->login($email, $pass);
    echo $vars->first_name;


    if (1 == 1) {
        echo "you have successfully logged in";
        var_dump($user->id);

    } else { 
        echo "not logged in"; 
    }
}   

}

哦,我收到的当前错误是“第 26 行的脚本 'F:\internet\www\htdocs\blissoop\classes\User.php' 中发生错误:尝试获取非对象日期/时间的属性:4 -13-2012 05:01:09"

4

1 回答 1

0

我在这个问题的帮助下解决了这个问题

这是帮助的代码:从包含对象的多维数组中获取值

我对有帮助的答案 +1 了。

foreach ($array as $item) {
$userId = $item->user_id;
//do something with the userId for this item
}

我必须遍历数组才能获取对象的属性。

于 2012-04-13T04:55:52.490 回答