我正在使用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>";
}
}
?>
答案 0 :(得分:1)
if(isset(($_POST['login']))
应为if(isset($_POST['login']))
。在第3行中有一个(
太多。