我目前正在尝试微调登录脚本,只有一个小问题 - HTML没有显示。我试着把HTML放在PHP的前面,但是 session_start(); 取决于它位于顶部的事实,因此如果我将HTML放在PHP之前,HTML呈现,但PHP无效。这是正常的 - 然而,HTML没有显示的事实不是。
只是为了澄清,这是一个.php文件。
完整代码:
<?php
ob_start();
session_start();
require_once 'dbconnect.php';
// it will never let you open index(login) page if session is set
if ( isset($_SESSION['user'])!="" ) {
header("Location: home.php");
exit;
}
if( isset($_POST['btn-login']) ) {
$email = $_POST['email'];
$upass = $_POST['pass'];
$email = strip_tags(trim($email));
$upass = strip_tags(trim($upass));
$password = hash('sha256', $upass); // password hashing using SHA256
$res=mysql_query("SELECT userId, userName, userPass FROM users WHERE userEmail='$email'");
$row=mysql_fetch_array($res);
$count = mysql_num_rows($res); // if uname/pass correct it returns must be 1 row
if( $count == 1 && $row['userPass']==$password ) {
$_SESSION['user'] = $row['userId'];
header("Location: home.php");
} else {
$errMSG = "Wrong Credentials, Try again...";
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Login & Registration System</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<link rel="stylesheet" href="http://demos.codingcage.com/signup-login/style.css" type="text/css" />
</head>
<body>
<div class="container">
<div id="login-form">
<form method="post" autocomplete="off">
<div class="col-md-12">
<div class="form-group">
<h2 class="">Sign In.</h2>
</div>
<div class="form-group">
<hr />
</div>
<?php
if ( isset($errMSG) ) {
?>
<div class="form-group">
<div class="alert alert-danger">
<span class="glyphicon glyphicon-info-sign"></span> <?php echo $errMSG;
?>
</div>
</div>
<?php
}
?>
<div class="form-group">
<div class="input-group">
<span class="input-group-addon"><span class="glyphicon glyphicon-envelope"></span></span>
<input type="email" name="email" class="form-control" placeholder="Your Email" required />
</div>
</div>
<div class="form-group">
<div class="input-group">
<span class="input-group-addon"><span class="glyphicon glyphicon-lock"></span></span>
<input type="password" name="pass" class="form-control" placeholder="Your Password" required />
</div>
</div>
<div class="form-group">
<hr />
</div>
<div class="form-group">
<button type="submit" class="btn btn-block btn-primary" name="btn-login">Sign In</button>
</div>
<div class="form-group">
<hr />
</div>
<div class="form-group">
<a href="register.php">Sign Up Here...</a>
</div>
</div>
</form>
</div>
</div>
</body>
</html>
答案 0 :(得分:2)
把它放在顶部..
error_reporting(E_ALL);
ini_set('display_errors', 1);
它会告诉你错误是什么,所以堆叠溢出的人不必猜测..
另外,不推荐使用mysql_ *函数。如果你想被黑客入侵,那很酷。如果没有,也许会调查PDO。
修改强>
我无法对其他答案发表评论,所以我在这里只说isset
返回一个布尔值。将布尔值与带有==
的空字符串进行比较与将其与false
进行比较具有完全相同的效果......这是非常规的,但它不是不正确的,它肯定不是造成任何错误。
另一个答案是错误的。
答案 1 :(得分:1)
if (isset($_SESSION['user'])!="" ) {
这不是isset()
的工作方式。
使用:if (isset($_SESSION['user'])) {
代替。
http://php.net/manual/en/function.isset.php
然后移除exit
。这个地方没有必要。