2013-07-29 3 views
0

사용자 계정을 확인하는 데 문제가 있습니다. 데이터를 삽입 한 다음 확인 링크를 보내면 전자 메일에서 클릭 할 때 '활성'행이 0에서 1로 업데이트되지 않습니다.이 모든 것이 밤새 엉망이되어서 간단 할 수도 있지만 어느 누구라도 도움을 줄 수 있다면 크게 감사하겠습니다.이메일 확인 확인

또한 누구든지이 주사 증거를 만들기위한 조언을 제공 할 수 있다면 매우 행복 할 것입니다. 감사! 1

<?php 

require ('classes/class.db.php'); 
require ('classes/class.pass.php'); 


try { 

if(isset($_GET['email']) && !empty($_GET['email']) AND isset($_GET['email_hash']) && !empty($_GET['email_hash'])){ 
    // Verify data 
    $search = "SELECT email, email_hash, active FROM users WHERE email='".$email."' AND hash='".$email_hash."' AND active='0'"; 
    $match = $db->num_rows($query); 

    if($match > 0){ 

    $stmt = $db->prepare('UPDATE users (active) VALUES (:active) WHERE active = 0'); 
    $status = $stmt->execute(array(
    ':active' => 1)); 

     if($status) 
     { 
      echo '<p>Your account has been activated, you can now login</p>'; 
     } 
    } 

}else{ 
    echo '<p>Your account is already activated</p>'; 
} 


} catch (PDOException $e) { 
     die($e->getMessage()); 
    } 

?> 

UPDATE 번호는 AKAM 제안하지만 여전히 몇 가지 오류를 얻고 무엇을 시도했다. 여기 내 진술에 대한 것입니다. 문제는 에코 또는 변수에 저장 될 수없는 $_GET['email_hash']처럼

$stmt = $db->prepare("UPDATE users SET active ='1' where active = '0' and email=:email AND email_hash=:email_hash"); 
$status = $stmt->execute(array(
':email' => $_GET['email'], 
':email_hash' => $_GET['email_hash'] 
)); 

UPDATE # 2

보인다. 그것은 signup.php 페이지에서 무작위 해시 문자열을 취하지 않고 verify.php 페이지로 가져 오지 만 이메일 주소는 완벽하게 전달됩니다. 나는 약간 혼란스럽고 누군가를 위해 나를 위해 이것을 분명히하기를 좋아할 것입니다. 감사.

UPDATE # 3

문제 $_GET['hash']$_GET['email_hash'] 돌리기 만했다. 다시 한 번 감사드립니다!

+0

모든 사용자 계정을 업데이트 하시겠습니까? –

+0

아니요, 이메일의 사용자 만 일치합니다. – Devereaux

+0

if ($ status) ..'else {echo $ db-> errorInfo()}' –

답변

1

할 수도하는 모든 일 개의 요청에 의한, 첫 번째 질의 할 필요 업데이트에서 동일한 조건 작성하는 경우 :

"UPDATE users SET active ='1' where active = '0' and email=:email AND hash=:email" 
+0

시도해도 여전히 작동하지 않습니다. – Devereaux

+1

위의 업데이트 # 1을 참조하십시오 – Devereaux

0

귀하의 UPDATE 쿼리가 syntax error이 포함되어 있습니다.

$stmt = $db->prepare('UPDATE users SET active=:active WHERE active=0 AND email=:email AND email_hash=:email_hash'); 

에 쿼리를 변경해보십시오 그리고 문 실행 중에 연관 배열에 $email$email_hash을 포함한다.

마찬가지로 보조 메모로 isset($var) && !empty($var)을 호출하면 !empty($var)으로 작성하면 roughly equivalent이됩니다.

empty($var) 

!isset($var) || $var == false, 

합동 때문에, 문서에 따라 경찰은 !empty($var)isset($var) && $var != false 합동 것을 다음과 같습니다.

+0

쿼리에 변수를 추가하는 유일한 방법 인 준비된 문에 익숙해주십시오. –

+0

@YourCommonSense 제 오류에 대한 경고를 주셔서 감사합니다! – jreut