2012-08-13 66 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獲取action和$ arg2,它是$ self :: params獲取它需要的變量,在這種情況下是電子郵件名稱和密碼。它打印激活鏈接用於測試目的,當它看到它後面的Array()。具有isset($ row)的if語句沒有做它正在告訴我的腳本該行已設置的原因。而當我print_r我看不到......當echo我看到陣列()....我使用Zend服務器CE與PHP 5.4和我有一個表,這樣的結構:開箱即用的魔法..隨着PDO

id, - 名稱, - 密碼, - cryptokey, - cryptovector, - 電子郵件, - activation_code, - active, - usertype
1, - J.Smith, - pwd, - key, - vector, - some @ mail, - 激活碼, - 0, - candidate

+0

我試圖驗證它,並在「選擇ID ..」它什麼也沒有捕獲任何東西..和相同的電子郵件在那裏我可以看到它...... = -D – 2012-08-13 11:25:57

+0

'if(is_int($行0 [0])> 0)... elseif(is_int($行[0])> 0)'... – deceze 2012-08-13 11:26:24

+0

已檢查並修復已.. ..無論如何謝謝 – 2012-08-13 11:37:01

回答

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()到底還是存在的問題.. – 2012-08-13 11:30:31

+0

完成我忘記了另一個$ stmt-> execute(),這就是爲什麼我沒有看到異常 – 2012-08-13 11:36:16

+0

Array結束仍然存在.... = D – 2012-08-13 11:37:53