2013-11-24 1 views
1

중복에 대한 사용자 이름 열을 확인하려고하는데 하나가 발견되면 "사용자 이름이 사용되었습니다"라는 메시지가 표시됩니다. "username is ok"라는 사용자 이름이 입력되는 것과 상관없이 항상 ...이 문제의 원인은 무엇이며 어떻게 변경할 수 있습니까?PHP의 중복에 대한 테이블의 mysql 열을 확인

$username = preg_replace('#[^a-z0-9]#i', '', $_POST['usernamecheck']); 
$sql = "SELECT * FROM riders WHERE username='$username' LIMIT 1"; 
$query = mysqli_query($connect, $sql); 
$uname_check = mysqli_num_rows($query); 
if ($uname_check == 0) { 
    echo '<strong style="color:#009900;">' . $username . ' is OK</strong>'; 
    exit(); 
} else { 
    echo '<strong style="color:#F00;">' . $username . ' is taken</strong>'; 
    exit(); 
} 
+0

을 echo $ sql;'당신이 쿼리를 실행하기 바로 전에? –

+0

this : SELECT * 라이더에서 username = 'test'LIMIT 1 – willi

+0

'var_dump (mysqli_num_rows ($ uname_check)) '의 결과를 보여주십시오. 내 생각 엔 귀하의 질문에 뭔가 잘못되었다는 것입니다. –

답변

0

:

$query = mysql_query($sql, $connect); 

대신`무엇을

$query = mysql_query($connect, $sql); 
+0

그래서'mysql_ *'API에 연결하고 나머지 함수를 mysqli_ *로 사용했기 때문에이 코드는이 코드를 잡을 수 없었습니다. 왜냐하면 내 코드에서 연결 부분을 주석으로 만들었 기 때문입니다. 우리와 함께하지 마십시오. –

0

변경 논리 :

$query = mysqli_query($connect, $sql) or die(mysqli_error($connect)); 

if ($query){ 
    if($uname_check > 0) { 
    { 
     echo '<strong style="color:#F00;">' . $username . ' is taken</strong>'; 
     exit(); 
    } else { 
     echo '<strong style="color:#009900;">' . $username . ' is OK</strong>'; 
    } 
} 
else 
{ 
    echo 'An error occured while querying the new username'; 
} 

그리고 우리는 당신의 SQL 쿼리가 좋은 경우 이해 할 수있을 것입니다.

+0

$ query가 유효하면 true를 반환하고 그렇지 않으면 false를 반환합니다. – zkanoca

+0

거짓, 무엇 지금? – willi

+0

@ user2953987 귀하의 질의는 해고되지 않을 것입니다. SQL 문 – zkanoca

0

우선 SQL 요청 전에 값을 확인하기 전에 echo $username을 시도하십시오.

두 번째로 중복 작성을 방지하므로 유용하지 않으므로 LIMIT 1을 제거하십시오. 그러면 어쨌든 0 또는 1이됩니다.

셋째,이 하나를 시도해보십시오 : $username=preg_replace("#[^a-z0-9\.]#i", null, $_POST['usernamecheck']);

+0

확인 또한 이름 필드의 이름이'usernamecheck'인지 확인하십시오. –

4

하자 디버그 그것은 올바른 방법은. 코드가 작동하지 않을 때 디버그 it; 짐작 만하는 것이 아닙니다. 그리고 PHP에서 MySQL 이슈를 디버그하려면 해당 함수로 어떤 값이 returned인지 살펴 봐야합니까? 최선의 시나리오만을 기대하지는 않습니다. 컴퓨터 과학은 대부분의 일에 대해 꽤 정확합니다.

1 단계 :

// $connect = mysqli_connect("localhost", "my_user", "my_password", "world"); 

    if (mysqli_connect_errno()) { 
     printf("Connect failed: %s\n", mysqli_connect_error()); 
     exit(); 
    } 

2 단계 :

$username=mysqli_real_escape_string($connect,$username); 
    $sql = "SELECT 1 FROM riders WHERE username='$username' LIMIT 1"; 
    if ($result=mysqli_query($connect, $sql)) { 
    $uname_check=mysqli_num_rows($result); 
    } 
    else 
    { 
    printf("Error message: %s\n", mysqli_error($connect)); 
    } 

3 단계 :

echo intval($uname_check); 

당신이, 당신은 것입니다 여기에 도달하는 시간으로 정확히 무엇이 잘못되었는지 알아라.

그 후에 당신은 계속 할 수 있습니다 난 그냥 아무 대답이 도와 것 같았다 나 자신을 발견 if

if ($uname_check == 0) 
{ 
    echo '<strong style="color:#009900;">' . $username . ' is OK</strong>'; 
} 
else 
{ 
    echo '<strong style="color:#F00;">' . $username . ' is taken</strong>'; 
} 
exit(); 
+0

'SELECT *'는 실제로 필요하지 않습니다. 'SELECT 1'로 충분합니다. – Kermit

+0

감사의 말 Prince, updated –

+0

+1; 또한 컴퓨터 과학은 주로 "IT에 의존"합니다.) – Kermit

관련 문제