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"