Html表单似乎提交到了错误的地方?

时间:2012-11-24 21:04:31

标签: php html

最近,由于没有'明显'的原因,我的登录表单开始重定向到我网站的404页面,我看不到原因。

 <?php echo '<form action="http://' . $_SERVER['SERVER_NAME'] . '/login" method="post">'; ?>
 <li><input type="text" name="username" placeholder="Username"></li>
 <li><input type="password" name="password" placeholder="Password"></li>
 <li><input type="submit" value="Login"></li>
 </form>

但出于某种原因,当<?php echo'http://' . $_SERVER['SERVER_NAME'] . '/login是完全相同的页面时,它仍会重定向到404页面。除了用户成功登录之外,没有其他重定向,这将转到不同的页面。我只是看不出是什么造成了这种情况,其他人可以找出原因吗?

编辑: 我的.htaccess是

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?page=$1

验证码:

<?php
if(empty($_POST) === false) {
   $username = $_POST['username'];
   $password = $_POST['password'];

   if(empty($username) === true || empty($password) === true) {
      $errors[] = 'You need to enter a username and password.';
   } else if (user_exists($username) === false) {
      $errors[] = 'We can\'t find that username. Have you registered?';
   } else if (user_active($username) === false) {
      $errors[] = 'You haven\'t activated your account!';
   } else if(strlen($password) > 32 ) {
        $errors[] = 'Password to long.';
   }
     $login = login($username, $password);
     if($login === false){
       $errors[] = 'That username/password combination is incorrect.';
     }else{
        $_SESSION['user_id'] = $login;
        header('Location: ' . $_SERVER['SERVER_NAME'] . '/?msg=1');
        exit();

     }
   }
if(empty($errors)===false){
?>
    <h1>We tried to log you in, but....</h1>
<?php
     print_r($errors);
} ?>

2 个答案:

答案 0 :(得分:0)

你可以省略$_SERVER[]数组并使用静态网址,只是为了调试吗? 喜欢:

<form method="POST" action="url.php">
<li><input type="text" name="username" placeholder="Username"></li>
<li><input type="password" name="password" placeholder="Password"></li>
<li><input type="submit" value="Login" name="submit"></li>
</form>

和:

 header('Location: url.php?msg=1');

如果它给你一个404错误,它必须来自这个或你的.htaccess 以这种方式调试并让我们知道。

答案 1 :(得分:0)

有很多可能的原因。以下是一些故障排除提示:

<?php echo '<form action="http://' . $_SERVER['SERVER_NAME'] . '/login" method="post">'; ?>

显然,填充到表单操作中的URL有问题:

  1. 上述代码中的“页面”在您的操作中为login。它是一个页面,还是一个目录,还是你有重写?该网址应该指向login.php还是login.html,而不仅仅是登录?

  2. 当您在浏览器中查看呈现页面的来源时,您在表单的action中看到了什么?这是一个合法的网址吗?如果您将网址复制/粘贴到浏览器中,您会得到什么?

  3. 使用此类表单时,您不仅仅有/login行动的理由?不应该像这样依赖服务器变量,因为你要使用相同的网址,为什么不删除复杂性,只需使用/login作为操作?

  4. 您使用的是网址重写吗?规则是否已更改,或者是否已修改/移动了htaccess文件?