2013-01-03 5 views
0

그래서 나는해야 할 일을하려고 노력하고 있고 아마도 매우 간단한 평범한 작업입니다. 내 DB에서 이메일 주소를 확인하려고합니다. 나는 옳은 선로에서 메신저를 안다면, 어떤 사람이 제발 머리를 꺾어 줄 수 있는지 모르십니까?mysql db의 이메일 주소를 확인하십시오

$query = "SELECT * FROM 68_users WHERE email= $email"; 
if($result = mysqli_query($link, $query) == $email) { 
    echo 'Email has been registered'; 
}else{ 
    $query = "INSERT INTO 68_users (email,pass,old_pass,first_name,last_name,dob,gender,phone,fanmail) 
      VALUES ('$email',AES_ENCRYPT('$pass', 'something'),AES_ENCRYPT('$pass', 'something'),'$first_name','$last_name','$dob','$gender','$phone','$fanmail')" 
      or die(mysqli_error()); 
    if (!mysqli_query($link, $query)) { 
     echo 'error: '.mysqli_error($link); 
     exit(); 
    } 
} 
mysqli_close($link); 
} 

귀하의 도움에 감사드립니다. php에 대한 디버깅 상황을 파악해야합니다. 지금 나는 내 사이트에 일식 및 디버그 쓰기, 매우 악화는 ...이 내가 사용하는 것입니다 :

$query = "SELECT * FROM 68_users WHERE email= '$email'"; 
$result = mysqli_query($link, $query); 
if($result->num_rows > 0) { 
    echo 'This email has previously been registered'; 
}else{ 
    $query = "INSERT INTO 68_users (email,pass,old_pass,first_name,last_name,dob,gender,phone,fanmail) 
    VALUES ('$email',AES_ENCRYPT('$pass', 'something'),AES_ENCRYPT('$pass', 'something'),'$first_name','$last_name','$dob','$gender','$phone','$fanmail')" 
    or die(mysqli_error()); 
    if (!mysqli_query($link, $query)) { 
     echo 'error: '.mysqli_error($link); 
     exit(); 
    } 
    header('Location: http://www.example.com/html/thankyou.html') ; 
} 
+3

실행하면 어떻게됩니까? –

+2

'WHERE email = $ email'는 최소한 WHERE email = '$ email'' 일 필요가 있습니다. 암호를 되돌릴 수 있기 때문에'AES_ENCRYPT'를 사용하면 안됩니다. SQL 주입에 취약하다고 생각합니다. – ceejayoz

+0

여기에 준비된 문장을 사용하면 삶이 훨씬 쉬워 질 것입니다. – ethrbunny

답변

2

전자 메일 변수 주위에 아포스트로피가 필요하므로이 쿼리는 실패합니다. 또한 단순히 쿼리를 실행하여 반환되는 행 수를 확인할 수 있습니다.

$query = "SELECT * FROM 68_users WHERE email= '$email'"; 
$result = mysqli_query($link, $query); 
if($result->num_rows > 0) { 
    echo 'Email has been registered'; 
}else{ 
// .... 
} 
1

당신은 변수 $email 주위 quotes 필요

$query = "SELECT * FROM 68_users WHERE email= '$email'"; 

당신은 볼 필요가있을 것이다 코드 나머지의 결과, 다른 모든 것이 잘 작동 하는지를 알 수 있습니다. 현재 코드의 결과를 모른 채

1

, 나는 발견 할 수있는 하나의 문제는 당신이 제대로 평가 될 수 있도록 쿼리 문에 대한 단일 따옴표로 이메일 값을 둘러싸 있는지 확인하려면 것입니다 :

$query = "SELECT * FROM 68_users WHERE email='$email'"; 

따옴표를 생략하면 쿼리가 실행될 때 오류가 발생하며, 자세한 처리 방법에 따라 눈에 잘 띄지 않을 수도 있습니다. 또 다른 요점으로, 이것은 기본적인 디버깅이 시작되는 곳이며 모든 프로그래머에게 기본입니다.

귀하의 이메일에 대한 동일성 검사를 제거하십시오. 귀하의 질의 문이 이미 귀하를 대신하고 있습니다. 어떤 행이 반환되지 않습니다 경우는 false를 반환하고 다른 문 트리거 : 당신의 "만약 ($ 결과를

$query = "SELECT * FROM 68_users WHERE email='$email'"; 
if($result = mysqli_query($link, $query)) { 
    // Registered 
}else{ 
    // Not Registered 
} 
0
$query = "SELECT * FROM 68_users WHERE email= '$email'"; 

는 값의 배열을 반환됩니다 ... == $ 이메일) "이 실패합니다.

* var_dump ($ result) *는 쿼리에서 되돌아 오는 것을 확인합니다.

관련 문제