2012-08-13 3 views
-1
 try{ 
      $pdo = new PDO("mysql:host=localhost;dbname=name", 'user', 'pass'); 
      $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
      $statement = "SELECT id FROM users WHERE email LIKE ?"; 
      $stmt = $pdo->prepare($statement); 
      $stmt->bindParam(1, htmlspecialchars($this->params['email']), PDO::PARAM_STR); 
      $stmt->setFetchMode(PDO::FETCH_ASSOC); 
      $row = $stmt->fetch(); 

     }catch (PDOException $e) { 
      echo $e; 
     } 

     print_r($row[0]['id']); 

     if(is_int($row[0]) > 0) { 
      throw new Exception(); 
     } elseif(is_int($row[0]) > 0) { 
      //Generating encryption 
      $crypt = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_CBC, ''); 
      $iv = mcrypt_create_iv(32, MCRYPT_RAND); 
      $key = mcrypt_create_iv(32, MCRYPT_RAND); 
      $password = mcrypt_create_iv(12, MCRYPT_RAND); 
      mcrypt_generic_init($crypt, $key, $iv); 
      $crypted = mcrypt_generic($crypt, $password); 


      $activation = mcrypt_create_iv(128, MCRYPT_RAND); 

      mcrypt_generic_deinit($crypt); 




      try{ 
       $pdo = new PDO("mysql:host=localhost;dbname=name", 'user', 'pass'); 
       $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
       $statement = "INSERT INTO users(name, password, cryptokey, cryptovector, email, activation_code, active, usertype) values(?, ?, ?, ?, ?, ?, 0, ?); "; 
       $stmt = $pdo->prepare($statement); 
       $stmt->bindParam(1, mysql_real_escape_string($this->params['name']), PDO::PARAM_STR); 
       $stmt->bindParam(2, $password, PDO::PARAM_STR); 
       $stmt->bindParam(3, $key, PDO::PARAM_STR); 
       $stmt->bindParam(4, $iv, PDO::PARAM_STR); 
       $stmt->bindParam(5, mysql_real_escape_string($this->params['email']), PDO::PARAM_STR); 
       $stmt->bindParam(6, $activation, PDO::PARAM_STR); 
       $stmt->bindParam(7, mysql_real_escape_string($this->params['acctype']), PDO::PARAM_STR); 

       $stmt = null; 

      }catch (PDOException $e) { 
       print_r($e); 
      } 


      $smarty = new Smarty(); 

      $smarty->assign('NAMES',$this->params['name']); 
      $smarty->assign('UNIT', $this->params['acctype']); 
      $smarty->assign('KEYPASS',$password); 
      $smarty->assign('NAMES',$this->params['name']); 
      $smarty->assign('ACTIVATION_LINK','https://localhost/profile.php?action=activate&key='.urlencode($activation).'&email='.urlencode($this->params['email'])); 

      $msgBody = $smarty->fetch('templates/default/mail.html'); 

      try { 
       $mail = new PHPMailer(); 

       $mail->Host = "server"; 
       $mail->SMTPAuth = TRUE; 
       $mail->Host = "server"; 
       $mail->Port = 25; 
       $mail->Username = "email"; 
       $mail->Password = "password"; 

       $mail->AddAddress($this->params['email']); 
       $mail->SetFrom('[email protected]', 'test Services'); 

       $mail->Subject = 'Confirm registration and login credentials.'; 
       $mail->MsgHTML($msgBody); // attachment 
       #$mail->Send(); 

       echo 'localhost/profile.php?action=verify&key='.base64_encode($activation).'&email='.urlencode($this->params['email']); 
      } catch (phpmailerException $e) { 
       #echo $e; //Pretty error messages from PHPMailer 
       print_r($e); 
      } catch (Exception $e) { 
       echo $e; //Boring error messages from anything else! 
       print_r($e); 
      } 


     } 

    } 

그래서 내 인증 방법입니다. __construct ($ arg1, $ arg2); $ arg1은 액션과 $ arg2를 얻고 $ self :: params는 이메일 이름과 암호를 요구하는 변수를 얻습니다. 그것은 테스트 목적을위한 활성화 링크를 출력하고, 그 후에 Array()를 볼 때 활성화 링크를 보여줍니다. isset ($ row)이있는 if 문은 행이 설정되었다는 것을 내 스크립트에 알리는 기능을 수행하지 않습니다. 그리고 print_r 할 때 아무 것도 볼 수 없을 때 ... Array()를 볼 때 에코를 사용합니다. 젠드 서버 CE를 사용합니다. PHP 5.4로 다음과 같이 구조화 된 테이블을 가지고 있습니다 :즉시 마법의 .. PDO 사용

id - 암호 - 암호 - 암호 - 전자 메일 - activation_code - 활성 - 사용자 유형
1 - J.Smith, - pwd, - 키, - 벡터, - 일부 @ 메일, - 활성화 코드 - 0, - 후보자

+0

그리고 그걸 확인하려고하면 "SELECT id .."에 아무것도 잡히지 않아서 거기에 같은 이메일이 보입니다. = -D –

+0

'if (is_int ($ [0])> 0) ... elseif (is_int ($ row [0])> 0)'... – deceze

+0

이미 확인 및 수리되었습니다. 어쨌든 고마워요 –

답변

1

코드에 $stmt->execute();가 누락되었습니다. 당신이 문을 준비 할 때 결과를 조회 할 수 있습니다 전에

$sql="select id from users where userName=:userName"; 
$this->prepared = $this->mysqlAccess->con->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); 
$this->prepared->execute(array(':userName' => $this->username)); 

, 당신이 그것을 실행해야합니다 이것은 내가 지금 이클립스이 일어날 코드의 예입니다.

+0

FFS .. 나는 그것을보고 실수를 수정했습니다. 나는 보았다. 그러나 끝에있는이 Array() 문제는 여전히 거기에있다. –

+0

완료 $ stmt-> execute()를 또 하나 넣는 것을 잊었다. 그래서 나는 예외를 보지 않았다. –

+0

끝도 아직 .... = D –