2017-04-26 10 views
0

ユーザーのデータベースから電子メールアドレスを取得します。次に、これらのメールアドレスをapiで確認し、違反件数を返します。ループは1つの電子メールのみをチェックします

問題は、最初のメールアドレスを確認するようになっているように見えることです。私たちが複数ある場合は、最初は、侵害の正確な数を取得し、第二は、あなたのループで0

<?php 
ini_set("allow_url_fopen", 1); 
include '/home/actiorwd/include/dbinfo.php'; 

$servername = "localhost"; 
$dbname = "actiorwd_websec"; 

// Create connection 
$conn = new mysqli($servername, $user, $passw, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 
//users contains two columns; email and breaches. 
$sql = "SELECT * FROM users"; 
$result = $conn->query($sql); 

$ch = curl_init(); 

if ($result->num_rows > 0) { 
    // output data of each row 

    while($row = $result->fetch_assoc()) { 
     $url = 'https://haveibeenpwned.com/api/v2/breachedaccount/'; 
     $url.= $row["email"]; 

     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
     curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13'); 
     curl_setopt($ch, CURLOPT_URL, $url); 
     $results = curl_exec($ch); 
     curl_close($ch); 
     $obj = json_decode($results, TRUE); 

     $usermail = $row["email"]; 



     $newbreaches = count($obj); 

     //run if new breaches are found 
     if($row["breaches"]!==$newbreaches){ 

      require_once('/home/actiorwd/public_html/PHPMailer/PHPMailerAutoload.php'); 
      $mail = new PHPMailer; 

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

      $mail->setFrom('[email protected]', 'WebSec'); 
      $mail->addAddress($row["email"]);  // Add a recipient 
      $mail->addReplyTo('[email protected]', 'WebSec'); 

      $mail->isHTML(true);         // Set email format to HTML 

      $mail->Subject = 'Breached!!!!'; 
      $mail->Body = 'Someone breached your account, there are: '.$newbreaches."breaches"; 
      $mail->AltBody = 'Someone breached your account in plain text'; 
      $mail->send(); 
      /* 
      if(!$mail->send()) { 
       echo 'Message could not be sent.'; 
       echo 'Mailer Error: ' . $mail->ErrorInfo; 
      } else { 
       echo 'Message has been sent'; 
      } 

      */ 


      $updatebreach = "INSERT INTO users (`email`, `breaches`) VALUES ('$usermail', '$newbreaches') ON DUPLICATE KEY UPDATE `breaches` = '$newbreaches' "; 
      //echo $updatebreach; 

      if ($conn->query($updatebreach) === TRUE) { 
       //echo "New record created successfully"; 
      } else { 
       //echo "Error: " . $updatebreach . "<br>" . $conn->error; 
      } 


     } 


    } 
} else { 
    echo "0 results"; 
} 
$conn->close(); 
?> 
+2

まあ、基本的なデバッグが必要です。 '$ row [" email "]'を出力します。その後、 '$ obj'を出力します。また、includeでは実際に呼び出されるべきではありません。ループの外側にある必要があります。 – Shadow

+0

$ row ["email"]を印刷すると、正しいメールアドレスが得られます。エコーカウント($ obj)が発生すると、最初の電子メールの正当な違反件数が得られますが、結果として得られる電子メールには0が返されます。 – Kazura92

+0

この単純なデバッグでは、MySQLをエラーの原因として排除しました。プロンプトなしであなた自身でこれを行うのは難しいですか? – Shadow

答えて

2

ルックを取得したり、ループの前の行で、より良いです。あなたはしています:

$ch = curl_init(); - あなたはcURLセッションを初期化します。これは、ループの外側から1回だけ実行します。

はその後、数行後に、youreのはやって:

curl_close($ch);を - あなたはcURLのセッションを閉じます。毎回の呼び出しの後でこれを行うのは、あなたのループの中にあるからです。だからあなたはcURLセッションを閉じて新しいセッションを開かないので、主にあなたは初期化し、cURLを実行します(それが最初のもので動作する理由)。

ループからcurl_close$ch);を取り出してファイルの最後に置くだけで、同じセッションですべての要求を実行することができます。そして、それが動作するはずです:)

のファイルのあなたの終わりは次のようになります。

} 
curl_close($ch); 
$conn->close(); 
?> 

それが助け願っています。

+0

私はあなたの提案のように最後に追加しようとしましたが、私はまだ同じ結果を得る。それはまだ最初の電子メールを実行するようだ。 – Kazura92

+0

Hmm。しかし、ループの内側から取り除いたのではないでしょうか? – Twinfriends

+0

はい。それはまさにあなたの例に似ています。 https://pastebin.com/FJE4G9Xh – Kazura92

関連する問題