2013-08-24 2 views
0

안녕하세요 여러분, 12 시간 연속으로 일하고 있습니다. 수정 사항을 찾을 수없는 것 같습니다. 예 : $username == $result에 대한 사용자 입력을 데이터베이스 결과와 비교하려고합니다. "사용자 이름을 aldready로 받아 들였지만 문제는 중단없이 2 개의 명령문을 통과한다는 것이고 루프를 종료하기 위해 휴식 시간을두면 문제가 항상 확인됩니다. 현장에서 이메일을 입력하지 않는에도 불구하고 $email == $result2에 대한 MySQLi, 또는 PDO 중 MySQL에서PHP mysql 버그 쿼리

if (isset($_POST['username']) or isset($_POST['email'])) { 
    $extract = mysql_query(" 
     SELECT 
      `username`, `email` 
     FROM `users` 
     WHERE `username`='$username' OR `email`='$email' 
    "); 

    $resultq = mysql_num_rows($extract); 
    while ($row = mysql_fetch_array($extract)) { 

     $result = $row['username']; 
     $result2 = $row['email']; 

     echo " " . $result; 
     echo " " . $result2; 

     if ($username == $result) { 
      echo " Username is already Taken!"; 
      // break; //whenever i put break, it always gives me the else if statement echo, despite not entering any email in the field 
     } //$pass = $_POST['pass']; 
     else if ($email == $result2) { 
      echo "Email Address is already used!"; 
      // break; 
     } else { 
     } 
    } 
} 
+0

[mysql phpmyadmin 사용자 입력 COMPARE 데이터베이스] (http://stackoverflow.com/questions/18407734/mysql-phpmyadmin-user-input-compare-database)와 다른 점을 설명해주세요. 이것에 대한 내 솔루션의 ... –

+0

귀하의 스크립트는 SQL 주입에 취약합니다. – Gumbo

답변

2

업그레이드 그러나

,.. 당신의 INI에 대한 답변

$extract= mysql_query("SELECT username, email FROM users where username='$username' or email='$email'"); 

$resultq = mysql_num_rows($extract); 
    if($resultq > 0) { 
     echo 'Either your username, or email is already taken!'; 
     return; 
    } 
0

참조 sniko 문제. 그러나 다음 ...

당신은 정의하지 않는 $ 사용자 이름을 참조하거나 $ 이메일

if ($username == $result)

if ($_POST['username'] == $result) 

해야하거나의 시작 부분에 $ 사용자 이름과 $ 이메일을 정의 할 수 있습니다 가정 어구.

또한이 설정을 변경해야합니다 이것에

isset($_POST['username']) or isset($_POST['email']) 

을 :

isset($_POST['username']) && isset($_POST['email']) 

당신이 당신의 쿼리 모두에 의존하기 때문이다.

그리고 sniko가 말한 것처럼 mysqli 또는 PDO로 전환합니다. mysql_은 더 이상 사용되지 않습니다.

전체 샘플 :

if(isset($_POST['username']) && isset($_POST['email'])) 
{ 
    $username = $_POST['username']; 
    $email = $_POST['email']; 

    $extract= mysql_query("SELECT username, email FROM users where username='$username' or email='$email'"); 

    $resultq = mysql_num_rows($extract); 
    if($resultq > 0) { 
     echo 'Either your username, or email is already taken!'; 
     return; 
    } 

} 

는 또한 입력을 살균하지 않은주의. 이 입력으로 해킹 당할 수 있습니다. mysqli 또는 pdo로 전환하고 준비된 문장을 사용하면 도움이 될 것입니다.

+0

if 문 앞에이 코드가 있습니까? $ email = $ _POST [ 'email']; $ username = $ _POST [ 'username']; – Daryl

+0

네, 할당이 진행되는 동안 꽤 많이 똑같습니다.하지만 여전히 두 쿼리를 모두 호출하므로 두 쿼리로 구분하거나 두 필드를 모두 사용해야합니다. –

+0

나는 미쳐 가고 있습니다. 어떻게 웹 사이트를 만들 수 있을지 생각하고 있습니다. 결정 중 하나를 이메일 또는 사용자 이름 또는 둘 다 사용되는 ... 그것은 이것에 대한 해결책을 가지고 불가능한 것 같아요,하지만 난 대답을 찾을 수 없습니다 : (나는 이걸로 내가 참을 수가 없어 – Daryl