이 스크립트는 특수 문자가 있는지 여부를 확인하고,있는 경우 preg match의 "Invalid"기능을 호출하고, 그렇지 않으면 사용자 이름을 사용할 수 있다고 표시합니다. 여기서 일어나는 일은 # @ % ^ &와 같은 특수 문자를 쓸 때마다 유효하지 않다고 말하는 대신 사용자 이름이 여전히 사용 가능하다는 메시지가 표시되며 작동하는 방식이 아닙니다. PHP 코드에서 오류를 확인했는데 깨끗한 것 같습니다. 나는 포럼의 모든 것을 시도하고 실행했지만 해결책을 찾지 못했습니다. 귀하의 기여는 대단히 감사하겠습니다!
if(isset($_POST['login'])) {
$login = mysql_real_escape_string($_POST['login']);
if(!empty($login)) {
$login_query = mysql_query("SELECT COUNT(`id`) FROM `account` WHERE `login` = '$login'");
$login_result = mysql_result($login_query,0);
if($login_result == 0) {
echo 'yes';
} else {
echo 'no';
}
}
}
if ( preg_match("/^[a-zA-Z0-9[:space:]]+$/" , $login) ) {
echo 'noinput';
}
추신 : 나는 인터넷에서 코드를 훔쳐서 다른 사람들이 그를 위해 일하도록 노력하는 아이가 아닙니다.이 스크립트의 70 % 정도를 작성했으며 내가 특수 문자를 제외하고는 꽤 잘 작동합니다. m 너무 붙어. 당신이 나를 도울 수 있기를 바랍니다. 감사합니다!
당신의 문제가 무엇인지 확실하지 않습니다. 다음 프로그램을 작성했습니다.
<?php
$input="good string";
$input2="bad@string";
if (preg_match("/^[a-zA-Z0-9[:space:]]+$/",$input2)) {
echo $input2." matches\n";
}
else {
echo $input2." does not match\n";
}
if (preg_match("/^[a-zA-Z0-9[:space:]]+$/",$input)) {
echo $input." matches\n";
}
else {
echo $input." does not match\n";
}
그리고 $input
일치 하는 것을 올바르게 표시 하지만 $input2
그렇지 않습니다.
입력 한 내용이 확실합니까? 캐리지 리턴이있을 수 있습니까?
업데이트 나는 단순히 PHP 스크립트의 반환 값을 잘못 해석 한 경우라고 생각합니다. 옵션을 살펴 보겠습니다.
1) 유효한 사용자 이름, 사용 가능 :
쿼리가 비어 있고 "yes"문자열을 인쇄합니다. 는 preg_match
일치와 "noinput"인쇄물을 찾습니다.
2) 유효한 사용자 이름, 사용할 수 없음 :
쿼리가 무언가를 반환하고 "no"문자열을 인쇄합니다. preg_match
"noinput"을 인쇄합니다.
3) 유효하지 않은 사용자 이름, 사용 가능 :
쿼리가 비어 있습니다. 인쇄 문자열 "yes". 은 preg_match
아무것도 출력하지 않습니다.
4) 유효하지 않은 사용자 이름, 사용할 수 없음 :
쿼리가 무언가를 반환하고 문자열 "no"를 인쇄합니다. preg_match
아무것도 인쇄하지 않습니다.
이것이 반환 값을 해석하는 방법이 아니라면 문제입니다.
두 번째 업데이트
방금 링크의 소스 코드를 살펴 보았는데 이것이 실제로 문제입니다. 여러 다른 응답을 테스트하는 것 같습니다.
if(data=='no') {
// do stuff
} else {
// something else
});
}
if(data=='noinput') {
// more stuff
});
}
if(data=='invalid') {
// yet more stuff
});
즉, 문자열을 확인합니다 'yes', 'no', 'noinput'
. 그러나 코드가 구조화되고 실행되는 방식은 생성하는 출력이 아닙니다. 위의 네 가지 경우를 참조하십시오.
해결책
잘못된 입력에 대한 검사를 코드의 앞부분으로 옮겨야합니다. 일치하지 않는 사용자 이름을 찾은 후 즉시 돌아와야합니다. 다음이 작동 할 것이라고 생각합니다.
if(isset($_POST['login'])) {
$login = mysql_real_escape_string($_POST['login']);
if ( preg_match("/^[a-zA-Z0-9[:space:]]+$/" , $login) )
{
$login_query = mysql_query("SELECT COUNT(`id`) FROM `account` WHERE `login` = '$login'");
$login_result = mysql_result($login_query,0);
if($login_result == 0)
{
echo 'yes';
}
else
{
echo 'no';
}
}
else
{
echo('noinput');
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다