2016-02-11 75 views
0

所以我试图创建一个表单,允许名称像Name_Lastname注册名称输入的人。但它不工作,使用2个输入字段名IM检查名称是否有效

名称: 名字:

,然后我用sprintf混合这两种进Name_Lastname,而伟大的工程,但后来当我想检查一个输入的名字有无效的字符检查功能不起作用,即使我的名字是正确的,它显示它不是。

函数应该禁止,如果用户有任何东西,但第一姓氏和名字资本注册,并_,例如:Joan_Mackey =有效

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

你从货物邪教编程的痛苦。为什么当你在查询中有** NO **占位符时,首先使用参数绑定?如果您使用带有参数绑定的预处理语句,为什么要手动转义这些值? –

+2

[Falsehoods Programmers 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

编辑:我想我现在得到它,请检查,如果你可以为我: (preg_match(“/ ^([AZ] {1,1})[az] {2,9} + _([AZ] {1,1})[az] {2,9} $ /“,$ createdname)) – Nathaniel