2011-09-06 38 views
0

在開發登錄部分時,出現錯誤。Preg_match混淆

結果總是顯示了假statement.what的錯誤與此代碼

任何人都可以指導我「的preg_match」,Wolud想知道詳細的preg_match。

的代碼是:

if (isset($_POST['submit'])) 
{ 

if (preg_match('%^[A-Za-z0-9]\S{8,20}$%', stripslashes(trim($_POST['userid'])))) 
{ 
    $u = $_POST['userid']; 
    echo $u.'<br />'; 
} 
else 
{ 
    $u = FALSE; 
    echo '<p><font color="red" size="+1">Please enter a valid User ID!</font></p>'; 
} 

    if (preg_match ('%^[A-Za-z0-9]\S{8,20}$%', stripslashes(trim($_POST['password'])))) 
{ 
    $p =$_POST['password']; 
    $p=sha1($p); 
    echo $p; 
} 
else 
{ 
    $p = FALSE; 
    echo '<p><font color="red" size="+1">Please enter a valid Password!</font></p>'; 
} 

}

+1

你確定你輸入的用戶名至少有9個字符? – codaddict

+0

我不知道到底在的preg_match你detail.Could只是解釋 –

+0

@Peace情人:你看的文檔(http://php.net/manual/en/function.preg-match.php)?如果是這樣,在文檔中有什麼讓你感到困惑的? – 2011-09-06 05:57:40

回答

2

%^ [A-ZA-Z0-9] \ S {8,20} $%

方式:

AZ的1或az或0-9 8通過\ S的20

我懷疑這就是你的意思?

也許嘗試在\ S的[]

+0

試過,沒有成功 –

+1

目標是什麼?你想要做什麼的英文描述是什麼? – Corbin

+0

我的目標是通過登錄 –

3

在您的用戶名驗證您只允許單個字符。將長度說明符放在右括號後面,就像您在密碼驗證程序中所做的一樣。

爲什麼你的密碼限制允許的字符?用戶應該能夠使用他想要的任何特殊字符,而且你也不應該限制最大長度。

+0

我已經添加了長度說明符,仍然沒有工作 這是爲了安全登錄 –

+0

+1問爲什麼有一個上限和沒有特殊字符允許。 – 2011-09-06 06:26:48

2

你可能會想要像下面這樣:

<?php 

if(isset($_POST['submit'])){ 

    # An array to capture and hold errors - makes testing for, and displaying them 
    # easier down the track. 
    $errors = array(); 

    # First Sanitising of the Form Data 
    $P = array_map('trim' , $_POST); 

    # User ID Check 
    if(!isset($P['userid']) || $P['userid']==''){ 
    $errors['userid'] = 'Please enter your desired User ID of between 8 and 20 characters/digits (no spaces)'; 
    }elseif(!preg_match('/[a-z0-9]{8,20}/i' , $P['userid'])){ 
    $errors['userid'] = 'Your User ID must contain between 8 and 20 characters/digits (no spaces)'; 
    } 

    # Password Check 
    if(!isset($P['password']) || $P['password']==''){ 
    $errors['password'] = 'Please enter a password of between 8 and 20 characters/digits (no spaces)'; 
    }elseif(!preg_match('/[a-z0-9]{8,20}/i' , $P['userid'])){ 
    $errors['password'] = 'Your Password must contain between 8 and 20 characters/digits (no spaces)'; 
    } 

} 

.... 

?><form> 
User ID: 
<?php echo (isset($errors['userid']) ? '<p><font color="red" size="+1">'.$errors['userid'].'</font></p>' : ''); ?> 
<input type="text" name="userid" value="<?php echo (isset($P['userid']) ? $P['userid'] : ''); ?>" /><br> 
Password: 
<?php echo (isset($errors['password']) ? '<p><font color="red" size="+1">'.$errors['password'].'</font></p>' : ''); ?> 
<input type="password" name="password" /><br> 

以上將需要一個用戶名和密碼,每組8和20之間的字符( A到Z或0到9)。 如果提交表單並發現驗證測試失敗,則表單將顯示錯誤消息,並且該字段無效。它還包括提交的用戶名(因此用戶可以根據需要編輯它),但不包括密碼(因爲這通常只是未完成)。

做一點谷歌搜索PHP正則表達式的(有大量的教程和網站在那裏,以幫助您瞭解更多)。

還可以看看MD5和SHA-1哈希系統,在將密碼存儲到數據庫中時應該始終使用這種系統 - 否則,就像索尼一樣,如果有人危害您的系統,他們可以看到每個人(可能是重用的)密碼,妥協其他網站上的其他帳戶。 (不酷)