Bootstrap模式中的PHP登录表单不起作用

时间:2014-05-09 12:15:51

标签: php twitter-bootstrap

我在Bootstrap模式中创建了一个登录表单,但是当输入正确的信息时,用户会显示相同的页面,但模式已关闭,即未重定向到viewDashboard.php

代码

  <!-- Modal -->
  <div class="modal fade" id="Modal" tabindex="-1" role="dialog" aria-labelledby="ModalLabel" aria-hidden="true">
    <div class="modal-dialog">
      <div class="modal-content">
        <div class="modal-header">
          <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
          <h4 class="modal-title" id="ModalLabel">Login to Portal</h4>
        </div>
        <div class="modal-body">
          <form class="form-horizontal" action="" method="post">
            <fieldset>
              <div class="form-group">
                <label for="inputID" class="col-lg-2 control-label">Username</label>
                <div class="col-lg-10">
                  <input type="text" class="form-control" id="inputID" name="user" placeholder="Username">
                </div>
              </div>
              <div class="form-group">
                <label for="inputPassword" class="col-lg-2 control-label">Password</label>
                <div class="col-lg-10">
                  <input type="password" class="form-control" id="inputPassword" placeholder="Password">
                </div>
              </div>
              <div class="modal-footer">
                <button type="submit" class="btn btn-primary">Submit</button>
              </div>
            </fieldset>
          </form>
        </div>
      </div>
    </div>
    <?php

    include("core/connection.php");

    if($conn AND !empty($_POST)){

    $stid = oci_parse($conn, "SELECT * FROM Customers WHERE Customers.CustomerNo = ".$_POST['user']."");
    oci_execute($stid);

    $count = oci_fetch_all($stid, $res);
    if ($count > 0) { 

      session_start();
      $_SESSION['account'] = $_POST['account'];
      header("Location: viewDashboard.php"); 

    }

    oci_free_statement($stid);
    oci_close($conn);

    }

    ?>
  </div>

1 个答案:

答案 0 :(得分:3)

如果您的用户经过了正确的身份验证,则应为他创建一个新的session

session_start();
$_SESSION['user'] = array('id' => '...', name => '...', ...);

然后,可以在您的受保护部分中使用会话中的信息来检查用户是否已连接

session_start();
if (!isset($_SESSION['user']) {
    // redirect to login page
}

最后,应在使用以下方法将任何信息发送到客户端之前进行重定向:

// once logged
header('location:viewDashboard.php');

// on logout or if trying to access secured section
header('location:login.php');

编辑以反映前两条评论:

您的网页结构应如下:

//login.php
<?php
if (isset($_POST)) {
    // login check
    if ($isLogged) {
        // session creation
        header('location:...');
    }
}
?>
<html>
    <head>...</head>
    <body>
    ...
    <!-- Your modal box -->
    </body>
</html>

如果您想在登录失败后重新打开模态框,则应使用PHP设置标志的值(例如在JS中设置标记的!$isLogged)。如果该标志设置为true,则使用Twitter的boostrap js触发模态框。

参考文献:

  1. Sessions
  2. Headers