Нужна помощь с оператором LOOP в функции php curl, встроенной в XML - PullRequest
0 голосов
/ 29 марта 2011

У меня есть скрипт php curl, который предоставил мой смс-шлюз, чтобы я мог отправлять смс через xml. Оригинальный скрипт - это то, что я имею ниже.

////////////////////////////// оригинальный код php curl xml от gateway

<?php  


$user="smsgateway_user";
$pass="smsgateway_password";
$sender= "sendername";
$mobileno="2348034057037";
$message= "Your sms message goes here";

?>
<?php

$postUrl = "http://www.infobip.com/AddOn/SMSService/XML/XMLInput.aspx";
// XML-formatted data

$xmlString =
"<SMS>
<authentification>
<username>$user</username>
<password>$pass</password>
</authentification>
<message>
<sender>$sender</sender>
<text>$message</text>
</message>
<recipients>
<gsm>$mobileno</gsm>
</recipients>
</SMS>";

// previously formatted XML data becomes value of “XML” POST variable

$fields = "XML=" . urlencode($xmlString);
// in this example, POST request was made using PHP’s CURL

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $postUrl);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
// response of the POST request
$response = curl_exec($ch);

// redirect the page upon successful sending

header("Location:customized/successfullysentbulksms.php"); 
curl_close($ch);

?>



/// code end

Я, однако, пытался настроить коды, чтобы позволить мне отправлять настроенные несколько смс, подключившись к таблице mysql со следующими полями (id, name, mobileno) таким образом, чтобы я мог выбрать 10 получателей и отправитьнастраиваемое сообщение, чтобы каждый получатель получал одно и то же сообщение со своим именем, отображаемым в сообщении, например «Уважаемый (. $ name), спасибо за посещение нашего магазина сегодня»

Из небольшого php, который я знаю, яПолагаю, что я предполагаю подключиться к базе данных, чтобы выбрать моего получателя, а затем написать «цикл do или while», который позволит сценарию повторять или повторять эту функцию до тех пор, пока он не отправит смс всем получателям.

В настоящее время я застрял с внедрением своей функции цикла, пожалуйста, я буду рад, если кто-то может взглянуть на то, что я сделал до сих пор, и помочь мне.

Моя подправленная версия кода ///////////////////////////////////////////

<?php
$host="localhost"; // Host name
$username="user"; // Mysql username
$password="password"; // Mysql password
$db_name="db"; // Database name
$tbl_name="mysqltb"; // Table name


// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

// Retrieve data from database
$sql="SELECT * FROM $tbl_name";
$result=mysql_query($sql);

// Start looping rows in mysql database.
$row=mysql_fetch_array($result);
?>

<?
mysql_close();
?>



<?php  

 $mobileno = $row['mobileno'];
 $name = $_row['name'];

$user="smsgateway_user";
$pass="smsgateway_password";
$sender= "sendername";

?>
<?php

$message = "you have received a customized bulk sms that is suppose to display your name";
$message2= "Dear ".$name." ".$message ; 


$postUrl = "http://www.infobip.com/AddOn/SMSService/XML/XMLInput.aspx";
// XML-formatted data

$xmlString =
"<SMS>
<authentification>
<username>$user</username>
<password>$pass</password>
</authentification>
<message>
<sender>$sender</sender>
<text>$message2</text>
</message>
<recipients>
<gsm>$no</gsm>
</recipients>
</SMS>";

// previously formatted XML data becomes value of “XML” POST variable

$fields = "XML=" . urlencode($xmlString);
// in this example, POST request was made using PHP’s CURL

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $postUrl);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
// response of the POST request
$response = curl_exec($ch);

// redirect the page upon successful sending

header("Location:customized/successfullysentbulksms.php"); 
curl_close($ch);

?>

1 Ответ

1 голос
/ 29 марта 2011

Ну, есть несколько вещей, которые я видел, когда просматривал ваш код, которые были неверны.Главным было: 1) одна из переменных $ row была названа $ _row;2) когда вы просматриваете возврат запроса, вы должны использовать стандартный шаблон while ($row = mysql_fetch_array($result)), тогда каждая строка будет проходить циклически, вместо этого вы выбираете только первую строку.Вот пример того, что вы хотели сделать

<?php
$host     = "localhost"; // Host name
$username = "user"; // Mysql username
$password = "password"; // Mysql password
$db_name  = "db"; // Database name
$tbl_name = "mysqltb"; // Table name

$user     = "smsgateway_user"; //sms user
$pass     = "smsgateway_password"; //sms password
$sender   = "sendername"; //sms sender name

$postUrl  = "http://www.infobip.com/AddOn/SMSService/XML/XMLInput.aspx"; //XML Post url

// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

// Retrieve data from database
$sql = "SELECT * FROM $tbl_name WHERE `send_status`=0";
$result = mysql_query($sql);

// Start looping rows in mysql database.
$totalCount = mysql_num_rows($result);
$successCount = 0;
while ($row = mysql_fetch_array($result))
{
    $mobileno = $row['mobileno'];
    $name = $row['name'];

    $message = "Dear $name "; //Start message
    $message .= "you have received a customized bulk sms that is suppose to display your name";  //append to message


    // XML-formatted data

    $xmlString =
    "<SMS>
    <authentification>
    <username>$user</username>
    <password>$pass</password>
    </authentification>
    <message>
    <sender>$sender</sender>
    <text>$message</text>
    </message>
    <recipients>
    <gsm>$no</gsm>
    </recipients>
    </SMS>";

    // previously formatted XML data becomes value of “XML” POST variable

    $fields = "XML=" . urlencode($xmlString);
    // in this example, POST request was made using PHP’s CURL

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $postUrl);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
    // response of the POST request
    $response = curl_exec($ch);

    //Might want to check the response here, see if it gives a true, or a 1 to say the message was sent successfully
    if ($response)
    {
        $sql = "UPDATE `$tbl_name` SET `send_status`=1 WHERE `mobileno`='$mobileno' LIMIT 1";
        $result = mysql_query($sql);
        if (mysql_affected_rows($result) == 1) //success updating database
        {
            $successCount++;
        }
    }
    // redirect the page upon successful sending
    curl_close($ch);
}
if ($successCount == $totalcount)
    header("Location:customized/successfullysentbulksms.php"); 
else
    echo "Error Sending.  $successCount out of $totalcount were successfully sent";
?>

Примечание: поскольку здесь используется ваша база данных и поставщик смс, я не смог протестировать этот код.
Если у вас есть какие-либо вопросы о том, как это работает, я был бы рад ответить на них.

РЕДАКТИРОВАТЬ:
Я обновил код, чтобы включить оператор обновления MySQL, чтобы установить для столбца «send_status» значение true после отправки сообщения.Я также изменил оператор выбора mysql, чтобы получать только номера мобильных телефонов из базы данных, которая еще не была отправлена ​​(send_status имеет значение false).
Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...