Preg_match путаница - PullRequest
       5

Preg_match путаница

0 голосов
/ 06 сентября 2011

При разработке раздела входа в систему я получил сообщение об ошибке.

Результат всегда показывает ложное утверждение. Что не так с этим кодом

Может ли кто-нибудь провести меня через 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>';
}

}

Ответы [ 3 ]

3 голосов
/ 06 сентября 2011

В вашем валидаторе вы разрешаете вводить только один символ.Поставьте спецификатор длины за закрывающей скобкой, как вы это делали в валидаторе пароля.

Почему вы ограничиваете разрешенные символы в пароле?Пользователь должен иметь возможность использовать любой специальный символ, который он хочет, и вы также не должны ограничивать максимальную длину.

2 голосов
/ 06 сентября 2011

Возможно, вы хотите что-то вроде следующего:

<?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). Если форма отправлена ​​и обнаружена ошибка тестов проверки, форма отображается с сообщениями об ошибках рядом с полями, которые не являются действительными. Он также включает имя пользователя, которое было отправлено (чтобы пользователь мог отредактировать его при необходимости), но не пароль (как это обычно не делается).

Сделайте небольшой поиск в Google по регулярным выражениям PHP (существует множество учебных пособий и сайтов, которые помогут вам узнать больше).

А также посмотрите на системы хеширования MD5 и SHA-1, которые вы всегда должны использовать при хранении паролей в базе данных - в противном случае, например, Sony, если кто-то взломает вашу систему, сможет увидеть пароли всех (возможно, повторно использованных) и, возможно, взлом другие аккаунты на других сайтах. (Не круто.)

2 голосов
/ 06 сентября 2011

% ^ [A-Za-z0-9] \ S {8,20} $%

Средства:

1 из A-Z или a-z или 0-9 От 8 до 20 из \ S

Я сомневаюсь, что ты это имел ввиду?

Возможно, попробуйте \ S в []

...