0

PHP、特に OOP の初心者。

login.php で使用しているクラス User.php があります。

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

現時点では、上記のようにログイン メソッドを呼び出していますが、最終的には if ステートメントを呼び出して検証する予定です。ただし、現時点では、DB に接続し、いくつかの情報を引き出して、その情報を追加しようとしています。私のクラスのプロパティ。情報を引き出すことができます (メソッド login() 内のオブジェクトの var_dumps ($results の vardumps) によって検証されます) が、何らかの理由で現在のコードではクラス プロパティを更新できません。

これが私のコードです

ユーザー.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"; 
    }
}   

}

ああ、私が受け取っている現在のエラーは、「スクリプト 'F:\internet\www\htdocs\blissoop\classes\User.php' 26 行目でエラーが発生しました: オブジェクト以外の日付/時刻のプロパティを取得しようとしています: 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 に答える