【发布时间】:2021-06-04 10:09:02
【问题描述】:
这是 jslogin.php
<?php
error_reporting(-1);
session_start();
require_once('config.php');
$email = $_POST['email'];
$username = $_POST['username'];
$password = $_POST['password'];
$isValid = true;
if (empty($password)) {
echo 'You need to enter a Password';
$isValid = false;
}
if (empty($username)) {
echo 'You need to enter a Username';
$isValid = false;
}
if (empty($email)) {
echo 'You need to enter a Email Address';
$isValid = false;
}elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "You need to have a valid Email Address";
$isValid = false;
}
if ($isValid) {
$sql = "SELECT * FROM accounts WHERE username=? and password=? and email=? LIMIT 1";
$stmtselect = $db->prepare($sql);
$result = $stmtselect->execute([$username, $password, $email]);
$user = $stmtselect->fetch(PDO::FETCH_ASSOC);
if ($stmtselect->rowCount() > 0) {
$_SESSION['accounts'] = $user;
echo 'You have signed in successfully!';
} else {
echo 'Incorrect Username or Password or Email';
}
}
这是 login.php
<?php
error_reporting(-1);
session_start();
if(isset($_SESSION['hello_world_accounts'])){
header("Location: index.php");
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<title>Programming Knowledge Login</title>
<link rel="stylesheet" type="text/css" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
<link rel="stylesheet" type="text/css" href="css/styles.css">
</head>
<body>
<div class="container h-100">
<div class="d-flex justify-content-center h-100">
<div class="user_card">
<div class="d-flex justify-content-center">
<div class="brand_logo_container">
<img src="img/logo.png" class="brand_logo" alt="Programming Knowledge logo">
</div>
</div>
<div class="d-flex justify-content-center form_container">
<form method="post">
<div class="input-group mb-2">
<div class="input-group-append">
<span class="input-group-text"><em class="fas fa-user"></em></span>
</div>
<input type="text" name="username" id="username" class="form-control input_user" placeholder="Username" required>
</div>
<div class="input-group mb-2">
<div class="input-group-append">
<span class="input-group-text"><em class="fas fa-key"></em></span>
</div>
<input type="password" name="password" id="password" class="form-control input_pass" placeholder="Password" required>
</div>
<div class="input-group mb-1">
<div class="input-group-append">
<span class="input-group-text"><em class="fas fa-inbox"></em></span>
</div>
<input type="email" name="email" id="email" class="form-control input_pass" placeholder="Email" required>
</div>
<div class="form-group">
<div class="custom-control custom-checkbox">
<input type="checkbox" name="rememberme" class="custom-control-input" id="customControlInline">
<label class="custom-control-label" for="customControlInline">Remember me</label>
</div>
</div>
</div>
<div class="d-flex justify-content-center mt-1 login_container">
<button type="button" name="button" id="login" class="btn login_btn">Login</button>
</div>
</form>
<div class="mt-3 mb-1">
<div class="d-flex justify-content-center links">
Don't have an account? <a href="registration.php" class="ml-2">Sign Up</a>
</div>
<div class="d-flex justify-content-center">
<a href="#">Forgot your password?</a>
</div>
</div>
</div>
</div>
</div>
<script src="http://code.jquery.com/jquery-3.3.1.min.js"
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
crossorigin="anonymous"></script>
<script type="text/javascript" src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
<script>
$(function(){
$('#login').click(function(e){
var valid = this.form.checkValidity();
if(valid){
var username = $('#username').val();
var password = $('#password').val();
var email = $('#email').val();
}
e.preventDefault();
$.ajax({
type: 'POST',
url: 'jslogin.php',
data: {username: username, password: password, email: email},
success: function(data){
alert(data);
if($.trim(data) === "1"){
setTimeout(' window.location.href = "index.php"', 1000);
}
},
error: function(data){
alert('There were errors while doing the operation.');
}
});
});
});
</script>
</body>
</html>
这是 config.php
<?php
error_reporting(-1);
$db_user = "root";
$db_pass = "";
$db_name = "hello_world_accounts";
$db = new PDO('mysql:host=localhost;dbname='. $db_name . ';charset=utf8', $db_user, $db_pass);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
这是 index.php
<?php
error_reporting(-1);
session_start();
if(!isset($_SESSION['hello_world_accounts'])){
header("Location: login.php");
}
if(isset($_GET['logout'])){
session_destroy();
unset($_SESSION);
header("Location: login.php");
}
?>
<!DOCTYPE>
<html lang="en">
<head>
<title>Welcome</title>
</head>
<body>
<p>Welcome to index</p>
<a href="index.php?logout=true">Logout</a>
</body>
</html>
每次我输入我的电子邮件而不是我的用户名和密码时,它都会说我需要把三个都输入,即使一个已经输入了 为什么会发生这种情况,我该如何解决? 我考虑过优先事项,但我不知道该怎么做或做什么......
页面其余代码如下
请不要说密码是纯文本。
这是我的测试mysql。 My Test MYSQL 这是我的测试网站。 My Test Website
【问题讨论】:
-
!stripos不正确。应该是!== FALSE那也不是应该如何验证电子邮件地址 -
您有很多不必要的嵌套 if/else。我建议将所有内容更改为 else if
-
@user3783243 我试过了! == FALSE 说有一个错误,什么都行不通。我做了 !stripos 并且我的消息正在显示。如果它等于'',当我这样做时它开始出错
-
另一个改进点:使用当前结构,即使有多个错误,您也只会向用户显示一个错误。这样,在更正错误并再次提交后,用户将看到下一个错误,然后重复该过程……作为用户,我希望有一个表单可以一次告诉我所有错误。考虑发送一组错误消息。
-
请不要使用
error_reporting(0);开发,你从一开始就是在自找麻烦。在生产阶段,情况就不同了,但在开发阶段从来没有。
标签: php if-statement echo