php - 登录表单脚本有一些错误,将登录页面再次重定向到登录页面,而不是允许它登录
问题描述
我已经尝试了许多替代此错误的方法,但它们都不起作用(所有这些都已注释) .Login form [login.php] 被定向到脚本 login.php [scripts/login.php] 。在 scripts/login.php 文件中,管理员 if 块正在工作,但从数据库中登录的提供者不起作用。
这是login.php
<?php
include_once "./msg/login.php";
?>
<!doctype html>
<html>
<head>
<link rel="shortcut icon" type="image/png" href="imgs/favicon.png">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>URBAN AMENITIES</title>
<link rel="stylesheet" href="cssmain/bootstrap.min.css">
<link rel="stylesheet" href="cssmain/style.css">
<link rel="stylesheet" href="cssmain/fontawesome.min.css">
<link href="https://fonts.googleapis.com/css?family=Open+Sans|Roboto" rel="stylesheet">
</head>
<body>
<div id="header" class="header">
<nav class="navbar navbar-expand-lg navbar-light text-capitalize">
<div class="container">
<a class="navbar-brand" href="#"><img src="imgs/logo.png" alt="#" />
</a>
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="show-menu">
<ul class="navbar-nav ml-auto">
<li class="nav-item">
<a class="nav-link" href="index.html">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" href="services.php">Services</a>
</li>
<li class="nav-item">
<a class="nav-link active" href="how.php">How it Works</a>
</li>
<li class="nav-item">
<a class="nav-link active" href="index.php">Instant Service</a>
</li>
<li class="nav-item">
<a class="nav-link" href="review.php">What Clients Say</a>
</li>
<li class="nav-item">
<a class="nav-link" href="contact.php">Contact</a>
</li>
<li class="nav-item">
<a class="nav-link" href="register.php">Register</a>
</li>
<li class="nav-item">
<a class="nav-link" href="login.php">Login</a>
</li>
<li class="nav-item">
<a class="nav-link active" href="feed.php">Feedback form</a>
</li>
</ul>
</div>
</div>
</nav>
</div>
<div class="container" style="margin-top: 50px; width: 450px;">
<div class="card">
<div class="card-body">
<div class="card-title">
<h3 class="text-center">Login for Service Providers</h3>
</div>
<hr>
<div class="contact-form">
<form action="scripts/login.php" method="post">
<label for=""><strong>Contact No : </strong></label>
<input id="contact" name="contact" class="form-control"
placeholder="Enter Your Contact No." minlength="10" maxlength="10"
required>
<label for=""><strong>Password :</strong></label>
<input id="password" name="password" type="password" class="form-
control" placeholder="Enter Password." minlength="6" required><br>
<input type="submit" name="login" value="Login" class="btn btn-
block btn-primary">
</div>
</form>
</div>
</div>
</div>
<footer >
<div class="container">
<div class="row">
<div class="col-lg-3 col-md-6 col-12">
<div class="footer_blog_section">
<img src="imgs/logo.png" alt="#" /><br><br>
<p style="margin-top: 3px; font-size: 15px">URBAN AMENITIES</p>
</div>
</div>
<div class="col-lg-2 col-md-6 col-12">
<div class="item">
<h4 class="text-uppercase">Navigation</h4>
<ul>
<li><a href="#">Home</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Location</a></li>
<li><a href="#">Service</a></li>
<li><a href="#">Features</a></li>
</ul>
</div>
</div>
<div class="col-lg-4 col-md-6 col-12">
<div class="item">
<h4 class="text-uppercase">Contact Info</h4>
<p><strong>Corporate Office Address:</strong></p>
<p><img src="imgs/phone_icon.png" alt="#" />+91 </p>
<p><strong>Customer Service:</strong></p>
<p><img src="imgs/location.png" alt="#" /> .</p>
</div>
</div>
<div class="col-lg-3 col-md-6 col-12">
<div class="item">
<h4 class="text-uppercase">Follow </h4>
<ul>
<li><img src="imgs/icon1.jpg"><a href="http://localhost/homeservices/index.html"> Website</a></li>
<li><img src="imgs/icon2.jpg"><a href=""> Gmail</a></li>
<li><img src="imgs/icon3.jpg"><a href="https://"> Instagrm</a></li>
<li><img src="imgs/icon4.jpg"><a href="https://"> Facebook</a></li>
<li><img src="imgs/icon5.jpg"><a href="www.youtube.in"> Youtube</a></li>
<li><img src="imgs/icon6.jpg"><a href="https://"> LinkedIn</a></li>
</ul>
</div>
</div>
</div>
</div>
<div class="copyright text-center">
<p> URBAN AMENTIES © <?= date("Y") ?>All Rights Reserved.</p>
</div>
</footer>
这是脚本/login.php
<?php
require_once 'session.php';
require_once 'helpers.php';
if (isset($_POST['login'])) {
$contact = test_input($_POST["contact"]);
$pass =test_input($_POST["password"]);
if ($contact == "**" && $pass == "******") {
$s = new stdClass();
$s->name = "admin";
$_SESSION['user'] = $s;
header('Location: ../admin.php');
exit();
} else {
$servername ="localhost";
$username ="root";
$dbname="services";
try {
$conn = new PDO('mysql:host=localhost;dbname=services; charset=utf8','***','******');
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT * FROM providers WHERE contact = '$contact' AND password = '$pass'";
$statement = $conn->prepare($sql);
$statement->execute();
$providers = $statement->fetchAll();
// var_export($providers);
/*if(isset($providers)){
header('Location: /msg/login.php?msg=success');
header('Location: /homeservices/provider.php');
exit();
}
else{
header('Location: scripts/login.php?msg=failed');
exit();
}*/
foreach($providers as $provide=>$values) {
if(($provide['contact'] =="$contact") && ($provide['password'] == "$pass")) {
header('Location: ../login.php?msg=success');
header('Location: ../provider.php');
$_SESSION['user']=$provide;
exit();
}else {
header('Location: ../login.php?msg=failed');
exit();
}
}
}
catch(PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
$conn = null;
}
}
?>
解决方案
好吧,来自代码的提供者“块”;您正在重定向两次。
调用两次时重定向;
header('Location: ../login.php?msg=success');
header('Location: ../provider.php');
只有第一个会生效。
要解决此问题,请删除第一个标头并仅保留此标头;
header('Location: ../provider.php');
否则,删除第二个标题。然后在登录表单所在的表单页面上,执行此操作;
if($_GET['msg'] == "success")
{
header('Location: ../provider.php');
}
这将做的是检查msg
返回的,如果success
,它将重定向到provider.php
同时删除该foreach
声明。我在您的代码中看不到它的相关性。
把这个出来让我们看看。
推荐阅读
- twilio - 如何在回调函数中获取 Flow SID
- security - API 和数据库访问控制架构
- node.js - 在获取数据 react-Native 中实现循环
- r - R - 我有一个从事件时间中提取星期几的程序,现在我想更改它以提取事件时间当天的小时
- python - Python unittest ModuleNotFound 用于从同一模块导入
- arrays - 在 vba 中创建黑名单的最佳方法?
- node.js - Node.JS 转换流:调用外部函数
- javascript - 尝试为迭代添加延迟
- python - 在python for循环中命名对象以进行引导
- python - Numpy,使用 numpy.where() 获取具有特定大小的 1darray 子数组的索引