2017-03-21 7 views
1

내 웹 사이트에 계정을 등록하는 동안 전자 메일이 데이터베이스에 이미 있는지, PHP를 사용하여 MySQLi 데이터베이스와 상호 작용하는지 . 나는 내가 여기에서 발견 할 수 있었던만큼 많은 가이드를 사용하려고 노력했다. 그러나 아직도 운이 없다.PHP를 사용하여 MySQLi 데이터베이스에 전자 메일이 있는지 확인

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
     $database = new mysqli("localhost", "user", "dbpw", "dbname"); 
if($database->connect_error){ 
      die("Error connecting:" . $database->connect_error); 
     } 

$email = $database->real_escape_string(htmlspecialchars($_POST["email"])); 
$query = "SELECT email FROM Users WHERE email =$email"; 
$result = $database->query($query); 
$numOfRows = $database->num_rows($result); 
if($numOfRows > 0){ 
    echo "Email already exists in our database."; 
}else{ 
$query = "INSERT INTO Users (email) VALUES ('" . $email . "'); 
if(!$database->query($query)){echo("<p>Unable to add user for query: " . $query . " <br /> Error: " . $database->errno . " " . $database->error);}} 

전에 이메일 확인합니다 (경우 ($ numOfRows) 문)을 삽입하기, 내 데이터베이스가 존재했다 : 아래

내가 원래 등록에 내 데이터베이스에 사용자의 이메일을 삽입 쓴 코드 제대로 업데이트되었습니다.

그러나 시도한 이메일 확인을 추가하면 페이지가 완전히 파기됩니다. 내 데이터베이스는 고유 한 암호로 업데이트되지 않으며 전자 메일이 중복 된 경우 "전자 메일이 이미 데이터베이스에 있습니다"라는 메시지가 표시되지 않습니다. 페이지가로드되지만 기본 머리글, 바닥 글 및 배경 CSS 만 있으면 모든 페이지에 링크됩니다. 대신

$numOfRows = $database->num_rows($result); 

사용

if($result ->num_rows) 
{ 
} 
+1

선택 쿼리에 오류가 있습니다 : '$ query = "사용자가 보낸 이메일 선택 이메일 = $ 이메일";은'$ query = "이어야합니다 사용자가 보낸 이메일 선택 이메일 ='$ 이메일 '"; 전자 메일 값은 작은 따옴표로 묶어야합니다. 그것은 문자열입니다. 삽입물에 올바른 방법으로 그렇게하십시오 –

+0

** 경고 : ** * mysql injection *에 열려 있습니다! 'prepared statements'을 사용하여 자신을 보호하십시오. – Nytrix

+0

@Nytrix Roger, 조언 해 주셔서 감사합니다. 준비된 문을 사용하기 위해이 파일을 변경하여 내 주요 문제를 해결했습니다. – sono2

답변

1

당신은 이메일 변수 주위에 작은 따옴표를 추가해야합니다. 이 '$ 이메일'처럼. 아래 코드를 확인하십시오.

$query = "SELECT email FROM Users WHERE email = '$email'";

은 당신이 있는지 여부를 확인하기 위해 조건부 문을 편집 할 필요는 0보다 크거나 같고 또는 그냥 조건 블록에서 부울 변수를 사용할 수 있습니다 더.

+0

감사합니다. 나는 당신, @codvlpr과 @Lelio Faieta가 제안하고 일하는 것을 해냈습니다. if ($ result-> num_rows> 0) { ... } – sono2

1

를 사용

+0

그 마지막 부분에 대해 혼란스러워합니다. 0과 같으면 전자 메일이 데이터베이스에없는 것입니다. 맞습니까? 이 경우 나는'else' 문을 따라하고 싶다. – sono2

+0

나는 당신을 혼란시킬 의도가 없었습니다. 0 부분을 무시하십시오. 그건 내 실수 야! – codvlpr