登录和注册页面不起作用

时间:2014-01-11 14:04:45

标签: php

我正在尝试使用php mvc创建登录页面并注册,但不使用框架。 在 View / LoginSignup.php 文件中,我有两种形式的html代码:

  1. 一个用于使用action = public / indexLogin.php
  2. 登录
  3. 另一个用于注册的动作= public / indexRegister.php
  4. 这两个文件是这样制作的:

    公开/ indexLogin.php

        $controller = new LoginController();
        $view = $controller->invoke();
        $view->render();
    

    public / indexRegister.php

        $controller = new RegisterController();
        $view = $controller->invoke();
        $view->render();
    

    public / indexLogin.php 中调用的invoke()方法执行此操作:

        public function invoke() {
            $view = $this->check();
            return $view;
        }
    

    其中check()方法是:

       public function check() {
          if(isset($_POST['submitL'])) {
             if(isset($_POST['username']) && isset($_POST['password'])) {
                $username = $_POST['username'];
                $password = $_POST['password'];
                if($this->checkData($username, $password)) {
                   $_SESSION['logged_in'] = 1;
                   $_SESSION['username'] = $username;
                   $usersRepo = new UserRepository();
                   $user = $usersRepo->findByUsername($username);
                   $view = new View('Home');
                   $view->setData('user', $this->user);
                   return $view;
                }
             }
             else {
                $view = new View('LoginSignup');
                $view->setData('errorsL', $this->errorsL);
                return $view;
             }
          }
          else {
             $view = new View('LoginSignup');
             return $view;
          }
       }
    

    public / indexRegister.php 中调用的invoke()方法执行此操作:

        public function invoke() {
            $view = $this->check();
            return $view;
        }
    

    其中check()方法是:

    public function check() {
      if(isset($_POST['submitR'])) {
         if(isset($_POST['username']) && isset($_POST['password']) && isset($_POST['email'])) {
            $username = $_POST['username'];
            $password = $_POST['password'];
            $email = $_POST['email'];
            if($this->checkData($username, $password, $email)) {
               $usersRepo = new UserRepository();
               $user = new User();
               $user->setUsername($username);
               $user->setEmail($email);
               $user->setPassword($password);
               $user->saveRegister();
               $successesR['completed'] = "Registration completed successfully";
               $view = new View('LoginSignup');
               $view->setData('successesR', $this->successesR);
               return $view;
            }
            else {
               $view = new View('LoginSignup');
               $view->setData('errorsR', $this->errorsR);
               return $view;
            }
         }
         else {
            $view = new View('LoginSignup');
            $view->setData('errorsR', $this->errorsR);
            return $view;
         }
      }
      else {
         $view = new View('LoginSignup');
         return $view;
      }
    }
    

    render()方法位于 View / View.php 中并执行此操作:

    public function render(){
        extract($this->data);
        ob_start();
        require $this->path;
        ob_end_flush();
    }
    

    View / View.php 还包含setData($ name,$ value)方法:

    public function setData($name, $value) {
        $this->data[$name] = $value;
    }
    

    $ data是一个开头定义的数组。

    User类( Model / User.php )表示一个用户(字段为username,password,first_name ...),并定义方法get()和set()。 它还包含方法load()和save()。 save()在数据库中插入$ this用户。

    public function save() {
        $new = is_null($this->id);
        $db = Database::getInstance();
        if($new) {
            $sql = "INSERT INTO 'users' ('username', 'password', 'email', 'first_name', 'last_name') "
            . "VALUES (?, ?, ?, ?, ?)";
            $stmt = $db->prepare($sql);
            $stmt->execute(array($this->getUsername(), $this->password, $this->getEmail(), $this->getFirstName(), $this->getLastName());
            $this->id = $db->lastInsertedId();
        }
        else {
            $sql = "UPDATE 'users' SET 'username' = ?, 'password' = ?, 'email' = ?, 'first_name' = ?, 'last_name' = ? WHERE 'id' = ?";
            $stmt = $db->prepare($sql);
            $stmt->execute(array($this->getUsername(), $this->password, $this->getEmail(), $this->getFirstName(), $this->getLastName(), $this->id));
        }
    }
    

    用于登录的HTML

    <form action="../public/indexLogin.php" method="post" onSubmit="return validateLog(this);">
        <table>
            <tr>
                <td>Username:</td>
                <td>
                    <input type="text" name="username" id="lu"/>
                </td>
            </tr>
            <tr>
                <td>Password:</td>
                <td>
                    <input type="password" name="password" id="lp"/>
                </td>
            </tr>
            <tr>
                <td>
                    <input type="submit" value="Login" name="submitL"/>
                </td>
            </tr>
        </table>
    </form>
    

    注册用HTML

    <form action="../public/indexRegister.php" method="post" onSubmit="return validateReg(this);">
        <table>
            <tr>
                <td>Username:</td>
                <td colspan="2">
                    <input type="text" name="username" id="ru"/>
                </td>
            </tr>
            <tr>
                <td>Password:</td>
                <td colspan="2">
                    <input type="password" name="password" id="rp" />
                </td>
            </tr>
            <tr>
                <td>E-mail:</td>
                <td colspan="2">
                    <input type="text" name="email" id="re" />
                </td>
            </tr>
            <tr>
                <td align="center">
                    <input type="submit" value="Sign up" name="submitR"/>
                </td>
            </tr>
        </table>
    </form>
    

    我对此代码有两个问题:

    1. 当我以注册形式输入正确的数据时,数据库中不会插入新用户。
    2. 登录网站后,您将转到主页(查看/ Home.php ),其中有代码<p><?php echo "Hi".$user->getUsername();?>,应显示消息“嗨Josh”,如果Josh是此时登录的用户。 而只显示“嗨”。
    3. 有人会知道帮帮我吗?谢谢!


      JAVASCRIPT功能

        function validateLog(form) {
          var username = document.getElementById("lu").value;
          var password = document.getElementById("lp").value;
           var errors = [];
      
           var ck_username = /^[A-Za-z0-9_]{2,10}$/;
           var ck_password =  /^[A-Za-z0-9!@#$%^&*()_]{2,20}$/;   
      
           if(!ck_username.test(username)) {
              errors[errors.length] = "Incorretc.";
           }
           if(!ck_password.test(password)) {
              errors[errors.length] = "Incorrect.";
           }
      
           if(errors.length > 0) {
              reportErrors(errors);
              return false;
           }
           return true;   
        }
      
        function validateReg(form) {
          var username = document.getElementById("ru").value;
          var password = document.getElementById("rp").value;
          var email = document.getElementById("re").value;
           var errors = [];
      
           var ck_username = /^[A-Za-z0-9_]{2,10}$/;
           var ck_password =  /^[A-Za-z0-9!@#$%^&*()_]{2,20}$/;   
           var ck_email = /^[_a-z0-9+-]+(\.[_a-z0-9+-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+$/;
      
           if(!ck_username.test(username)) {
              errors[errors.length] = "Incorrect.";
           }
           if(!ck_password.test(password)) {
              errors[errors.length] = "Incorrect.";
           }
           if(!ck_email.test(email)) {
              errors[errors.length] = "Incorretc.";
           }
      
           if(errors.length > 0) {
              reportErrors(errors);
              return false;
           }
           return true;   
        }
      

0 个答案:

没有答案