2017-01-17 5 views
-1

私はこのスクリプトを持っています。これは、Ionicアプリ内でパスワードを忘れた場合に使用されます。まず、入力欄に入力したメールアドレスが既に登録されているかどうかを確認します。そうでない場合は、「no e-mail registered」と表示されます。はいの場合、ユーザーは電子メールを受け取る必要があります。phpmailerでネストされた関数が機能していません

私は、ユーザーが既に登録されているかどうかをチェックする最初の機能を使わずにphpメーラー機能をテストしました。これはスムーズに動作し、ユーザーは電子メールを受け取ります。次に、MySQL DBの電子メールをチェックするための忘れ機能を構築します。だから、私はsend関数をforgot関数の中にネストしましたが、機能しません。私は、単純な文字列で置き換えることによって、ネストされたsend関数なしで、忘れた関数を試しました。これは機能します。ですから、MySQL DBに電子メールアドレスが存在する場合、電子メールを送信するために何かが欠けていると思います。

は、ここでは、コードforget()機能で

<?php 

include 'dbconn.php'; 
require 'mailer/PHPMailerAutoload.php'; 

if (isset($_SERVER['HTTP_ORIGIN'])) { 
    header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}"); 
    header('Access-Control-Allow-Credentials: true'); 
    header('Access-Control-Max-Age: 86400'); // cache for 1 day 
} 

// Access-Control headers are received during OPTIONS requests 
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { 

    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) 
     header("Access-Control-Allow-Methods: GET, POST, OPTIONS"); 

    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) 
     header("Access-Control-Allow-Headers:  {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}"); 

    exit(0); 
} 
$postdata = file_get_contents("php://input"); 
if (isset($postdata)) { 
    $request = json_decode($postdata); 
    forgot($request); 
} 

function forgot($request) 
{ 

    $email = $request->email; 


    $query = mysql_query("SELECT * FROM users WHERE email = '$request->email'") or die(mysql_error()); 
    if (mysql_num_rows($query) > 0) { 
     $row = mysql_fetch_array($query) or die(mysql_error()); 
     if ($row["email"] == $request->email) { 



      function send($parent_request) 
      { 

       //$email = $request->email; 
       $mail = new PHPMailer; 
       //$mail->SMTPDebug = 3;        // Enable verbose debug output 

       $mail->isSMTP();      // Set mailer to use SMTP 
       $mail->Host  = '*****.net';  // Specify main and backup SMTP servers 
       $mail->SMTPAuth = true;    // Enable SMTP authentication 
       $mail->Username = '[email protected]*****.com'; // SMTP username 
       $mail->Password = '*****';   // SMTP password 
       $mail->SMTPSecure = 'ssl';   // Enable TLS encryption, `ssl` also accepted 
       $mail->Port  = 465;    // TCP port to connect to 

       $mail->setFrom('[email protected]****.com', 'Team'); 
       $mail->addAddress($email, 'Joe User'); 
       $mail->isHTML(true);     // Set email format to HTML 

       $mail->Subject = 'Passwort Reset'; 
       $mail->Body = 'Hallo lieber User <br> Hier kannst du dein Passwort für die varfinz.ch App zurückstellen. <b>in bold!</b>'; 
       $mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; 
       if ($mail->send()) { 
        echo '{"result":1}'; 
       } else { 
        echo '{"result":0}'; 
       } 
      } 


     } else { 
      echo '{"result":0}'; 
     } 

    } 

    else { 
     echo '{"result":0}'; 
    } 
} 

?> 
+2

"*これは動作していません*"はエラーメッセージではありません... –

+0

また、php5.5(3年以上前)から廃止予定のmysql_xxx関数を使用してはいけません。セキュリティ上の問題のためにPHP7から削除されました。代わりに 'mysqli_xxx'または' PDO'を使用してください。http://php.net/manual/en/mysqlinfo.api.choosing.php –

+0

エラーメッセージは表示されません。アプリでテストすると、e -mailアドレスはdbに存在します。私が使用しているサーバーは、PHP 5.4です。 PDOに変更する必要がありますか? –

答えて

1

である、あなたはsend()関数を定義しています。この関数は決して呼び出されないので、メールは送信されません。あなたはsend関数を忘れることなく宣言しなければなりません。私のコメントでmentionnedとして

function send($email) 
{ 
    $mail = new PHPMailer; 
    //$mail->SMTPDebug = 3;    // Enable verbose debug output 

    $mail->isSMTP();      // Set mailer to use SMTP 
    $mail->Host  = '*****.net';  // Specify main and backup SMTP servers 
    $mail->SMTPAuth = true;    // Enable SMTP authentication 
    $mail->Username = '[email protected]*****.com'; // SMTP username 
    $mail->Password = '*****';   // SMTP password 
    $mail->SMTPSecure = 'ssl';   // Enable TLS encryption, `ssl` also accepted 
    $mail->Port  = 465;    // TCP port to connect to 

    $mail->setFrom('[email protected]****.com', 'Team'); 
    $mail->addAddress($email, 'Joe User'); 
    $mail->isHTML(true);     // Set email format to HTML 

    $mail->Subject = 'Passwort Reset'; 
    $mail->Body = 'Hallo lieber User <br> Hier kannst du dein Password für die varfinz.ch App zurückstellen. <b>in bold!</b>'; 
    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; 
    if ($mail->send()) { 
     echo '{"result":1}'; 
    } else { 
     echo '{"result":0}'; 
    } 
} 

function forgot($request) 
{ 

    $email = $request->email; 


    $query = mysql_query("SELECT * FROM users WHERE email = '$email'") or die(mysql_error()); 
    if (mysql_num_rows($query) > 0) { 
     $row = mysql_fetch_array($query) or die(mysql_error()); 
     if ($row["email"] == $email) {  
      send($email); 
     } else { 
      echo '{"result":0}'; 
     } 

    } 

    else { 
     echo '{"result":0}'; 
    } 
} 

、あなたはMySQLの非推奨のライブラリを使用していて、mysqliPDOであなたのコードの更新を検討してください: その後、必要に応じて送信()関数を呼び出します。

+0

ありがとうございます! PD0のコードを更新します。 –

関連する問題