2014-06-15 2 views
0

누군가이 패턴이 영숫자로 인식되는 이유를 나에게 설명 할 수 있습니까? 이 링크 enter link description herepreg_match가있는 영숫자 패턴의 PHP

에서 이미지를 참조하십시오 13 \ 13 \ 13 \ 13 \ 13 \ 13 \ 13 \ 13,234,234 \ 3

13 \ 내가 코드를 작성

\ 단지 당신이 그것을 보여 숫자로 인식되고

편집 15.06.214는 21시 40분

나는 내가 잊었 미안 해요 몇 가지 정보를 추가 할 수 있습니다.

표시되는 변수는 입력 양식에서 가져옵니다. 정보를 깨끗하게 정리하고 데이터베이스에 삽입 할 준비를하기 위해 사용한 코드입니다.

추신 : 당신의 정보는 변수 $ errform 나중에 사용되는 페이지

<?php 
    $username = $password = $fname = $lname = $mail = $id_dept = ""; 
    $usernameERR = $passwordERR = $fnameERR = $lnameERR = $id_deptERR = ""; 
    $errform = 2; 
?> 
<?php 
    if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    $username = clean_data($_POST["username"]); 
    $password = clean_data($_POST["password"]); 
    $fname = clean_data($_POST["fname"]); 
    $lname = clean_data($_POST["lname"]); 
    $mail = clean_data($_POST["mail"]); 
    $id_dept = clean_data($_POST["id_dept"]); 
    if (!preg_match("/^[a-zA-Z0-9]*$/", $username)) { 
     $usernameERR = "Only letters and numbers allowed"; 
     } 
    if (!preg_match("/^[a-zA-Z0-9]*$/", $password)) { 
     $passwordERR = "Only letters and numbers allowed"; 
     } 
    if (!preg_match("/^[a-zA-Z ]*$/", $fname)) { 
     $fnameERR = "Only letters and white space allowed"; 
     } 
    if (!preg_match("/^[a-zA-Z ]*$/", $lname)) { 
     $lnameERR = "Only letters and white space allowed"; 
     } 
    } 
    function clean_data($data) { 
    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data); 
    return $data; 
    } 
    if (isset($_POST['submit'])) { 
    if ((!preg_match("/^[a-zA-Z0-9]*$/", $username)) 
    || (!preg_match("/^[a-zA-Z0-9]*$/", $password)) 
    || (!preg_match("/^[a-zA-Z ]*$/", $fname)) 
    || (!preg_match("/^[a-zA-Z ]*$/", $lname))) { 
     $errform = 1; 
    } else { 
     $errform = 0; 
     $con = mysqli_connect($hostdb,$userdb,$passwdb,$dbTEST); 
     if (mysqli_connect_errno()) { 
     echo "Impossibile connettersi a MySQL: " . mysqli_connect_error(); 
     } 
     $username = mysqli_real_escape_string($con, $_POST['username']); 
     $password = md5(mysqli_real_escape_string($con, $_POST['password'])); 
     $fname = mysqli_real_escape_string($con, $_POST['fname']); 
     $lname = mysqli_real_escape_string($con, $_POST['lname']); 
     $mail = mysqli_real_escape_string($con, $_POST['mail']); 
     $id_dept = mysqli_real_escape_string($con, $_POST['id_dept']); 
     if (!mysqli_query($con, "INSERT INTO user (id_user, username, password, fname, lname, mail, id_dept) VALUES (NULL, '$username', '$password', '$fname', '$lname', '$mail', '$id_dept')")) { 
     die ("Error: " . mysqli_error($con)); 
     } 
     mysqli_close($con); 
    } 
    } 
?> 

편집 15/06/2014 22시 41분

의 "트리거"오류의 메시지에

좋아,

죄송합니다 모두 문제의 원인을 이해했습니다. 내가 확인 된 것은 내 코드에서

(preg_match("/^[a-zA-Z0-9]*$/", $username)) 

, $ 이름이 치료

$username = clean_data($_POST["username"]); 
    if (!preg_match("/^[a-zA-Z0-9]*$/", $username)) { 
     $usernameERR = "Only letters and numbers allowed"; 
     } 

있어

어디

function clean_data($data) { 
    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data); 
    return $data; 
    } 

그래서 난 을 게시 할 때 \ Q \ Q \ q \ q \ q \ q \ q \ q \ q 이것은 제거되어 qq가됩니다. qqqqqqq

그러나 두 가지 문제점이 있습니다. 첫 번째 문제는 내가이

echo "post username: " . $_POST["username"]; 

반향이

echo "preg username " . preg_match("/^[a-zA-Z0-9]*$/", $username); 

과 비교 한 것이 었습니다 그리고 마지막 하나 얻었 기 때문에 $ _POST는 [ "이름"] $ 사용자 이름에 ==되지 않는 것이 분명 년대 clead_data 함수의 처리, POST는 수행하지 않습니다.

그래서 내가 preg_match를 할 때 나는 $ _POST [ 'username'] = \ q \ q \ q \ q \ q \ q 인 동안 $ username = qqqqqqqqqqq (영숫자) Q \ Q \ Q \ Q \ Q Q \

두 번째 문제는 I가에 따라서이

$username = mysqli_real_escape_string($con, $username); 

을 전송해야하는 동안 데이터베이스이

$username = mysqli_real_escape_string($con, $_POST['username']); 

에 보내는 것을이었다 데이터베이스가 비 클리닝 된 데이터에 도착했습니다.당신은 AZ 또는 az 또는 0-9 문자를 포함하고이 문자열 경우 (13)를 포함 ...이 정규식에 허용되는 문자는 것을 허용 beacause를

+0

관련 코드 및 출력을 포함하도록 질문을 편집하고 상황을 더 잘 설명하십시오. 지금은 스크린 샷으로도 명확하지 않으며 스크린 샷을 사용하여 이와 같은 정보를 덤프하는 것은 어쨌든 눈살을 찌푸리게됩니다. – Jon

답변

1

. (/^[a-zA-Z0-9]+&/)

당신은 수행하여 해결할 수 있습니다 패턴 :

이름 :

/^[a-zA-Z]+[0-9_]*?[a-zA-Z]*?&/

이름 :

/^[a-zA-Z]+[ ]*?[a-zA-Z]&/

0

역 슬래시는 리터럴 백 슬래시로 표시되지 않으므로 무시되지만 다음 문자를 이스케이프 처리하는 백 슬래시와 비슷합니다. 이스케이프 된 문자는 PHP 문자열에 특별한 의미가 없기 때문에 백 슬래시는 무시됩니다. 예상 된 동작을 얻으려면 테스트를 수행하기 전에 addslashes을 사용할 수 있습니다.

관련 문제