2015-01-04 2 views
-2

w3schools.com에서 이름을 확인하기 위해 코드를 빌리고 있습니다. 불행히도, 정규식은 문자와 공백만을 허용합니다. O'Shaughnessy와 같은 이름으로 오류 메시지가 나타나지 않도록이 코드를 어떻게 수정할 수 있습니까? 또한, 내 일반적인 코드의 또 다른 부분은 의도하지 않은 백 슬래시를 사용하여 MySQL에 사용자 입력을 표시하는 것입니다. 나는 SQL injection 공격을 막기 위해 mysqli_real_escape_string을 사용했으며, 왜 이것이 백 슬래시가 데이터에 나타나는지에 대한 이유라고 생각한다. 어떻게 제거합니까?PHP에서 아일랜드어 성을 확인하는 방법

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    if (empty($_POST["name"])) { 
     $nameErr = "Name is required"; 
    } else { 
     $name = test_input($_POST["name"]); 
     // check if name only contains letters and whitespace 
     if (!preg_match("/^[a-zA-Z ]*$/",$name)) { 
      $name = ""; 
      $nameErr = "Only letters and white space allowed"; 
     } 
    } 
} 
+2

유효성 검사는 방법을 의미합니까 ?? 당신은 –

+9

A 읽어야합니다 : [** Falsehoods Programmers는 이름에 대해 믿는다 **] (http://www.kalzumeus.com/2010/06/17/falsehood-programmers-believe-about-names/) – HamZa

+1

이것은 isn ' 귀하의 질문에 대한 답변은 정말로 없지만 나는 사람의 이름에 대한 최소한의 검증을 권고합니다. 열정적 인 정규 표현식을 통해 해결할 수있는 것보다 많은 문제가 발생합니다. 기회는 당신의 정규식은 항상 누군가의 이름을 제외 할 것입니다. –

답변

1

SQL 주입을 방지하는 가장 좋은 방법은 완전히 mysqli_real_escape_string 도랑 대신 준비된 문을 사용하는 것입니다. 이렇게하면 이후에 표시 할 때까지 문자열 정리에 대해 걱정할 필요가 없습니다. 준비된 문은 mysqliPDO과 함께 사용할 수 있으며 본질적으로 쿼리와 데이터를 별도로 보내는 것을 의미합니다. 이는 사용자가 조회를 변경할 수 없음을의 L합니다.

이름은; 먼저 정말로 유효성을 검사하고 싶은지 생각해보십시오. 거기에 몇 가지 이상한 이름이 있고 그 유효성을 확인하는 것은 대부분의 시간에 정말 유용하지 않습니다. 그래도 그것이 당신이 가고 싶어하는 방식이라면, 당신이해야 할 일은 당신의 정규 표현식에 '포함되어 있는지 확인하는 것입니다. 이처럼 :

원본 :

/^[a-zA-Z ]*$/ 

편집 : 그것 뿐이다

/^[a-zA-Z' ]*$/ 

. 하나의 작은 추가 그리고 당신은 황금. 그리고 당신은 그들의 이름에 움라우트가있는 사람들을 괴롭게 할 것입니다. 또는 숫자.

관련 문제