Перейти к содержимому


Проверка отправки SMS


Сообщений в теме: 10

#1 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 22 Февраль 2015 - 21:32

Не могу понять, почему система ругается, что нет такой таблицы?
В структуре БД она есть. Может быть какие-то еще ключи надо прописывать в имени таблицы для конкретного пользователя?

$rez="Не доставлено";
$nID=$line['ID письма'];
$objects = data_table("f_module_sms_archive", "`uid` LIKE '%".$nID."%'", "all");
foreach ($objects as $object){
$rez="Доставлено ".$object['sended time'];
}
$line['Квитанция о доставке']=$rez;

По идее она должна обращаться к таблице с итогами отправки SMS и выдавать время отправки.
Что я делаю не так?

Вариант 2 тот же эффект:

$rez="Не доставлено";
$nID=$line['ID письма'];
$objects = data_table("f_module_sms_archive", "`uid` =".$nID, "all");
foreach ($objects as $object){
$rez="Доставлено ".$object['sended time'];
}
$line['Квитанция о доставке']=$rez;

Сообщение отредактировал Александр Пономарев: 01 Март 2015 - 11:23


#2 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 22 Февраль 2015 - 22:00

Просмотр сообщенияАлександр Пономарев (22 Февраль 2015 - 21:32) писал:

Не могу понять, почему система ругается, что нет такой таблицы?
В структуре БД она есть. Может быть какие-то еще ключи надо прописывать в имени таблицы для конкретного пользователя?
$objects = data_table("f_module_sms_archive", "`uid` =".$nID, "all");
Эта функция используется для получения данных из пользовательских таблиц. Вы же обращаетесь к системной. Используйте функции sql_*

$sql = "SELECT * FROM ".константа." WHERE `uid` = ".intval($nID);
$result = sql_query($sql);
константу посмотрите в файле констант include/constants.php

#3 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 23 Февраль 2015 - 10:44

Спасибо, Анатолий. Меня уже утром самого осенил этот момент. Тут еще такой аспект - почему бы авторам просто не сделать эту функцию встроенной. Тем более, что у них есть функция, но она отдает результат по ID, а они при отправке писем дают в качестве return не ID, а UID. Давали бы ID, было бы проще сделать так:

$key=$line['ID'];
$objects = data_table("Получатели SMS", "`status`=0 AND `Письмо`=".$key, "all");
foreach ($objects as $object){
$id_sms=$object['ID письма'];
$snoopy = new Snoopy;
$snoopy->fetch("http://cb-sms.ru/status.php?id_sms=".$id_sms);
$t= $snoopy->results;;
$new['Квитанция о доставке']=$t;
update_query($new, "Получатели SMS", "`id`=".$object['ID']);
}

Тем не менее спасибо!

Сообщение отредактировал Александр Пономарев: 01 Март 2015 - 11:24


#4 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 23 Февраль 2015 - 12:49

В общем допилил я тему. Может кому пригодится SMS машина

Родительская таблица с текстом SMS и кнопкой "Проверить статус". Ниже код кнопки:

$key=$line['ID'];
$ti="";
$objects = data_table("Получатели SMS", "`status`=0 AND `Письмо`=".$key, "all");
foreach ($objects as $object){
  $id_sms=$object['ID письма'];
  if (!(empty($object['ID письма']))) {
	$sqlQuery = "SELECT * FROM `f_module_sms_archive` WHERE `uid`=$id_sms ";
	$res = sql_query($sqlQuery);
	$row = sql_fetch_array($res);
	if ($row['uid']) {
	  if ($row['error_text']){
		$ti=$row['error_text'];
		$new['Статус доставки']="Не доставлено";
	  }
	  else {
		$ti="Доставлено<br>".$row['sended_time'];
		$new['Статус доставки']="Доставлено";
	  }
	$new['Квитанция о доставке']=$t;
	}
	else {
	  $new['Статус доставки']="Неизвестно";
	  $ti = date ("Y-m-d H:i:s"). "Сведения отсутствуют";
	}
  $new['Квитанция о доставке']=$ti;
  update_query($new, "Получатели SMS", "`id`=".$object['ID']);
  }
}
В подчиненной таблице "Получатели SMS", куда я из родительской по заранее заданным признакам генерю адреса получателей SMS, есть поля "Письмо" - ссылка на ID записи в родительской базе, "Статус доставки" - список для последующей раскраски сообщений по итогам доставки и "Квитанция о доставке", куда пишется протокол доставки. В родительской базе есть кнопки "Сформировать получателей", "Разослать" и "Проверить статус".

Сообщение отредактировал Александр Пономарев: 01 Март 2015 - 11:24


#5 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 23 Февраль 2015 - 16:34

Просмотр сообщенияАлександр Пономарев (23 Февраль 2015 - 10:44) писал:

Спасибо, Анатолий.
Анатолий, это я?) Помещайте ваш код в теги специальные! ужасно смотрится!

#6 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 24 Февраль 2015 - 13:59

Просмотр сообщенияwondertalik (22 Февраль 2015 - 22:00) писал:

$sql = "SELECT * FROM ".константа." WHERE `uid` = ".intval($nID);
$result = sql_query($sql);
константу посмотрите в файле констант include/constants.php

В данном случае логичнее использовать хотя бы sql_select:

$result = sql_select(константа, "`uid` = ",$nID); // с запятой intval не нужен

Или вообще sql_select_array, если сразу нужна строка в массив:

$row = sql_select_array(константа, "`uid` = ",$nID);


#7 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 24 Февраль 2015 - 14:05

Цитата

а они при отправке писем дают в качестве return не ID, а UID. Давали бы ID

Не совсем понял, чем проще с ID, UID также уникален. Более того, UID более уникален в случае очереди писем, т.к. записи перемещаются в архив (а вначале встают в очередь, и значение возвращается именно в этот момент), при этом их ID может не совпадать со старым. Я уж не говорю про случаи удаления, когда ID может вести уже на другую запись. Поэтому только UID.

#8 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 01 Март 2015 - 11:11

Я убил несколько дней на изучение структуры ваших баз данных, чтобы понять, откуда брать данные по почтовым сообщениям и SMS. Чего проще описать в инструкции, как можно извлекать эти сведения, чтобы пользователям было легче? Я же не профессиональный кодер, я только учусь. Не скрою, процесс меня очень увлекает. Но подробныё хелпер с примерами очень бы помог разобраться. Вторую неделю долблюсь с тем, как координаты передвинутого маркера на Яндекс-карте занести в базу данных. Наверняка это дело плевое для опытного кодера. Почему бы не привести пример в том же форуме? Открываю новую тему и жду помощи. Думаю, что более подробное описание использования методов GET и POST с учетом особенностей clientbase очень бы заинтересовало продвинутых пользователей.

Просмотр сообщенияwondertalik (23 Февраль 2015 - 16:34) писал:

Анатолий, это я?) Помещайте ваш код в теги специальные! ужасно смотрится!

Насчет оформления кода спасибо за замечание - не знал, как это делать, но после замечания поискал и нашел кнопку <> в меню для оформления. Тоже, кстати, не описано нигде в инструкциях по-моему.
А насчет Анатолия - это у меня ассоциации с ником. Кстати, как вас зовут в реале? Часто использую ваши наработки с форума. Спасибо вам.

Сообщение отредактировал Александр Пономарев: 01 Март 2015 - 11:16


#9 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 01 Март 2015 - 11:23

Просмотр сообщенияCbCoder (24 Февраль 2015 - 13:59) писал:

В данном случае логичнее использовать хотя бы sql_select:

$result = sql_select(константа, "`uid` = ",$nID); // с запятой intval не нужен

Или вообще sql_select_array, если сразу нужна строка в массив:

$row = sql_select_array(константа, "`uid` = ",$nID);

Вы имеете в виду заменить код

SELECT * FROM `f_module_sms_archive` WHERE `uid`=$id_sms ";
$res = sql_query($sqlQuery);
$row = sql_fetch_array($res);

на код

$row= sql_select_array(`f_module_sms_archive`, "`uid` = ", $nID);

?
Кстати, до списка констант я так и не смог добраться почему-то. По крайней мере путем указания адреса в пути открытия страницы. Или это нужно делать через меню самой базы?

Сообщение отредактировал Александр Пономарев: 01 Март 2015 - 11:28


#10 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 01 Март 2015 - 11:42

Просмотр сообщенияАлександр Пономарев (01 Март 2015 - 11:11) писал:

Насчет оформления кода спасибо за замечание - не знал, как это делать, но после замечания поискал и нашел кнопку <> в меню для оформления. Тоже, кстати, не описано нигде в инструкциях по-моему.
Это форум, и довольно популярного движка. В инете полно хау-ту как им пользоваться

Просмотр сообщенияАлександр Пономарев (01 Март 2015 - 11:11) писал:

А насчет Анатолия - это у меня ассоциации с ником. Кстати, как вас зовут в реале? Часто использую ваши наработки с форума. Спасибо вам.
Вы не первый). Но если внимательно прочитать, то вондер"Талик" от Виталик)

#11 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 02 Март 2015 - 15:01

Просмотр сообщенияАлександр Пономарев (01 Март 2015 - 11:23) писал:

Вы имеете в виду заменить код

$sqlQuery = "SELECT * FROM `f_module_sms_archive` WHERE `uid`=$id_sms ";
$res = sql_query($sqlQuery);
$row = sql_fetch_array($res);

на код

$row = sql_select_array(`f_module_sms_archive`, "`uid` = ",$nID);

?

Да, кавычки только забыли, вокруг имени таблицы:

$row = sql_select_array("`f_module_sms_archive`", "`uid` = ",$nID);

И еще у вас переменные разные (в оригинале $id_sms, во втором же случае - $nID)





Количество пользователей, читающих эту тему: 4

0 пользователей, 4 гостей, 0 анонимных