2012-05-11 59 views
0

我只是无法弄清楚..但我有一种感觉,当我抛出异常消息时,问题就在那里。我在注册课程中获得了几乎相同的代码。只是给错误数组的消息正常地像$ this-> errors [] =“一些错误”。php:警告:为foreach提供的无效参数()

<?php 


class class_login 
{ 
    private $id; 
    private $username; 
    private $password; 
    private $passmd5; 

    private $errors; 
    private $access; 
    private $login; 
    private $ltoken; 

    public function __cunstruct() 
    { 
     $this->errors = array(); 

     $this->login = isset($_POST['login'])? 1:0; 
     $this->access = 0; 
     $this->ltoken = $_POST['ltoken']; 
     $this->id  = 0; 
     $this->username = ($this->login)? $this->filter($_POST['lusername']) : $_SESSION['username']; 
     $this->password = ($this->login)? $this->filter($_POST['lpassword']) : ''; 
     $this->passmd5 = ($this->login)? md5($this->password) : $_SESSION['password']; 

    } 

    public function isLoggedIn() 
    { 
     ($this->login)? $this->verifyPost() : $this->verifySession(); 

     return $this->access; 
    } 

    public function filter($var) 
    { 
     return preg_replace('/[^a-zA-Z0-9]/','',$var); 
    } 

    public function verifyPost() 
    { 
     try 
     { 
      if(!$this->tokenValid()) 
       throw new Exception('Invalid Form Submission!'); 
      if(!$this->isDataValid()) 
       throw new Exception('Ivalid Form Data!'); 
      if(!$this->verifyDatabase()) 
       throw new Exception('Invalid Username/Password!'); 

      $this->access = 1; 
      $this->registerSession(); 
     } 
     catch(Exception $e) 
     { 
      $this->errors[] = $e->getMessage(); 
     } 
    } 

    public function verifySession() 
    { 
     if($this->sessionExist() && $this->verifyDatabase()) 
     $this->access = 1; 
    } 

    public function verifyDatabase() 
    { 
     include('db_connect.php'); 

     $data = mysql_query("SELECT ID FROM users WHERE username = '($this->username)' AND password = '($this->passmd5)'"); 

     if (mysql_num_rows($data)) 
     { 
      list($this->id) = @array_values(mysql_fetch_assoc($data)); 

      return true; 
     } 
     else 
      return false; 

     } 

    public function isDataValid() 
    { 
     return (preg_match('/[^a-zA-Z0-9](5,12)$/', $this->username) && preg_match('/[^a-zA-Z0-9](5,12)$/', $this->password))? 1:0; 
    } 

    public function tokenValid() 
    { 
     return (!isset($_SESSION['ltoken']) || $this->ltoken != $_SESSION['ltoken'])? 0 : 1; 
    } 

    public function registerSession() 
    { 
     $_SESSION['ID']  = $this->id; 
     $_SESSION['username'] = $this->username; 
     $_SESSION['password'] = $this->passmd5; 
    } 

    public function sessionExist() 
    { 
     return (isset($_SESSION['username']) && isset($_SESSION['password']))? 1 : 0; 
    } 

    public function show_errors() 
    { 
     foreach($this->errors as $key=>$value) 
      echo $value."</br>"; 
    } 


} 

?> 
+2

它应该是 - >构造不__cunstruct(),如果它的正确PHP的版本使用的是? – swapnesh

+0

它是__cunstruct(),那不是问题。使用5.3.8。谢谢。 –

+0

nvm我明白你的意思了,谢谢 –

回答

2

该构造函数被称为__construct而不是__cunstruct

0

我看到你正在将$ this-> errors设置为你的__cunstruct函数中的一个数组,但由于它不是__construct,它可能永远不会被设置。

0

您需要

foreach($this->errors as $key=>$value) 

一个关联数组,但你有没有一个。 ($这个 - >错误[] = $ E->的getMessage();)

用了一个关联数组,你必须使用:

foreach($this->errors as $value) 
+0

对于非关联数组,您仍然可以使用$ key => $ value(在PHP中,所有数组都是真正关联的)。 $ key只是隐式索引而不是明确的键。 – Brian

0
public function __cunstruct() <------ The error is probably here. It is __construct 
    { 
     $this->errors = array(); 

     $this->login = isset($_POST['login'])? 1:0; 
     $this->access = 0; 
     $this->ltoken = $_POST['ltoken']; 
     $this->id  = 0; 
     $this->username = ($this->login)? $this->filter($_POST['lusername']) : $_SESSION['username']; 
     $this->password = ($this->login)? $this->filter($_POST['lpassword']) : ''; 
     $this->passmd5 = ($this->login)? md5($this->password) : $_SESSION['password']; 

    } 

你有一个错字.... _ 构建,而不是 _construct

相关问题