PHP(OOP):条件不按预期工作但未显示错误

时间:2015-08-18 07:52:27

标签: php

我的PHP知识水平:新手。

学习资源: Codecademy,TheNewBoston,维基百科,PHP文档。

我想要实现的目标:我正在努力学习如何使用面向对象的PHP,因为我已经阅读过,从长远来看,这比程序方法更有效。我试图将用户重定向到login.php页面,如果输入的名称和密码与数据库和relogin.php匹配失败。

问题:我无法弄清楚为什么我的条件不按预期工作。它确实有效,否则我会收到错误消息。

我尝试了什么:从头开始学习以下代码。我对问题进行了谷歌搜索,尝试通过检查是否缺少任何分号或括号来修复它,甚至检查我的数据库连接是否可以建立。似乎没有错误,所以这意味着条件只显示为真。

当前错误消息:屏幕上或源代码中没有错误消息,这意味着代码正确但无法按预期工作。

如果您希望我对代码发表评论,请告诉我。

我的PHP代码:

if(isset($_POST['name'])) {
    $name= $_POST['name'];
    $password = $_POST['password'];
    $login = new login($name, $password);
}

class Login {

    public function __construct ($name, $password) {

        if ($this->check($name, $password)){
            header("location:login.php");
        }
        else {
            header("location:relogin.php");
        }
    }   

    public function check ($name, $password) {
        $request = "SELECT `id` FROM `members` WHERE `name` LIKE '$name' AND ´password´ LIKE '$password'";
        $result = mysqli_query($connection, $request);
        return mysqli_num_rows($result) > 0;
    }
} 

        public function check ($name, $password) {
            $request = "SELECT `id` FROM `members` WHERE `name` LIKE '$name' AND ´password´ LIKE '$password'";
            $result = mysqli_query($connection, $request);
            return $result;
        }
    }

**HTML code**

    <form action="Login.php" method="post">
         <input type="text" placeholder="Name" name="name">
         <input type="password" placeholder="Password" name="password">
         <input type="submit" name="button" value="Login">     
    </form>

2 个答案:

答案 0 :(得分:2)

您要存储密码两次:

$password = $_POST['name'];
$password = $_POST['password'];

我猜第一个应该是$ name。

另外,要使课程成功,您需要从中创建一个对象:

if(isset($_POST['password'])) {
    $name= $_POST['name'];
    $password = $_POST['password'];
    $login = new login($name, $password);
}

您还需要修改构造函数中的代码:

当你在同一个类中调用一个函数时,你需要使用$ this-&gt;来引用它:

check($name, $password)

应该成为:

$this->check($name, $password)

此外:

您的支票功能不会返回true或false。 您可以返回类似的内容:

return mysqli_num_rows($result) > 0;

答案 1 :(得分:0)

试试这个,

课程登录 {

 public function __construct ($name, $password) {

    if ($this->check($name, $password) > 0) {
        header("location:login.php");
    }
    else {
        header("location:relogin.php");
    }
}   

public function check ($name, $password) {

    $request = "SELECT `id` FROM `members` WHERE `name` LIKE '$name' AND ´password´ LIKE '$password'";
    $result = mysqli_query($connection, $request);
    return mysqli_num_rows($result);
}

}

if(isset($ _ POST ['password'])){

$name= $_POST['name'];
$password = $_POST['password'];
$login = new Login($name, $password);

}