Php 如何设置窗体是否重定向到新页面?

Php 如何设置窗体是否重定向到新页面?,php,html,Php,Html,因此,我试图用php和html创建一个简单的登录页面。这很简单。首先,用户输入用户名和密码,然后单击提交按钮 如果用户名/密码组合无效,则会打印“无效登录”,并将用户重定向回登录页面。 如果用户名/密码组合有效,则会打印“登录…”,并将用户重定向到其他页面重定向时必须保留所有POST数据 我不知道如何更改窗体的操作 下面是代码片段。请查看潜在的SQL注入。我稍后会处理这些问题 <form action="<?php echo htmlspecialchars($_SERVER['PH

因此,我试图用
php
html
创建一个简单的登录页面。这很简单。首先,用户输入用户名和密码,然后单击提交按钮

如果用户名/密码组合无效,则会打印“无效登录”,并将用户重定向回登录页面。
如果用户名/密码组合有效,则会打印“登录…”,并将用户重定向到其他页面重定向时必须保留所有POST数据

我不知道如何更改窗体的操作

下面是代码片段。请查看潜在的SQL注入。我稍后会处理这些问题

<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post" id="form">

User Name:<input type="text" name="userName" id="userName">
Password:<input type="password" name="password" id="password">
<input type="submit" name="submit" id="submit" value="Submit">
<input type="reset" name="reset" id="reset" value="Reset">

<?php
$username = $_POST['userName'];
$password = $_POST['password'];
//(omitted) function that checks whether the credentials are valid or not
if (password_verify($password, $hash)) {
    echo "Logging you in...";
    //TODO: function that redirects user to another page
}
else {
    echo "Invalid log in.";
}
?>

您可以使用header函数执行此操作,并选择重定向的位置。 根据其他人的建议,在调用header之前不应进行任何响应。我们可以检查当前请求是POST还是GET。对于POST,我们可以进行身份验证,对于GET,我们输出表单。我们可以使用
$\u SESSION
变量来检查是否从成功或失败的登录尝试中重定向

<?php

session_start();

if (isset($_POST['userName'])) {
    $username = $_POST['userName'];
    $password = $_POST['password'];

    if (password_verify($password, $hash)) {
        $_SESSION['login_success'] = true;
        header('Location: user.php?login_success=1');    
    } else {
        $_SESSION['login_success'] = false;
        header('Location: index.php');
    }
}

if (isset($_SESSION['login_success']) && !$_SESSION['login_success']) {
    echo "Invalid log in.";
    unset($_SESSION['login_success']);
}
?>

<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post" id="form">

User Name:<input type="text" name="userName" id="userName">
Password:<input type="password" name="password" id="password">
<input type="submit" name="submit" id="submit" value="Submit">
<input type="reset" name="reset" id="reset" value="Reset">

您可以使用header函数执行此操作,并选择重定向的位置。 根据其他人的建议,在调用header之前不应进行任何响应。我们可以检查当前请求是POST还是GET。对于POST,我们可以进行身份验证,对于GET,我们输出表单。我们可以使用
$\u SESSION
变量来检查是否从成功或失败的登录尝试中重定向

<?php

session_start();

if (isset($_POST['userName'])) {
    $username = $_POST['userName'];
    $password = $_POST['password'];

    if (password_verify($password, $hash)) {
        $_SESSION['login_success'] = true;
        header('Location: user.php?login_success=1');    
    } else {
        $_SESSION['login_success'] = false;
        header('Location: index.php');
    }
}

if (isset($_SESSION['login_success']) && !$_SESSION['login_success']) {
    echo "Invalid log in.";
    unset($_SESSION['login_success']);
}
?>

<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post" id="form">

User Name:<input type="text" name="userName" id="userName">
Password:<input type="password" name="password" id="password">
<input type="submit" name="submit" id="submit" value="Submit">
<input type="reset" name="reset" id="reset" value="Reset">

您可以使用header函数执行此操作,并选择重定向的位置。 根据其他人的建议,在调用header之前不应进行任何响应。我们可以检查当前请求是POST还是GET。对于POST,我们可以进行身份验证,对于GET,我们输出表单。我们可以使用
$\u SESSION
变量来检查是否从成功或失败的登录尝试中重定向

<?php

session_start();

if (isset($_POST['userName'])) {
    $username = $_POST['userName'];
    $password = $_POST['password'];

    if (password_verify($password, $hash)) {
        $_SESSION['login_success'] = true;
        header('Location: user.php?login_success=1');    
    } else {
        $_SESSION['login_success'] = false;
        header('Location: index.php');
    }
}

if (isset($_SESSION['login_success']) && !$_SESSION['login_success']) {
    echo "Invalid log in.";
    unset($_SESSION['login_success']);
}
?>

<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post" id="form">

User Name:<input type="text" name="userName" id="userName">
Password:<input type="password" name="password" id="password">
<input type="submit" name="submit" id="submit" value="Submit">
<input type="reset" name="reset" id="reset" value="Reset">

您可以使用header函数执行此操作,并选择重定向的位置。 根据其他人的建议,在调用header之前不应进行任何响应。我们可以检查当前请求是POST还是GET。对于POST,我们可以进行身份验证,对于GET,我们输出表单。我们可以使用
$\u SESSION
变量来检查是否从成功或失败的登录尝试中重定向

<?php

session_start();

if (isset($_POST['userName'])) {
    $username = $_POST['userName'];
    $password = $_POST['password'];

    if (password_verify($password, $hash)) {
        $_SESSION['login_success'] = true;
        header('Location: user.php?login_success=1');    
    } else {
        $_SESSION['login_success'] = false;
        header('Location: index.php');
    }
}

if (isset($_SESSION['login_success']) && !$_SESSION['login_success']) {
    echo "Invalid log in.";
    unset($_SESSION['login_success']);
}
?>

<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post" id="form">

User Name:<input type="text" name="userName" id="userName">
Password:<input type="password" name="password" id="password">
<input type="submit" name="submit" id="submit" value="Submit">
<input type="reset" name="reset" id="reset" value="Reset">

据我所知,您希望首先显示文本,然后重定向。您的流程如下所示:

  • 用户输入凭据
  • 用户获得流程的确认
  • 用户登录
  • 这样,服务器将处理3个请求(发送凭证表单屏幕、发送流程确认屏幕、发送登录/索引)。我不明白你为什么要显示他正在登录。从用户体验的角度来看,用户将知道他正在登录(他填写表单并按下按钮),这可能会破坏他的体验,因为屏幕可能会闪烁内容,确认登录是非标准的。而且,人们不喜欢等待。所以你可以跳过它,使用它

    如果你真的想使用这个流程。您可以在第二个页面上使用带有超时功能的Javascript重定向(以便用户实际看到确认),同时使用$\u会话或其他cookie解决方案维护服务器端状态

    就用户体验而言,这并不是一个理想的解决方案,因为上面提到的原因以及它对关闭Javascript的访问者有害


    或者,您可以在凭证表单页面上发送Javascript通知,告诉用户他正在登录。没有Javascript的人不会看到通知,但无论如何都会登录。

    据我所知,您希望先显示文本,然后重定向。您的流程如下所示:

  • 用户输入凭据
  • 用户获得流程的确认
  • 用户登录
  • 这样,服务器将处理3个请求(发送凭证表单屏幕、发送流程确认屏幕、发送登录/索引)。我不明白你为什么要显示他正在登录。从用户体验的角度来看,用户将知道他正在登录(他填写表单并按下按钮),这可能会破坏他的体验,因为屏幕可能会闪烁内容,确认登录是非标准的。而且,人们不喜欢等待。所以你可以跳过它,使用它

    如果你真的想使用这个流程。您可以在第二个页面上使用带有超时功能的Javascript重定向(以便用户实际看到确认),同时使用$\u会话或其他cookie解决方案维护服务器端状态

    就用户体验而言,这并不是一个理想的解决方案,因为上面提到的原因以及它对关闭Javascript的访问者有害


    或者,您可以在凭证表单页面上发送Javascript通知,告诉用户他正在登录。没有Javascript的人不会看到通知,但无论如何都会登录。

    据我所知,您希望先显示文本,然后重定向。您的流程如下所示:

  • 用户输入凭据
  • 用户获得流程的确认
  • 用户登录
  • 这样,服务器将处理3个请求(发送凭证表单屏幕、发送流程确认屏幕、发送登录/索引)。我不明白你为什么要显示他正在登录。从用户体验的角度来看,用户将知道他正在登录(他填写表单并按下按钮),这可能会破坏他的体验,因为屏幕可能会闪烁内容,确认登录是非标准的。而且,人们不喜欢等待。所以你可以跳过它,使用它

    如果你真的想使用这个流程。您可以在第二个页面上使用带有超时功能的Javascript重定向(以便用户实际看到确认),同时使用$\u会话或其他cookie解决方案维护服务器端状态

    就用户体验而言,这并不是一个理想的解决方案,因为上面提到的原因以及它对关闭Javascript的访问者有害

    或者,你可以