0

I'm making a form using PHP OOP and now I have faced a problem which is this: Fatal error: Cannot use isset() on the result of an expression (you can use "null !== expression" instead) on line 3

Basically this is the index.php which contains the html form and PHP action:

<?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>

I wonder whats going on with this error cause everything's looks fine. And also here's the login.class.php but I don't think the problem is related to this:

    <?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>";
    }
}
?>
  • `if(isset(($_POST['login'])))` you are missing `)` – smarber Mar 11 '17 at 15:57
  • Btw, don't use this code in a live environment; you **will** get hacked. Your entire code is unsafe. – Funk Forty Niner Mar 11 '17 at 16:04
  • @Fred-ii- Could u please tell me why its unsafe, in fact im following a tutorial on the Youtube and the tutor said it is safe and secure !!! https://www.youtube.com/watch?v=J8LcGrCOZEQ –  Mar 11 '17 at 16:16
  • the tutor is still living in the early 90's. It's time for them and you to now step into the 21st century. Look those up on the web, you'll see for yourself. – Funk Forty Niner Mar 11 '17 at 16:17

1 Answers1

1

if(isset(($_POST['login'])) should be if(isset($_POST['login'])).
There was one ( too much in line 3.

Luca Jung
  • 1,440
  • 11
  • 25