2013-11-26 9 views
0

Im, выполняющий функцию, которая проверяет, содержит ли определенное имя пользователя в процессе регистрации определенные символы, которые я не хочу, чтобы пользователи имели свое имя пользователя. И это повторяет пользователю, какие символы они могут использовать.Почему strpos здесь не работает?

public function checkUsername($username){  
    if(!empty($username)){ 
     $exceptions= "[email protected]~`#$%^&*()+=/\,;:[]{ }|?,<>" 
this is line 26 from the error ->if(strpos($username, $exceptions) !=== false){ 
     //here it means that something was found 
      echo "Cannot contain special characters except - and _ ."; 
      return false; 
     }//since it returns false, nothing after this gets executed. 
    if(strlen($username) < 6){ 
     echo "Username must be at least 6 characters long to register."; 
     return false; 
    } 
    $stmt = $this->db->prepare("SELECT username FROM users WHERE BINARY username = ? "); 
    $stmt->bindParam(1,$username); 
    $stmt->execute(); 
    if($stmt->rowCount() == 1){ 
     echo "Sorry username already exists";  
     return false; 
    } else{ 
     return true; 
     } 
    } 
}//end of checkUsername 

Это дает мне ошибку синтаксического разбора: ошибка синтаксиса, неожиданный T_IF на линии 26.

+2

Обычно такие ошибки случаются на одной строке выше, а не на самом номере линии. Кажется, у вас нет двоеточия в '$ exceptions ="! @ ~ '# $%^& *() + =/\,;: [] {} |?, <>" –

ответ

1

Обычно такие ошибки случаются с одной строкой выше, а не с самим номером строки.

Кажется, вы не закрывающая запятой в

$exceptions= "[email protected]~`#$%^&*()+=/\,;:[]{ }|?,<>" 

Замените его

$exceptions= "[email protected]~`#$%^&*()+=/\,;:[]{ }|?,<>"; 
0

довольно много вещей, сломаны здесь.

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

Во-вторых, ваш компаратор должен быть! == false, not! === false, но с помощью preg_match вам это не понадобится.

Смежные вопросы