2013-10-21 51 views
0

這是我的PHP驗證碼!驗證用戶名和密碼

<?php  //------------------------------------------------------------------------------>PHP VALIDATION 
       $user=""; 
       $pass=""; 
       $nameErr=""; 
       $passErr=""; 
       //$pattern='/^[[email protected]_ ]*$/'; 
       if($_SERVER['REQUEST_METHOD']=='POST') 
       { 
        if(empty($_POST['uname'])) 
        { 
         $nameErr='Enter Your Name!'; 
        } 
        else 
        { 
         $user = test_input($_POST['uname']); 
         if(!preg_match('/^[[email protected]_]*$/',$user)) 
          { 
           $nameErr=' Re-Enter Your Name! Format Inccorrect!(only alpha, numbers,@_ are allowed)'; 
          } 
        } 
        if(empty($_POST['pas'])) 
        { 
         $passErr='Enter Your Password!'; 
        } 
        else 
        { 
         $user = test_input($_POST['pas']); 
         if(!preg_match('/^[[email protected]_]*$/',$pass)) 
         { 
          $passErr='Invalid Format! Re-Enter Password!'; 
         } 
        } 
       } 



      function test_input($data) 
      { 
       $data = trim($data); 
       $data = stripslashes($data); 
       $data = htmlspecialchars($data); 
       return $data; 
      } 
       ?> 

HTML: 
<html> 
<body> 
<div id='shw'><?php echo $user;?></div> 
       <fieldset id='fld'> 
        <form method='post' name='f1' action='<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>'> 
         <table> 
          <tr> 
           <td> 
            User Name:<input type='text' id='uname' name='uname' class='uname' placeholder='USERNAME' autocomplete='off' autofocus maxlength='25'><span class='error'>*</span> 
            Password:<input type='password' id='pass' class='pass' name='pas' placeholder='PASSWORD' autocomplete='off'> 
              <input type='submit' name='submit' id='loggin' value='LOGIN' class='login' onclick='val()'> 
           </td> 
          </tr> 
         </table> 
        </form> 
       </fieldset> 
      <div class='errormsg' id='errmsg'><?php echo $nameErr;?></div> 
      </div> 
</body> 
</html> 

iam在驗證中有problm我想提交後顯示用戶名。 問題是,我的用戶名如果​​其他運行良好,但它跳過密碼部分。如果它不寒而慄也驗證通行證字段,然後只顯示用戶名! 請幫忙!

+0

在檢查開始處添加'var_dump($ _ POST);'以查看發送的內容。因爲test_input不做測試;) –

+3

你可以混合post和定義的變量,比如要求空($ _ POST ['pas']),然後用$ user = test_input($ _POST [ 'PAS']);但是在preg_match中檢查$ pass,並且$ pass在頂部被定義爲非值「」。 – Tom

+0

無需清理密碼,因爲您要使用適當的散列函數來存儲密碼,請參閱函數[password_hash()](http://php.net/manual/en/function.password-hash .PHP)。 – martinstoeckli

回答

1

$user = test_input($_POST['pas']);應該$pass = test_input($_POST['pas']);

您當前的代碼集$用戶在你第一次if..else塊,這並不是說PHP跳過你的第二個if...else塊,它只是不管這個塊會做,用戶已設置。 如果您不想在密碼無效時顯示$ user,只需在您的代碼中設置$ user即可: $ nameErr = null; $ passErr = null;

if (empty($_POST['uname'])) { 
    $nameErr = 'Enter Your Name!'; 
} else { 
    $userTest = test_input($_POST['uname']); 

    if (!preg_match('/^[[email protected]_]*$/', $userTest)) { 
     $nameErr = ' Re-Enter Your Name! Format Inccorrect! (only alpha, numbers, @_ are allowed)'; 
    } else { 
     $valid++; 
    } 
} 
if (empty($_POST['pas'])) { 
    $passErr = 'Enter Your Password!'; 
} else { 
    $pass = test_input($_POST['pas']); 

    if (!preg_match('/^[[email protected]_]*$/', $pass)) { 
     $passErr = 'Invalid Format! Re-Enter Password!'; 
    } else { 
     $valid++; 
    } 
} 

if (is_null($nameErr) && is_null($passErr)) { 
    $user = $_POST['uname'] 
} 

在這裏,我只是檢查$ nameErr和$ passErr是否在測試結束時仍然爲空。如果兩者都爲空,那麼可以設置$ user,因爲沒有檢測到錯誤。

+0

好的thanx的幫助和建議! :) –

+0

@evuez:如果你編輯一些其他問題,請查看整篇文章,而不是分隔代碼塊。其他一些修改仍然保持開放。現在我已經糾正了他們。謝謝! –