php 不重定向登录提交标题(位置:...)

问题描述 投票:0回答:1

我已经在 stackoverflow 和 google 上搜索过,但无法解决问题。

对于我的登录页面,我使用了这里的代码https://github.com/Tutorialwork/Tutorials/tree/ac1ee61c5b43bde9b811759eaabcbed027b56385

尊重最初编写此代码的开发人员。

当我点击提交按钮(名为“Einloggen”)时,它没有重定向到“geheim.php”。这不适用于我的服务器。如果我使用 XAMPP 并输入数据库凭据,它可以正常工作。

在服务器上,它看起来只是在刷新 index.php 页面。 Chrome控制台没有报错。我在 Chrome 和 Safari 上试过了。都在 Mac 上。

在 mysql.php 中,我使用的凭据是服务器的凭据。我输入了真实的凭据,而不是代码中的凭据。无论如何,这不是问题。

当我回显变量 $count 时,它给我的值为 1,这意味着连接正常。我使用了我在这里发布的代码。所以,我只是用于测试目的的回声。因为我读到回声导致“位置”出现问题。

当我输入错误的密码或错误的用户时,它会按预期显示回声并写在代码中(“Der Login ist fehlgeschlagen”)。意味着数据库真的不是问题。

这条线不工作:

header("Location: geheim.php");

我没有把register.php贴在这里,因为它不应该是问题的原因。 但是你可以用它来创建一个用户。

在 sql 或 PhpMyAdmin 中我创建了数据库表。

CREATE TABLE accounts (USERNAME varchar(255), PASSWORD varchar(255));

index.php:我可以登录的主页。 mysql.php:包含数据库凭据。 logout.php:通过单击按钮在 geheim.php 页面上进行注销 geheim.php:点击 index.php 上的提交按钮后应显示的页面

就像我说的,凭据很好,它在我的计算机上本地工作。它正在重定向,登录注销。但是当我将它上传到服务器时,它并没有重定向。

index.php

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Login</title>
  </head>
  <body>
    <?php
    if(isset($_POST["submit"])){
      require("mysql.php");
      $stmt = $mysql->prepare("SELECT * FROM accounts WHERE USERNAME = :user"); //Username überprüfen
      $stmt->bindParam(":user", $_POST["username"]);
      $stmt->execute();
      $count = $stmt->rowCount();
      if($count == 1){
        //Username ist frei
        $row = $stmt->fetch();
        if(password_verify($_POST["pw"], $row["PASSWORD"])){
          session_start();
          $_SESSION["username"] = $row["USERNAME"];
          header("Location: geheim.php");
        } else {
          echo "Der Login ist fehlgeschlagen";
        }
      } else {
        echo "Der Login ist fehlgeschlagen";
      }
    }
     ?>
    <h1>Anmelden</h1>
    <form action="index.php" method="post">
      <input type="text" name="username" placeholder="Username" required><br>
      <input type="password" name="pw" placeholder="Passwort" required><br>
      <button type="submit" name="submit">Einloggen</button>
    </form>
    <br>
    <a href="register.php">Noch keinen Account?</a>
  </body>
</html>

mysql.php

<?php
$host = "localhost";
$name = "test";
$user = "root";
$passwort = "";
try{
    $mysql = new PDO("mysql:host=$host;dbname=$name", $user, $passwort);
} catch (PDOException $e){
    echo "SQL Error: ".$e->getMessage();
}
 ?>

注销.php

<?php
session_start();
session_destroy();
header("Location: index.php");
 ?>

geheim.php

<?php
session_start();
if(!isset($_SESSION["username"])){
  header("Location: index.php");
  exit;
}
 ?>
<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <h1>Top Secret</h1>
    <a href="logout.php">Abmelden</a>
  </body>
</html>
php mysql redirect pdo
1个回答
0
投票

而不是使用

header()
功能,尝试在页面的任何地方使用html
meta
标签。

...
header("Location: geheim.php");
...

改为

...
echo '<meta http-equiv="refresh" content="0; url=geheim.php">';
exit;
...

按照标准编码惯例,这个

meta
标签必须放在页面的
head
部分,但你也可以把这个标签放在正文的任何地方进行重定向。

这里的

content=0
代表页面在重定向之前的等待时间(以秒为单位)。

© www.soinside.com 2019 - 2024. All rights reserved.