通过使用php输入正确的密码将用户移动到另一个页面

通过使用php输入正确的密码将用户移动到另一个页面,php,Php,我有一个登录页面。我希望,当用户输入正确的用户名和密码,他想为他打开的页面。如果密码和用户名不正确,他会在当前页面中收到一个错误。 另一个问题是,当您首先打开页面时,会出现一个PHP未定义索引错误 <form action="<?php echo $_SERVER["PHP_SELF"]?>" method="post"> <div class="data"> <label for="name">username: &l

我有一个登录页面。我希望,当用户输入正确的用户名和密码,他想为他打开的页面。如果密码和用户名不正确,他会在当前页面中收到一个错误。 另一个问题是,当您首先打开页面时,会出现一个PHP未定义索引错误

<form action="<?php echo $_SERVER["PHP_SELF"]?>" method="post">
       <div class="data">
       <label for="name">username: </label>
          <input type="text" name="UserName"/>
       </div>
       <div class="data">
       <label for="name">password: </label>
          <input type="password" name="PassWord"/>
       </div>
       <input type="submit" value="Log In" name="submit" id="submit"/>
<?php
$dbUserName = "alex";
$dbPassWord = "1234";
 $UserName = $_POST["UserName"];
 $PassWord = $_POST["PassWord"];
 if($UserName = $dbUserName&&$PassWord = $dbPassWord){
    //the code which moves the user to another page.
 }else echo "please enter the correct username and password";
?>
   </form>

在if语句中,您意外地将单个“=”字符放在了应该是双字符的地方:

if($UserName == $dbUserName&&$PassWord == $dbPassWord){

正如phansen所说,实际上您使用的是赋值运算符,它始终等于true。

在您的例子中,
=
是为变量设置值的运算符(赋值运算符)

使用
=
==
创建条件并检查值

if($UserName == $dbUserName&&$PassWord == $dbPassWord) {
试试这个-

<?php
$dbUserName = "alex";
$dbPassWord = "1234";
if (isset($_POST["UserName"]) && isset($_POST["PassWord"])) {
   $UserName = $_POST["UserName"];
   $PassWord = $_POST["PassWord"];
   if($UserName == $dbUserName && $PassWord == $dbPassWord){
      header('location:path/location');
      exit;
   } else echo "please enter the correct username and password";
}
?>


未定义索引
错误即将出现,因为在表单发布之前,
用户名
密码
不会出现在那里。因此添加了检查。

就像另一个所说的,使用
=
而不是
=


有关重定向的问题,请参阅Repox-answer。

您必须将PHP代码移到文件的开头,才能在服务器端执行此操作(这是正确的做法),以避免在设置标题之前出现输出错误。此外,您的条件是分配变量值(=),而不是比较值(=)

一个(未经测试的)可以工作的设置示例:

<?php
$dbUserName = "alex";
$dbPassWord = "1234";

if(isset($_POST['UserName']))
{
    $UserName = $_POST["UserName"];
    $PassWord = $_POST["PassWord"];

    if($UserName == $dbUserName && $PassWord == $dbPassWord)
    {
        header("Location: http://example.com/the/page/where/your/user/should/end/up");
        exit;
    }
    else
    {
      $error = true;
    }
} 
?>

<form action="<?php echo $_SERVER["PHP_SELF"]?>" method="post">
       <div class="data">
       <label for="name">username: </label>
          <input type="text" name="UserName"/>
       </div>
       <div class="data">
       <label for="name">password: </label>
          <input type="password" name="PassWord"/>
       </div>
       <input type="submit" value="Log In" name="submit" id="submit"/>
</form>
<?php if(isset($error)): ?>
please enter the correct username and password
<?php endif; ?>


您是否尝试过标题('位置:');?提示:使用
==
而不是
=
。还可以尝试使用类似于
isset()
的方法来检查变量,这将在您进行输出后出现有关设置标题的错误。Repox给出了更完整的答案。无论如何谢谢你+1我同意这个答案。另外,我想指出的是,最好在if语句中执行数据库查询。我们必须始终正确添加检查。:)
<?php
$dbUserName = "alex";
$dbPassWord = "1234";

if(isset($_POST['UserName']))
{
    $UserName = $_POST["UserName"];
    $PassWord = $_POST["PassWord"];

    if($UserName == $dbUserName && $PassWord == $dbPassWord)
    {
        header("Location: http://example.com/the/page/where/your/user/should/end/up");
        exit;
    }
    else
    {
      $error = true;
    }
} 
?>

<form action="<?php echo $_SERVER["PHP_SELF"]?>" method="post">
       <div class="data">
       <label for="name">username: </label>
          <input type="text" name="UserName"/>
       </div>
       <div class="data">
       <label for="name">password: </label>
          <input type="password" name="PassWord"/>
       </div>
       <input type="submit" value="Log In" name="submit" id="submit"/>
</form>
<?php if(isset($error)): ?>
please enter the correct username and password
<?php endif; ?>