누군가이 패턴이 영숫자로 인식되는 이유를 나에게 설명 할 수 있습니까? 이 링크 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를
관련 코드 및 출력을 포함하도록 질문을 편집하고 상황을 더 잘 설명하십시오. 지금은 스크린 샷으로도 명확하지 않으며 스크린 샷을 사용하여 이와 같은 정보를 덤프하는 것은 어쨌든 눈살을 찌푸리게됩니다. – Jon