不能对表达式的结果使用isset()(可以使用“null!== expression”代替)

时间:2017-03-11 15:53:19

标签: php forms oop

我正在使用PHP OOP创建一个表单,现在我遇到了一个问题: 致命错误:不能对表达式的结果使用isset()(可以在第3行使用“null!== expression”)

基本上这是包含html表单和PHP操作的index.php

<?php
session_start();
if(isset(($_POST['login']))
{
 include 'class.login.php';
 $login = new Login();
 if($login->isLoggedIn()){
    echo "Success";
 }else{
    $login->showErrors();
 }
}
$token = $_SESSION['token'] = md5(uniqid(mt_rand(),true));
?>
<form action="<?php $_SERVER['PHP_SELF']; ?>" method="POST">
<input type="text" class="user" name="username" placeholder="Username">
<input type="password" class="lock" name="password" placeholder="Password">
<div class="forgot-top-grids">
    <div class="forgot-grid">
        <ul>
            <li>
                <input type="checkbox" id="brand1" value="">
                <label for="brand1"><span></span>Remember me</label>
            </li>
        </ul>
    </div>
    <div class="forgot">
        <a href="forgotpass.php">Forgot password?</a>
    </div>
    <div class="clearfix"> </div>
    </div>
    <input type="hidden" name="token" value="<? $token; ?>">
    <input type="submit" name="login" value="Log In">
</form>

我想知道这个错误是什么导致一切看起来都很好。 而且这里是login.class.php,但我不认为问题与此有关:

    <?php 
class Login{
    private $_id;
    private $_username;
    private $_password;
    private $_passmd5;
    private $_errors;
    private $_access;
    private $_login;
    private $_token;

    public function __construct(){
        $this->_errors = array();
        $this->_login = isset($_POST['login']) ? 1 : 0;
        $this->_access = 0;
        $this->_token = $_POST['token'];
        $this->_id      = 0;
        $this->_username= ($this->_login) ? $this->filter($_POST['username']) : $_SESSION['username'];
        $this->_password= ($this->_login) ? $this->filter($_POST['password']) : '';
        $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->isTokenValid())
                throw new Exception("Invalid Form Submission");

            if(!$this->isDataValid())
                throw new Exception("Invalid 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(){
        mysql_connect("localhost","root","") or die(mysql_error());
        mysql_select_db("example") or die(mysql_error());
        $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));
            $row = mysql_fetch_assoc($data);
            $this->_id = $row['id'];
        }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 isTokenValid(){
        return (!isset($_SESSION['token']) || $this->_token != $_SESSION['token']) ? 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 showErrors(){
        echo "
            <h3>Errors</h3>
        ";

        foreach($this->_errors as $key=>$value)
            echo $value."</br>";
    }
}
?>

1 个答案:

答案 0 :(得分:1)

if(isset(($_POST['login']))应为if(isset($_POST['login']))。在第3行中有一个(太多。