OOP PHP登录/注册系统

时间:2016-01-30 10:33:01

标签: php mysql oop login

我正忙着学习OOP PHP,我的目标是为用户创建一个简单的登录/注册系统。我们的想法是简单地注册将存储在MySQL数据库中的名字,姓氏和密码。

现在我正在尝试将一些数据存储到数据库中,但我被卡住了......我无法将任何数据存储到我的数据库中。这是我正在处理的代码:

register.php:

<?php

error_reporting(E_ALL);

require_once 'inc/user.php';

$user = new User();

if(isset($_POST['register'])) {

  $firstname   = ($_POST['firstname']);
  $lastname = ($_POST['lastname']);
  $password = ($_POST['password']);
  $email = ($_POST['email']);

}

?>

<!DOCTYPE HTML>

<html>

<head>

<title> Project Hour </title>

<script src="js/script.js"></script>
<link rel="stylesheet" type="text/css" href="css/style.css">

</head>

<body>

<div class="logo">
  <a href="index.php"><img src="img/logo.png"></a>
</div>

<div class="login">

  <div class="form">

    <form method="POST" action="#" class="register-form">

      <input  type="text"     name="firstname"   placeholder="voornaam"/>
      <input  type="text"     name="lastname"    placeholder="achternaam"/>
      <input  type="password" name="password"    placeholder="************"/>
      <input  type="text"     name="email"       placeholder="emailadres"/>

      <button type="submit"   name="register">create</button>

      <p class="message"> Al geregistreerd? <a href="index.php"> Inloggen </a></p>

    </form>

  </div> 

user.php:

<?php

error_reporting(E_ALL);

require_once 'connect.php';

class User {

    private $dbase;

    public function __constructor() {

        $this->dbase = new Connect();
        $this->dbase = $this->dbase->dbConnect();

    }

    public function userRegiser($firstname, $lastname, $password, $email) {

        try {

            $st = $dbase->prepare("INSERT INTO users(firstname, lastname, password, email) VALUES (:firstname, :lastname, :password, :email)");

            $st->bindparam(":firstname", $firstname);
            $st->bindparam(":lastname", $lastname);
            $st->bindparam(":password", $password);
            $st->bindparam(":email", $email);

            if($st->execute()) {

                echo 'Inserted successfully.';
            }

        } catch (PDOException $e) {

            echo 'Something failed :' . $e->getMessage;
        }

    }

}


?>

connect.php

<?php

class Connect {

    public function dbConnect() {

        $user = "root";
        $pass = "";
        $pdo = 'mysql:host=localhost;dbname=projecthour'; 

        try {

            $db = new PDO($pdo, $user, $pass);
            $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        } catch (PDOException $e) {

            echo 'Connection failed : ' . $e->getMessage();

        }

    }

}

?>

2 个答案:

答案 0 :(得分:1)

我在这里看到了几个错误。

首先 - 提交表单并且您拥有用户数据时 - 您应该调用userRegister方法:

if(isset($_POST['register'])) {
    $firstname   = ($_POST['firstname']);
    $lastname = ($_POST['lastname']);
    $password = ($_POST['password']);
    $email = ($_POST['email']);
    $user->userRegister($firstname, $lastname, $password, $email);
}

下一个问题

$this->dbase = $this->dbase->dbConnect();

所以这里$this->dbase等于dbConnect方法返回的内容。但是这种方法返回没有。但它应该返回PDO实例:

public function dbConnect() {

    $user = "root";
    $pass = "";
    $pdo = 'mysql:host=localhost;dbname=projecthour'; 

    try {

        $db = new PDO($pdo, $user, $pass);
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

        // here, return new PDO instance
        return $db;

    } catch (PDOException $e) {

        echo 'Connection failed : ' . $e->getMessage();

    }
}

最后,您的userRegiser(应该是userRegis**t**er)方法使用$dbase。但是$dbase并不是你所期望的那样。它只是一个局部变量,但您需要一个类属性:

public function userRegiser($firstname, $lastname, $password, $email) {
    try {
        $st = $this->dbase->prepare("INSERT INTO users(firstname, lastname, password, email) VALUES (:firstname, :lastname, :password, :email)");
            // ^ here

感谢@RajdeepPaul:构造函数定义应该是:

public function __construct() {   // not __constructor!

答案 1 :(得分:0)

if(!empty($_POST)) {

  $firstname   = ($_POST['firstname']);
  $lastname = ($_POST['lastname']);
  $password = ($_POST['password']);
  $email = ($_POST['email']);

// call userRegiser

echo $user->userRegiser($firstname, $lastname, $password, $email);

}

并在User.php中

    public function userRegiser($firstname, $lastname, $password, $email) {

            try {

                $st = $dbase->prepare("INSERT INTO users(firstname, lastname, password, email) VALUES (:firstname, :lastname, :password, :email)");

                $st->bindparam(":firstname", $firstname);
                $st->bindparam(":lastname", $lastname);


$st->bindparam(":password", $password);
            $st->bindparam(":email", $email);

            if($st->execute()) {

                return 'Inserted successfully.';
            }

        } catch (PDOException $e) {

            return 'Something failed :' . $e->getMessage;
        }

    }