在Bootstrap上简单登录

时间:2014-12-27 12:58:21

标签: php twitter-bootstrap login

我在Bootstrap中创建一个简单的登录表单时遇到了麻烦。我已经阅读了大部分谷歌搜索结果并直接复制了一些代码,但我无法让脚本运行/触发

我的数据库连接正常(已通过echo测试) 我的PHP是

                <?php  //Start the Session
                session_start();
                echo log in script has run
                 require('connect.php');
                //3. If the form is submitted or not.
                //3.1 If the form is submitted
                if (isset($_POST['username']) and isset($_POST['password'])){
                //3.1.1 Assigning posted values to variables.
                $username = $_POST['username'];
                $password = $_POST['password'];
                //3.1.2 Checking the values are existing in the database or not
                $query = "SELECT * FROM `userinfo` WHERE Email='$username' and Password='$password'";

                $result = mysqli_query($query) or die(mysqli_error());
                echo $result
                $count = mysqli_num_rows($result);
                //3.1.2 If the posted values are equal to the database values, then session will be created for the user.
                if ($count == 1){
                $_SESSION['username'] = $username;
                }else{
                //3.1.3 If the login credentials doesn't match, he will be shown with an error message.
                echo "Invalid Login Credentials.";
                }
                }
                //3.1.4 if the user is logged in Greets the user with message
                if (isset($_SESSION['username'])){
                $username = $_SESSION['username'];
                echo "Hello " . $username . "";
                echo "This is the Members Area";

                }else{
                //3.2 When the user visits the page first time, simple login form will be displayed.
                }
                ?>

然后我的表单的HTML(这是标准的bootstrap模板

                <nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
                  <div class="container">
                    <div class="navbar-header">
                      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
                        <span class="sr-only">Toggle navigation</span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                      </button>
                      <a class="navbar-brand" href="#">Project name</a>
                    </div>
                    <div id="navbar" class="navbar-collapse collapse">
                      <form class="navbar-form navbar-right" role="form" method="post">
                        <div class="form-group">
                          <input type="email" placeholder="Email" class="form-control" name="username">
                        </div>
                        <div class="form-group">
                          <input type="password" placeholder="Password" class="form-control" name="password">
                        </div>
                        <button type="submit" class="btn btn-success" name="submitButton" >Sign in</button>
                      </form>
                    </div><!--/.navbar-collapse -->
                  </div>
                </nav>

但是脚本根本没有运行。我知道我可能需要一个动作命令buit所有它打开一个单独的页面

1 个答案:

答案 0 :(得分:2)

您的代码存在一些问题。

这一行:

echo log in script has run

需要读作(缺少引号和分号)

echo "log in script has run";

然后echo $result缺少一个分号,技术上,应该读作
echo $result;

但是,您应该删除该行,因为它会抛出以下错误:

  

捕获致命错误:类mysqli_result的对象无法转换为字符串...

然后,您没有使用查询连接到您的数据库。

由于您没有提及您用来连接的变量,我以$con为例。

这一行:

$result = mysqli_query($query) or die(mysqli_error());

应该读作,并使用DB连接变量作为第一个参数:

$result = mysqli_query($con, $query) or die(mysqli_error($con));

旁注:确保您的连接API为mysqli_而非mysql_或基于PDO。这些API不会相互混合。

如果这是您的实际代码,那么在您打开<?php标记之前它包含空格;删除它们。

在使用会话时,会在标题之前计算为输出。

error reporting添加到文件的顶部,这有助于查找错误,并且会在开始时发出解析错误信号。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:错误报告应仅在暂存时完成,而不是生产。


我注意到您可能以纯文本格式存储密码。如果是这种情况,则非常气馁。

建议使用CRYPT_BLOWFISH或PHP 5.5的password_hash()功能。对于PHP&lt; 5.5使用password_hash() compatibility pack

另外,关于SQL注入,use mysqli with prepared statementsPDO with prepared statements,它们更安全


脚注:

由于您的代码似乎在同一页面上运行,我建议您还添加一个条件语句来检查是否还单击了提交按钮:

if ( isset($_POST['submitButton']) 
    && isset($_POST['username']) 
    && isset($_POST['password']) ){

如果添加该内容并且无效,请尝试将<button>更改为<input>

即:

<input type="submit" class="btn btn-success" name="submitButton" value="Sign in">
  

我知道我可能需要一个动作命令

如果您的整个代码位于同一页面内并且<form>中省略了某个操作,则默认为self,这相当于执行<form action="" method="post">

如果您的表单和PHP / MySQL不是表单的一部分并且位于不同的页面中,那么您需要将其操作指定给文件<form action="handler.php" method="post">


修改

使用mysqli_函数示例连接到数据库:

根据http://php.net/manual/en/function.mysqli-connect.php

<?php
//conection:
$link = mysqli_connect("myhost","myuser","mypassw","mybd") 

     or die("Error " . mysqli_error($link)); 
  • 分别替换/使用$link或相应更改。

同时确保您选择了正确的表和数据库。