2016-02-11 4 views
0

Так что я пытаюсь создать форму, которая позволит людям, которые имеют свое имя, введенное как регистр Name_Lastname. Но ее не работает, им с помощью 2 поля ввода для именипроверка правильности имени

Имя: Фамилия:

, а затем я использую Sprintf смешивать эти два в Name_Lastname, и это работает прекрасно, но потом, когда я хочу, чтобы проверить, введенное имя имеет недопустимые функции проверки символов, не работает, даже если мое имя правильно, это показывает, что это не так.

Функция должна запретить регистрации, если пользователь не имеет ничего, кроме первого из имени и фамилии капитала, и _, пример: Joan_Mackey = Valid

joan_Mackey = invalid 
joan0_Mackey = invalid 
Joan92_Mackey = invalid 

но не работает, вот код

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

     $name = clear($_POST['firstname']); 
     $lastname = clear($_POST['lastname']); 

     $createdname = sprintf("%s_%s", $name, $lastname); 

     $ime = mysqli_real_escape_string($con, $createdname); 

     $email = clear($_POST['email']); 
     $pass = clear($_POST['password']); 
     $cpass = clear($_POST['confpassword']); 


     // Proveravanje ako ima _ i tih sranja 
     $query = "SELECT * FROM Igraci WHERE Ime = '$ime'"; 
     $stmt = mysqli_prepare($con, $query) or die(mysqli_error($con)); 
     mysqli_stmt_bind_param($stmt, "s", $ime); 
     mysqli_stmt_execute($stmt); 
     $result = mysqli_stmt_get_result($stmt); 
     $row = mysqli_fetch_array($result); 

     if(preg_match("([A-Z]{1,1})[a-z]{2,9}+_([A-Z]{1,1})[a-z]{2,9}", $createdname)) 
     { 
      if($row) // Ime nije registrovano kod dole 
      { 
       echo "Uneseno ime: '$ime' "; 
      } 
      else // Ime je vec registrovano, kod dole 
      { 
       echo "Uneseno ime: '$ime' "; 
      } 
     } 
     else 
     { 
      echo "format imena nije validan."; 
      exit(); 
     } 
    } 
+1

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

+2

[Программисты Falsenesss Believe About Names] (http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/) –

+0

Каков другой способ избежать значений? я знаю только для реального побега – Nathaniel

ответ

0

Просто измените

if(preg_match("([A-Z]{1,1})[a-z]{2,9}+_([A-Z]{1,1})[a-z]{2,9}", $createdname)) 

в

if(preg_match("^[A-Z][a-z]{2,9}_[A-Z][a-z]{2,9}$", $createdname)) 

Это позволит создавать имена пользователей, используя имя от 3 до 9 символов и последнее имя от 3 до 9 символов с соответствующей капитализацией.

Объяснение:

^ = Start at beginning of string 
[A-Z] = One capital letter 
[a-z]{2,9} = two to nine small letters 
_ = one underscore 
[A-Z] = One capital letter 
[a-z]{2,9} = two to nine small letters 
$ = Match must go up to end of string 
+0

да, именно я хочу сказать. –

+0

Нет, не работает, я правильно ввожу имя, но все еще показываю, что его не правильно http://i.imgur.com/aG9u4U8.jpg – Nathaniel

+0

EDIT: Думаю, я получил его сейчас, пожалуйста, проверьте, можете ли вы для меня: 'code' if (preg_match ("/^ ([AZ] {1,1}) [az] {2,9} + _ ([AZ] {1,1}) [az] {2,9} $/", $ createdname)) – Nathaniel

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