2017-09-23 31 views
0

PHP & MySQLを介してログインしたユーザーに通知するプログラムを作成しようとしています。LogginのPHPへの電子メール通知

私は試みましたが、ユーザーがログインしたときにログインしていませんでした。

電子メール通知がユーザーによって選択されました。ユーザーが「はい」を選択した場合は、通知する必要があります。

そしてyes

私が試しに設定されているテストされている、そこからユーザー:

signin.php

<?php 
session_start(); 
require_once 'class.user.php'; 
$user_login = new USER(); 

if($user_login->is_logged_in()!="") 
{ 
    $user_login->redirect($web.$_SESSION['user_name']); 
} 

if(isset($_POST['btn-login'])) 
{ 
    $uname = trim($_POST['txtuname']); 
    $upass = trim($_POST['txtupass']); 

    if($user_login->login($uname,$upass)) 
    { 

      $message = "   
Hello $uname,<br /> 
         <p>You are Logged in! 

         <br /><br /> 
         Thanks:)"; 

      $subject = "Notifier"; 

      $user_login->send_mail($email,$message,$subject); 

     $user_login->redirect($uname); 
    } 
} 
?> 

class.user.php

 public function login($uname,$upass) 
     { 
      try 
      { 
       $stmt = $this->conn->prepare("SELECT * FROM tbl_users WHERE userName=:username"); 
       $stmt->execute(array(":username"=>$uname)); 
       $userRow=$stmt->fetch(PDO::FETCH_ASSOC); 

       if($stmt->rowCount() == 1) 
       { 
        if($userRow['userStatus']=="Y") 
        { 
         if($userRow['userAccess']=="Y") 
        { 
         if($userRow['userPass']==md5($upass)) 
         { 
         if($userRow['userNotify']=="Y") 
        {  
    return true;    
       } 
          $_SESSION['userSession'] = $userRow['userID']; 
          $_SESSION['loggedin_time'] = time(); 
          $_SESSION['user_name'] = $userRow['userName']; 
          return true; 
         } 

         else 
         { 
          header("Location: signin.php?error"); 
          exit; 
         } 
        } 
        else 
        { 
         header("Location: default.php"); 
         exit; 
        } 
       } 
        else 
        { 
         header("Location: inactive.php"); 
         exit; 
        } 
       } 
       else 
       { 
        header("Location: signin.php?error"); 
        exit; 
       }  
      } 
      catch(PDOException $ex) 
      { 
       echo $ex->getMessage(); 
      } 
     } 

function send_mail($email,$message,$subject) 
    {      
     require_once('mailer/class.phpmailer.php'); 
     $mail = new PHPMailer(); 
     $mail->IsSMTP(); 
     $mail->SMTPDebug = 0;      
     $mail->SMTPAuth = true;     
     $mail->SMTPSecure = "ssl";     
     $mail->Host  = "smtp.gmail.com";  
     $mail->Port  = 465;    
     $mail->AddAddress($email); 
     $mail->Username="[email protected]"; 
     $mail->Password="password";    
     $mail->SetFrom('[email protected]','Name'); 
     $mail->AddReplyTo("[email protected]","Name"); 
     $mail->Subject = $subject; 
     $mail->MsgHTML($message); 
     $mail->Send(); 
    } 

電子メール通知がユーザーによって選択されています。ユーザーが「はい」を選択した場合は、通知する必要があります。

これは私がこれを正しく持っている場合、ログインアクションは関係なく、常に利用者の選択のか(資格情報が一致し、他のすべてが正しいと仮定すると、当然のことながら)trueを返します

if($userRow['userNotify']=="Y") 
{  
return true;    
} 
+0

私は、ユーザー名が一意の値であると思いますので、2と同じユーザ名がデータベースに格納されている場合、あなたが持って将来にエラーがあるあなたの意志がないアクティブ良い人、だから私は一般的な電子メールは一意であるか、またはIDはあなたがチェックしなければならないユニークなものです。または電子メールとユーザー名がユーザー名を使用するよりも関連性が高い節の中のカップル。よろしく。 –

+0

@headmax 'userName'と' userEmail' botは一意です...重複する値はありません –

+0

'$ email'がどこに設定されているのかわかりません。 –

答えて

0

によって確認されました"電子メール通知"オプション。これにより、成功するたびにメソッド$user_login->send_mail($email,$message,$subject);が実行されます。

しかし、あなたの問題は、電子メールが受信者の受信ボックスに当たらないという事実に関連しているようですね。 send_mail()メソッドを貼り付けることはできますか?デバッグとブレークポイントを追加して、フローがこの望ましいメソッドに入り、どのデータが入力されているかを確認できます。

また、電子メールが外部SMTPサービスなどを使用していないと仮定して、サーバー上のメール転送エージェント(postfix、sendmailなど)の設定を調べます。

0

あなたはどこにも/宣言されていない質問を編集するための

$user_login->send_mail($email,$message,$subject); 
+0

どのように '$ email'を宣言すべきですか?電子メールアドレスは 'userEmail'に保存されます –

+0

@ChiragJainBetala次に' $ userEmail'をどこで宣言しましたか? – Ravi

0

おかげ下に呼び出す前に、$emailを初期化しています!

私はあなたのコードを経て、他の人が言ったように、あなたが$emailを定義していないし、また、あなたが定義した場合、あなたのコードは、その後も

if($userRow['userNotify']=="Y") 
        {  
    return true;    
       } 

として動作しませんだけで、それは何もしませんチェックします。

コードごとに、私のコードがすべての問題から整理するのに役立つことを願っています。 class.user.php私の編集コードで不変email functionを維持

は行く:

class.userを。PHP

public function login($uname,$upass) 
    { 
     try 
     { 
      $stmt = $this->conn->prepare("SELECT * FROM tbl_users WHERE userName=:username"); 
      $stmt->execute(array(":username"=>$uname)); 
      $userRow=$stmt->fetch(PDO::FETCH_ASSOC); 

      if($stmt->rowCount() == 1) 
      { 
       if($userRow['userStatus']=="Y") 
       { 
        if($userRow['userAccess']=="Y") 
       { 
        if($userRow['userPass']==md5($upass)) 
        { 
        if($userRow['userNotify']=="Y") 
       { 
$email = $userRow['userEmail']; 
$message = "Hello $uname,<br /> 
         <p>You are Logged in! 

         <br /><br /> 
         Thanks:)"; 

      $subject = "Notifier"; 

      require_once('mailer/class.phpmailer.php'); 
     $mail = new PHPMailer(); 
     $mail->IsSMTP(); 
     $mail->SMTPDebug = 0;      
     $mail->SMTPAuth = true;     
     $mail->SMTPSecure = "ssl";     
     $mail->Host  = "smtp.gmail.com";  
     $mail->Port  = 465;    
     $mail->AddAddress($email); 
     $mail->Username="[email protected]"; 
     $mail->Password="password";    
     $mail->SetFrom('[email protected]','Name'); 
     $mail->AddReplyTo("[email protected]","Name"); 
     $mail->Subject = $subject; 
     $mail->MsgHTML($message); 
     $mail->Send(); 
      return true;    
      } 
         $_SESSION['userSession'] = $userRow['userID']; 
         $_SESSION['loggedin_time'] = time(); 
         $_SESSION['user_name'] = $userRow['userName']; 
         return true; 
        } 

        else 
        { 
         header("Location: signin.php?error"); 
         exit; 
        } 
       } 
       else 
       { 
        header("Location: default.php"); 
        exit; 
       } 
      } 
       else 
       { 
        header("Location: inactive.php"); 
        exit; 
       } 
      } 
      else 
      { 
       header("Location: signin.php?error"); 
       exit; 
      }  
     } 
     catch(PDOException $ex) 
     { 
      echo $ex->getMessage(); 
     } 
    } 

signin.php

<?php 
session_start(); 
require_once 'class.user.php'; 
$user_login = new USER(); 

if($user_login->is_logged_in()!="") 
{ 
    $user_login->redirect($web.$_SESSION['user_name']); 
} 

if(isset($_POST['btn-login'])) 
{ 
    $uname = trim($_POST['txtuname']); 
    $upass = trim($_POST['txtupass']); 

    if($user_login->login($uname,$upass)) 
    { 
     $user_login->redirect($uname); 
    } 
} 
?> 
関連する問題