PHP课程和返回变量

时间:2012-08-02 13:10:03

标签: php class

我正在尝试学习php的面向对象方面,并继续打砖墙。 一个可能只是修复但我无法弄清楚的是为什么通过URL从类函数传回的变量变量不会回显到我的页面。

的index.php

require_once('db.php');
require 'userclass.php';
$user = new user();

if(isset($_POST['submit'])){
    if($user->login($_POST['username'], $_POST['password'])){
        echo("poo");
    }
}

userclass.php

include('db.php');
session_start();
class User{

public function login($username, $password){
    $uname = $username;
    $pass = $password;
    header("location:index.php?uname=".$uname);

}
}

我认为这可能与我的if条件逻辑有关?

请指出我的任何愚蠢或非常见的做法,我宁愿尽可能多地学习,而不是只有一个解决方案。 :)

谢谢!

3 个答案:

答案 0 :(得分:2)

您的课程使用大写字母定义。使用它。

$user = new User();

您的方法不返回值,还尝试执行重定向?

检查登录成功的代码需要一个布尔值。您需要return true;(或错误)。您列出的代码也不包含任何检查用户名或密码是否有效的逻辑,尽管我怀疑这是故意的,因为您正在测试。

为什么似乎在不知名的地方有重定向?

当您想要重定向时,您还需要终止脚本并阻止任何进一步的页面输出,否则重定向将不会发生。

public function login($username, $password){
    if ($username == 'testuser' && $password == 'testpass') {
        return true;
    }
    header("Location: index.php?uname=$uname");
    die();
}

其他小琐事:

requirerequire_once都是语句而不是函数。您正在混合使用括号内和非括号内的语法。最好不要在括号中使用括号。

您正在位置标题中直接传递$_POST['username']。虽然较新版本的PHP可防止标头注入,但这样做是一个非常糟糕的主意。

答案 1 :(得分:0)

if($user->login($_POST['username'], $_POST['password'])){需要某种返回值才能进行评估,因此echo "poo";永远不会发生,因为您被引导到另一个页面?uname =,其中$ _POST未设置

登录需要返回true如果满足某些条件,然后我认为标题位置应该在index.php内(如果你在成功登录后重定向。

答案 2 :(得分:0)

当您致电$user->login(...)时,它会发送一个标题转到另一个页面。 它也不会返回任何有效值,如true/false ... 添加返回值并删除标题,我认为这将解决您的问题...