Выберите условный оператор SQL

Я отправляю данные по URL-адресу для отправки сообщения с благодарностью. Детали, которые я собираю, взяты из таблицы под названием readtextfilejson. Откуда я отправляю пользователям сообщения с благодарностью.

Однако я не могу выбрать сведения о единственных пользователях, которые не получили свое текстовое сообщение. Мой код отбирает все данные и снова и снова в цикле отправляет их всем пользователям. Таким образом, отправляя пользователям несколько сообщений с благодарностью.

Я добавил новый столбец под названием ThankyouMessage, который по умолчанию = «не отправлено». Так что, когда мой скрипт запускается, он обновляет столбец ThankYouMessage до = 'SENT', так что мой скрипт может выбирать только сведения о пользователях, которые еще не получили свое сообщение с благодарностью.

Таким образом, я не пересылаю одно и то же сообщение снова и снова. Пожалуйста, взгляните на мой сценарий ниже и помогите мне решить эту проблему.

Моя структура таблицы:

Выберите условный оператор SQL

 <?php

        $data = (string) file_get_contents($file);

        //echo $data;

        $data = str_replace('//Confirmation Respose', '', $data);
        $data = str_replace('// Validation Response', '', $data);
        $data = str_replace(' ', '', $data);
        $data = preg_replace('/\s+/S', " ", $data);
        $data = trim($data);
        $pattern = '/\s*/m';
        $replace = '';

        $testString = $data;

        $removedWhitespace = preg_replace( $pattern, $replace,$testString );
        $removedWhitespace2 = str_replace (' ', '', $testString);

        $getAllData = explode('}{', $removedWhitespace2);
        foreach ($getAllData as $row) {
           $row = str_replace('{', '', $row);

           $rowData = explode(',"', $row);
           $rowData = explode(',"', $row);
           $columnValues = array();
           $chkTransId = '';



           foreach ($rowData as $value) {
              $newVal = explode(':', $value);
              $key = str_replace('"', '', $newVal[0]);
              $val = str_replace('"', '', $newVal[1]);
              $val = trim($val);

              $columnValues[] = ($val) ? "'$val'": "''";
              if ($key == 'TransID'){
                 $chkTransId = $val;
              }
           }
           if ($chkTransId == ''){
              continue;
           }
           ////THIS IS THE SECTION AM HAVING PROBLEMS WITH - I WANT TO
           ////SELECT ONLY THE DATA WHERE THE COLUMN  WHERE thankyoumessage =            
            ///// 'NOT SENT'
           $chkSql = "select * from `readtextfilejson`where TransID='$chkTransId'";

           $getResult = mysqli_query($con, $chkSql); 
           $getCount = mysqli_num_rows($getResult);
           $row = mysqli_fetch_object($getResult);

$text = "Dear ". $row->FirstName ." Your Payment of ". $row->TransAmount ." to XXXXX was Received Succesfully. Confirmation Code: ". $row->TransID  ."";
   $destination = array("messageId"=>"$product_id","to"=>"$row->MSISDN");
   $product_id=uniqid();



 $notifyUrl = "URL";
    $notifyContentType = "application/json";
    $callbackData = 'eHostOnlineCodeCheck125690';
    $username = "USERNAME";
    $password = "PASSWORD";
    $postUrl = "POSTURL";

    $message = array("from" => "USERNAME",
            "destinations" => $destination,
            "text" => $text,
            "bulkId" => "",
        "notifyUrl" => $notifyUrl,
        "flash" => "false",
            "notifyContentType" => $notifyContentType,
        "callbackData" => $callbackData);       
    $postData = array("messages" => array($message));
    $postDataJson = json_encode($postData);
    //Submit all data to SMS server
    $ch = curl_init();
    $header = array("Content-Type:application/json", "Accept:application/json");
    curl_setopt($ch, CURLOPT_URL, $postUrl);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
    curl_setopt($ch, CURLOPT_MAXREDIRS, 2);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postDataJson);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    // response of the POST request
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $responseBody = json_decode($response);

    curl_close($ch);

echo "<pre>";
print_r($row);
print_r($responseBody);
echo "</pre>";



 $Sql = "UPDATE readtextfilejson SET thankyoumessage = 'SENT' WHERE thankyoumessage = 'not sent'";
  mysqli_query($con, $Sql) or die(mysqli_error($con)); 




   if ($getCount > 0){
      continue;
   }

   $columnValues = implode(',', $columnValues);
   $sql = "INSERT INTO `readtextfilejson`(`TransactionType`, `TransID`, `TransTime`, `TransAmount`, `BusinessShortCode`, `BillRefNumber`, `InvoiceNumber`, `OrgAccountBalance`, `ThirdPartyTransID`, `MSISDN`, `FirstName`, `MiddleName`, `LastName`) VALUES (".$columnValues.")";

   mysqli_query($con, $sql) or die(mysqli_error($con)); 
}
echo 'Data inserted successfully';
?>
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
71
1

Ответы 1

2 возможных проблемы.

1) Вы выбираете транзакцию независимо от того, какое сообщение установлено. Возможно, вам потребуется добавить условие к этому первому предложению SQL where

SELECT * FROM `readtextfilejson`
WHERE TransID = '$chkTransId' AND thankyoumessage = 'not sent'

2) При обновлении сообщения благодарности транзакции до «SENT» вы устанавливаете транзакции все, потому что в вашем операторе обновления отсутствует идентификатор транзакции. Возможно, вам потребуется его добавить.

UPDATE readtextfilejson 
SET thankyoumessage = 'SENT' 
WHERE thankyoumessage = 'not sent' AND TransID = '$chkTransId'

И поскольку вы хотите установить его в состояние ОТПРАВИТЬ независимо от того, что было раньше, вам может не понадобиться проверка сообщения с благодарностью.

UPDATE readtextfilejson 
SET thankyoumessage = 'SENT' 
WHERE TransID = '$chkTransId'

Спасибо, но получаю две ошибки: 1. Повторяющаяся ошибка и 2: Ошибка отсутствия пункта назначения см.: connectmedia.co.ke/st.php

Nathaniel Muita 07.09.2018 18:05

Я не вижу ошибки "Не указан пункт назначения" по предоставленной ссылке.

Phil Hilton 07.09.2018 20:57

Повторяющаяся ошибка, вероятно, относится к идентификатору транзакции, поэтому вы вставляете транзакцию, которая уже была вставлена, вероятно, потому, что ваша проверка if ($getCount > 0) continue не работает. Если там синтаксис правильный, это означает, что ваш исходный запрос выбора не может выбрать строку, которая уже существует.

Phil Hilton 07.09.2018 21:04

Другие вопросы по теме