我在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所有它打开一个单独的页面
答案 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 statements或PDO 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
或相应更改。同时确保您选择了正确的表和数据库。