我目前正在使用PHP和MySQL为登录/注册系统创建一个网站。但是,当我尝试登录时,我被重定向到一个空白页面(MySQL通常会出错)并且无法登录。奇怪的是 - 注册时不会发生这种情况。我可以正常注册,然后我被重定向到"仪表板" (我成功注册后指定的地方)。我不完全确定发生了什么以及登录系统是如何破坏的,因为我不记得以前用它来改变任何东西。
这被标记为另一个问题的副本,但是当从我的代码中删除die(mysqli_error());
时,白屏消失了,我只是收到一条错误消息,告诉我我的凭据不正确(不是PHP / MySQL错误)消息,我定义的$ error消息。
我的代码如下。
的login.php
<?php
include("connection.php");
session_start();
if ($_GET["logout"]==1 AND $_SESSION['id']) {
session_destroy();
// $message="You have been logged out. Have a nice day!";
session_start();
}
if(isset($_SESSION['id'])){ // if id in session is set
header("Location: /developer/dashboard");
}
if ($_POST['submit']=="Sign Up") {
if (!$_POST['username']) $error.="<br />Please enter a username";
if (!$_POST['email']) $error.="<br />Please enter your email";
else if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) $error.="<br />Please enter a valid email";
if (!$_POST['password']) $error.="<br />Please enter your password";
else {
if (strlen($_POST['password'])<8) $error.="<br />Please enter at least 8 characters";
if(!preg_match('/[A-Z]/', $_POST['password'])) $error.= "<br />Please include at least 1 capital letter";
}
if ($error) $error = "Your account could not be created due to the following:".$error;
else {
$query= "SELECT * FROM `users` WHERE email ='".mysqli_real_escape_string($link, $_POST['email'])."'";
$result = mysqli_query($link, $query);
$results = mysqli_num_rows($result);
if ($results) $error = "That email is already registered. Did you mean to log in?";
else {
$query = "INSERT INTO `users` (`username`, `email`, `password`) VALUES ('".mysqli_real_escape_string($link, $_POST['username'])."', '".mysqli_real_escape_string($link, $_POST['email'])."', '".md5(md5($_POST['username']).$_POST['password'])."')";
mysqli_query($link, $query);
$success="Successfully signed up.";
$_SESSION['id']= mysqli_insert_id($link);
header("Location:../dashboard");
}
}
}
if ($_POST['submit'] == "Log In") {
$query = "SELECT * FROM users WHERE email='".mysqli_real_escape_string($link, $_POST['loginemail'])."'AND
password='" .md5(md5($_POST['loginemail']) .$_POST['loginpassword']). "'LIMIT 1";
$result = mysqli_query($link, $query);
$row = mysqli_fetch_array($result);
if($row){
$_SESSION['id']=$row['id'];
header("Location:../dashboard");
} else {
$error = "That email and password combination did not return any results. Please try again.";
die(mysqli_error());
}
}
loginpage.php(登录页面HTML)
<body>
<div class="container">
<form class="form-signin" method="post">
<h3 class="form-signin-heading">Welcome back!</h3>
<label for="inputEmail" class="sr-only">Email address</label>
<input type="email" name="loginemail" id="inputEmail" placeholder="Email address" class="form-control" value="<?php echo addslashes($_POST['loginemail']); ?>" required autofocus />
<label for="inputPassword" class="sr-only">Password</label>
<input type="password" name="loginpassword" id="inputPassword" placeholder="Password" class="form-control" value="<?php echo addslashes($_POST['loginpassword']); ?>" required />
<button class="btn btn-lg btn-primary btn-block" type="submit" name="submit" value="Log In">Log In</button>
<br />
<div class="alternateAcc" style="font-weight:lighter;"><p>Don't have an account? <a href="../create">Register</a></p>
<a href="/developer/">« Back</a></div>
</form>
</div> <!-- /container -->
signuppage.php(注册页面HTML)
<body>
<div class="container">
<form class="form-signin" method="post">
<h3 class="form-signin-heading">Create an Account</h3>
<label for="inputUsername" class="sr-only">Username</label>
<input type="username" name="username" id="inputUsername" class="form-control" placeholder="Username" value="<? echo addslashes($_POST['username']); ?>" required autofocus />
<label for="inputEmail" class="sr-only">Email address</label>
<input type="email" name="email" id="inputEmail" class="form-control" placeholder="Email address" value="<? echo addslashes($_POST['email']); ?>" required />
<label for="inputPassword" class="sr-only">Password</label>
<input type="password" name="password" id="inputPassword" class="form-control" placeholder="Password" value="<? echo addslashes($_POST['password']); ?>" required />
<button class="btn btn-lg btn-primary btn-block" type="submit" name="submit" value="Sign Up">Continue</button>
<br />
<div class="alternateAcc" style="font-weight:lighter;"><p>Already have an account? <a href="../login">Log In</a></p>
<a href="/developer/">« Back</a></div>
</form>
</div> <!-- /container -->
有没有人对如何解决这个问题有任何指示? 非常感谢你!
答案 0 :(得分:0)
我注意到你没有对你的表单采取任何行动,因此它可能无法进入正确的页面(除非我遗漏了某些内容)。 尝试:
<form class="form-signin" method="post" action="login.php">
答案 1 :(得分:0)
您在登录表单中的操作在哪里?你应该有像
这样的东西<form action="login.php" method="post" />
如果您尚未指定操作,则提交将无法访问您的login.php代码,除非您通过AJAX进行处理?
答案 2 :(得分:0)
看看这行代码:
if ($_POST['submit'] == "Log In") {
$query = "SELECT * FROM users WHERE email='".mysqli_real_escape_string($link, $_POST['loginemail'])."'AND
password='" .md5(md5($_POST['loginemail']) .$_POST['loginpassword']). "'LIMIT 1";
您正在使用与密码连接的MD5用户名注册,但在上面的代码中您使用的是电子邮件和密码?这可能是您的注册工作但登录失败的原因吗?
答案 3 :(得分:0)
该问题最终与phpMyAdmin中的MySQL数据库相关。
无论如何,感谢大家的帮助!