防止接受空白字段

时间:2014-03-22 14:43:52

标签: php

我正在尝试修复我的代码中的错误,其中将接受空白字段并允许访问a1user.php页面。所以我添加了我认为是验证它的方法,检查存储来自字段的输​​入的变量都不是空白的。在测试时,我提交了空白字段,页面需要很长时间才能加载,最终会抛出警告框。但后来我在我的页面上收到警告并不断发送错误和警告框。我想我错误地创建了一个循环,但我不知道怎么做,因为这显然不起作用! :(

这是我的代码:

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
   $Username1 = trim(htmlspecialchars($_POST["user"]));
   $Password1 = trim(htmlspecialchars($_POST["pwd"]));

   $file = fopen("user_accounts.txt", "r") or exit("Unable to open file");

   while(!feof($file))
   {
      $Username2 = trim(fgets($file));
      $Password2 = trim(fgets($file));

      if($Username1 == "" || $Password1 == ""){
         echo '<script language="javascript">';
         echo 'alert("Error - fields blank: Please enter username and password")';
         echo '</script>';
      }
      else
      {
         if($Username1==$Username2 and $Password1 == $Password2)
         {
            header('Location: a1user.php');
         }
         else
         {
            if($Username1=="admin@SNC" and $Password1=="pass1234")
            {
               header('Location: a1admin.php');
            }
         }
      }
      fclose($file);
   }
}
?>

更新:顺便说一下,这是为大学作业。我知道它不安全,但我仍在学习基础知识。

我的表格:

<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post">
Username: <input type="text" name="user"><br>
Password: <input type="password" name="pwd"><br>
<input type="submit">
</form>

1 个答案:

答案 0 :(得分:0)

尝试这样的代码。

第一次更改:我将$username1==''$password1==''的测试移出了while循环,而不是重复测试以及代码中每行的警报。

第2次更改:我在while循环之外移动了这个:fclose($file);,当你第一次进入while循环时,你正在关闭文件句柄,导致无限循环。

第3次更改:在die()函数之后添加header告诉php如果在头函数之后仍有任何代码则停止执行

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
   $Username1 = trim(htmlspecialchars($_POST["user"]));
   $Password1 = trim(htmlspecialchars($_POST["pwd"]));
   if($Username1 == "" || $Password1 == ""){
     echo '<script language="javascript">';
     echo 'alert("Error - fields blank: Please enter username and password")';
     echo '</script>';
  }
  else {

      $file = fopen("user_accounts.txt", "r") or exit("Unable to open file");

      while(!feof($file))
      {
      $Username2 = trim(fgets($file));
      $Password2 = trim(fgets($file));

         if($Username1==$Username2 and $Password1 == $Password2)
         {
            header('Location: a1user.php');
            die();
         }
         else
         {
            if($Username1=="admin@SNC" and $Password1=="pass1234")
            {
               header('Location: a1admin.php');
               die();
            }
         }
     }
     fclose($file);
     }
 }
 ?>