2016-06-25 2 views
0

メッセージを送信するためにmysqlデータベースに問い合わせる以下のPHPスクリプトがあります。私は、データベーステーブルの1000行ごとにループ内の "メッセージ"変数を送信したい。下のコードは、誰かがエラーを見つけることができますか? PHPスクリプト自体はエラーを生成しませんが、1000行ごとにメッセージを送信しません。代わりに、データベーステーブルのすべての行で完全に実行され、GCMからのメッセージングエラーが発生します。phpがsqlユーザから正しくループしない

<?php 
session_start(); 
include_once 'connect.php'; 

    function send_notification($con,$registatoin_ids, $message) { 
    $url = 'https://android.googleapis.com/gcm/send'; 

    // prep the bundle 
    $msg = array 
    (
'message' => "message", 
'title'  => 'title', 
'subtitle' => 'subtitle. subtitle', 
'msgcnt' => 3, 
'vibrate' => 1, 
'sound'  => 'default', 
'soundname' => 'beep.wav', 
'largeIcon' => 'large_icon', 
'smallIcon' => 'small_icon' 
); 
    $fields = array 
    (
'registration_ids' => $registatoin_ids, 
'data'   => $msg 
    ); 


    $headers = array(
     'Authorization: key=' . apiKey, 
     'Content-Type: application/json' 
    ); 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields)); 
    $result = curl_exec($ch); 
    if ($result === FALSE) { 
     die('Curl failed: ' . curl_error($ch)); 
    } 
    curl_close($ch); 
    echo $result; 

} 

    if(isset($_SESSION['login_user'])){ 
    if(isset($_POST["submit"]) && isset($_POST["message"])) {  
    $num=$con->query("SELECT gcm_regid from gcm_users")->rowCount(); 
    $current_num=0; 
    $message=$_POST["message"]; 
    for($i=0;$i<$num/999;$i++){ 

    $query=$con->query("SELECT gcm_regid from gcm_users LIMIT   
    $current_num,999"); 

foreach($query as $data) { 
$row[]=$data["gcm_regid"]; 
} 

    $pushStatus = send_notification($con,$row, $message); 
    $current_num+=999; 
    } 
    }else if(isset($_POST["logout"])){ 

    if(session_destroy()) // Destroying All Sessions 
{ 
header("Location: login.php"); // Redirecting To Home Page 
} 
} 

?> 

答えて

0

$row[]は常に追加されますが、$行は決してクリアされません。

$row[]=array(); // clear array 
foreach($query as $data) { 
$row[]=$data["gcm_regid"]; 
} 
+0

あなたの答えはThnxですが、試しましたが、スクリプトはすべての行を一度に送信します。 GCMはメッセージを返します:バルク上のメッセージ数(1784)が最大許容値(1000)を超えているため、メッセージが一度にテーブルのすべての行に送信されると推測できます。 – qwertyg

関連する問題