php - 重定向太多。XAMPP ; 本地主机;MYSQL (PHPMYADMIN)
问题描述
我正在使用 XAMPP 将数据库与 PHP myadmin 和一个通过 Apache 在 localhost Web 服务器上运行的测试网页连接起来。我将所有文件上传到 htdocs 文件夹。当我现在运行网页并尝试在 localhost 上为该虚拟页面“注册”时,浏览器会抛出错误消息: ERR_TOO_MANY_REDIRECTS 。Supringlyly,我用“注册按钮”发送的数据写在数据库中,我可以通过 PHP myadmin 控制台检查。
我认为这是 htacess 的问题,对此我有疑问。
htacess 文件应该在哪里?在与我的其他文件相同的目录中?htacess 文件中应该包含什么?我不想把它上传到互联网上,所以它只是为了学习目的,应该留在本地主机上。
我希望我能很好地描述这个问题。首先我的索引文件:
<?php
session_start();
$error = "";
if(array_key_exists("logout", $_GET)){
unset($_SESSION);
setcookie("id", "", time() - 60*60);
$_COOKIE["id"] = "";
}else if(array_key_exists("id",$_SESSION) OR array_key_exists("id", $_COOKIE)){
header("Location: loggedinpage.php");
}
if(array_key_exists("submit", $_POST)){
include("connection.php");
if(!$_POST['email']){
$error .= "Die Emailadresse fehlt<br>";
}
if(!$_POST['password']){
$error .= "Passwort wird benötigt<br>";
}
if($error != ""){
$error = "<p>Es gab Fehler in deinem Formular</p>".$error;
}else {
if($_POST['signUp'] == '1'){
$query = "SELECT id FROM users WHERE email = '".mysqli_real_escape_string($link, $_POST['email'])."' LIMIT 1";
$result = mysqli_query($link, $query);
if(mysqli_num_rows($result) > 0){
$error = "Diese email ist bereits vergriffen.";
}else{
$query = "INSERT INTO users (email, password) VALUES ('".mysqli_real_escape_string($link, $_POST['email'])."',
'".mysqli_real_escape_string($link, $_POST['password'])."')";
if(!mysqli_query($link, $query)){
$error = "<p>Registrieren hat nicht funktioniert, versuche es später noch einmal.</p>";
}else{
$query = "UPDATE users SET password = '".md5(md5(mysqli_insert_id($link)).$_POST['password'])."' WHERE id = ".mysqli_insert_id($link)." LIMIT 1";
mysqli_query($link, $query);
$_SESSION['id'] = mysqli_insert_id($link);
if($_POST['stayLoggedIn'] == '1'){
setcookie("id", mysqli_insert_id($link), time() + 60*60*24*365);
}
header("Location: loggedinpage.php");
}
}
}else if($_POST['signUp'] == '0'){
$query = "SELECT * FROM users WHERE email = '".mysqli_real_escape_string($link, $_POST['email'])."'";
$result = mysqli_query($link, $query);
$row = mysqli_fetch_array($result);
if(isset($row)){
$hashedPassword = md5(md5($row['id']).$_POST['password']);
if($hashedPassword == $row['password']){
$_SESSION['id'] = $row['id'];
if($_POST['stayLoggedIn'] == '1'){
setcookie("id", mysqli_insert_id($link), time() + 60*60*24*365);
}
header("Location: loggedinpage.php");
}else{
$error = "Deine Email Passwort Kombination konnte nicht gefunden werden.";
}
}else{
$error = "2 Deine Email Passwort Kombination konnte nicht gefunden werden.";
}
}
}
}
解决方案
这是有问题的代码:
if (array_key_exists("logout", $_GET)) {
unset($_SESSION);
setcookie("id", "", time() - 60*60);
$_COOKIE["id"] = ""; // <-- Here is the problem
} elseif (array_key_exists("id", $_SESSION) OR array_key_exists("id", $_COOKIE)) {
header("Location: loggedinpage.php"); // ^-- and here
}
请注意您如何将您的设置$_COOKIE['id']
为空白字符串但密钥仍然存在?
这就是问题所在,这意味着 else-if 将看到键 'id' 存在,然后使用该代码块上的标头函数进行重定向。
要解决此问题,只需将行更改为以下内容:
unset($_COOKIE["id"]);
推荐阅读
- python - 文本文件到字典,然后在 python 中打印信息
- php - Laravel dom 爬虫在 javascript 中搜索 img
- php - 从用户的 IP 填充数据库中的纬度和经度
- angular - 如何在 Angular 反应式表单中填充选择表单字段?
- javascript - 如何在 jwplayer 中禁用播放列表最后一个视频的 Next Up Card
- java - 我如何使用 Collections.sort 打印单词集合并打印单词的第一个字母
- javascript - 百度的 echarts - 填满两行之间的空间
- java - 从文本文件中获取所有单词(Java)
- c - 有人问我这段代码有什么问题
- javascript - 带有 React 的 Ant Design,菜单无法在移动设备上呈现