НУ ВСЕ! Закипел чайничек....
-по XMPPHP - не советуют использовать - устарела
-fabiang/xmpp - я непойму как поставить, где пути прописать..да и composer какойто нужен
(если дадите какой то мануал чтобы совсем уж по пальцам - буду признателен)
-наверное неплохой вариант накопал - поставил на сервер sendxmpp (перлскрипт - устанавливается из официального репозитория):
пробовал сделать вот так:
но видимо чтото с синтаксисом не то - видает в терминале:
sendxmpp: ssl_verify: 1
sendxmpp: tls_ca_path:
sendxmpp: Connect: 1
sendxmpp: AuthSend: ok
и виснет терминал...(^C)
вобщем проблемка у меня с xmpp... уже неделю бьюсь об стенку.... (Добавление) САМ ОТВЕЧАЮ НА СВОЙ ВОПРОС:
-наилучший способ - это использовать скрипт sendxmpp установленый на сервере
(например у меня так: aptitude install sendxmpp)
SSLv2 и v3 давно имеют известные уязвимости. Видимо, на вашем XMPP-сервере эти режимы отключены.
Попробуйте STREAM_CRYPTO_METHOD_TLS_CLIENT, или вообще убрать 3 аргумент (с 5.6 он опционален)
-если STREAM_CRYPTO_METHOD_TLS_CLIENT - пишет :
Warning: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed in... -без параметра - пишет что если шифрование указано в true то третий параметр обязателен - если ставлю false во втором параметре и добавляю $conn->useEncryption(false):
PHP Warning: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages:\nerror:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed in - если STREAM_CRYPTO_METHOD_TLS_SERVER:
PHP Warning: stream_socket_enable_crypto(): SSL: Handshake timed out in /var/conf/lib/jabber/XMPPHP/XMPP .php on line 395 -если STREAM_CRYPTO_METHOD_ANY_CLIENT:
Warning: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages:\nerror:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed in -если STREAM_CRYPTO_METHOD_ANY_SERVER:
PHP Warning: stream_socket_enable_crypto(): SSL: Handshake timed out in STREAM_CRYPTO_METHOD_SSLv3_CLIENT
PHP Warning: stream_socket_enable_crypto(): SSLv3 unavailable in the OpenSSL library against which PHP is linked in STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT
PHP Warning: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages:\nerror:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed in
если чтото надо разрешить на сервере - подскажите как...
библиотеку уже модифицировал для работы с php7 (есть мануал в сети как это сделать, в основном там замена split na explode и добавка фигурных скобок)
Валиться библиотека перестала...но теперь со стороны сервера
после глубокого таймаута в несколько минут - вылазит Warning:
Warning: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed in /lib/jabber/XMPPHP/XMPP.php on line 394
нужна функция для отправки писем по smtp c вложениями. Для этого модифицировал уже написанную функцию для отправки просто письма(добавил разделитель). После отправки -письмо приходит с непонятным текстом и без вложений
Чувствую что что-то с кодировкой... помогите разобраться что к чему:
текст функции:
текст письма приходит вот такой вот:
Subject: =?utf-8?B?0JLRltC00LLQsNC90YLQsNC20LXQvdC+?=
MIME-Version: 1.0
User-Agent: ZDLOGISTIC Mail Robot
Date: Mon, 22 Dec 2014 12:07:34 +0000
Content-Type: multipart/mixed; boundary="----------AaBbCcDdEeFfGgHh"
Спасибо. В принципе наверное самое логичное решение - еще один запрос с ценниками и потом выбирать из массива.
Ну или переписывать главный запрос уже исходя из позиции множества видов join к транспортному средству..
1.Затем что один запрос будет работать гораздо быстрее чем запрос в цикле.
2. $grscr=explode(';',$row['grscr']) устраивает. Тут просто нужно перечислить виды продукции по каждому транспортному средству в таблицу, тем более в GROUP_COMCAT там сортировка стоит-поэтому достаю значения нормально.
tlistvg - таблица с данными по транспортному средству
-idn *mediumint * - идент. транспортного средства, автоинскремент
-dnakl *date* - дата накладной(по ней формируется цена в справочнике цен)
-dtinput
-brutto
-tara
-netto
- ...
транспортное средство везет несколько видов продукции.
tscrweight - таблица видов продукции и их вес в тр.средстве
idn *int* - идент.продукции, автоинскремент
listvg *mediumint* - идент. транспортного средства (idn таблицы tlistvg)
scr *smallint* - код вида продукции
scrw - ч.вес по виду
tpricezd - таблица, справочник цен по видам продукции
idn *smallint* - идент., автоинскремент
prdate *date* - дата начала дейст. цены
scr *smallint* - вид продукции((idn таблицы tscrweight)
prf - цена
Необходимо в одном запросе получить:
1. данные по транспортному средству (это понятно)
2. виды которые оно перевозит (и это понятно LEFT JOIN)
3. самое главное, актуальная цена вида из справочника
цен на дату отгрузки транспортного средства (это сейчас реализовано запросом в цикле.).
4.При всем при этом необходимо чтобы запрос выдавал каждой строкой по транспортному
средству, а не по видам - поэтому данные по видам групируются GROUP_CONCAT а потом разбиваются в цикле по explode.
Сейчас это реализовано таким образом:
$query_string="SELECT tlistvg.`idn`, tlistvg.`dnakl`,...,
GROUP_CONCAT(tscrweight.`scr` ORDER BY tscrweight.`idn` ASC SEPARATOR ';') AS grscr,
GROUP_CONCAT(tscrweight.`scrw` ORDER BY tscrweight.`idn` ASC SEPARATOR ';') AS grscrw
FROM `tlistvg`
LEFT JOIN `tscrweight` ON tlistvg.`idn` = tscrweight.`listvg`
GROUP BY tlistvg.`idn` ORDER BY tlistvg.`dtinput` desc";
$result_id = mysql_query($query_string, $link);
while($row = mysql_fetch_array($result_id, MYSQL_ASSOC))
{
...
$grscr=explode(';',$row['grscr']); // расбираем коды видов продукции по этому транспортному средству
$grscrw=explode(';',$row['grscrw']); // и другие данные....
foreach($grscr as $k=>$v){ // для каждого вида ищем актуальную цену(выводим все цены по виду в которых дата цены меньше или равна
.. дате накладной - так как цена формируется по накладной - и берем максимальную дату
$qstr='SELECT tpricezd.`prf' AS pricezd FROM `tpricezd`
WHERE tpricezd.`scr`='.(int)$v." AND tpricezd.`prdate`<='$prdate'
ORDER BY tpricezd.`prdate` DESC LIMIT 1";
$rid = mysql_query($qstr, $link) or die(mysql_error());
$rw = mysql_fetch_array($rid, MYSQL_ASSOC);
$pricezd=decode($rw['pricezd']);
echo '<td>',$pricezd,'</td>'; // искомая цена
}
}
Сразу возникнут вопросы:
1.почему цены нужно выбирать из справочника цен, а не ввести дополнительное поле цены в таблицу по видам?
- Потому что нужно именно так, отправок в день много, а справочник цен может перебиваться задним числом
и изменением одной цены в справочнике - изменять цены по всем отправкам с этой ценой (т.е. не нужно
постоянно перебивать цены по каждому виду в каждой отправке).
По закрытию месяца когда все цены будут отлажены, фиксируем цены уже в табличку по видам.
2. Зачем надо групировать виды по GROUP_CONCAT.
- Затем что обработка первого запроса - это многокилобайтный код...и он изначально написан
под транспортное средство - а потом добавили виды...и все другое...соответственно переписывать
весь код нет ни желания ни времени.
ВООБЩИМ ВОПРОС - можно ли как то вписать указанный в цикле запрос№2 в запрос №1.
тоесь результат вложенного запроса должен стать полем `zzz`
......не работает ! и в принципе знаю почему! потому что вложенный запрос должен вернуть "одно поле"....а он возвращает "два поля". Но второе ж поле мне нужно только для того чтобы правильно отсортировать записи!
Можно его как-то не выводить???
т.е. сортировкой по значимости: формируем поле `np` где будет уровень значимости записи и по нему сортируем, а потом отбираем только одну запись в которой значимость максимальная.
Значимость определяется так : если совпадение - то поле +1; если ноль(поле не определено - то 0; если несовпадение - то -1.
Но терзают смутные сомнения .... что это все через жопу...
** 0 (Ноль) - Это считается отсутствием параметра.
2. есть форма где пользователь выбирает(или вводит) параметры :
(параметры могут быть выбраны, или не выбраны, или частично выбраны,
или их может отобрать программа - короче они есть... в переменных:
(int)$vp1, (int)$vp2, (int)$vp3, )
3. В зависимости от введенных параметров запрос должен вывести цену.
Пример1 : не совпадение ни по одному параметру, введенному пользователем - запрос должен выдать - 700.
Пример2 : параметр1=10, другие - не совпали - запрос должен выдать - 1000.
Пример3 : параметр1=10, Параметр3=3, другие - не совпали. запрос должен выдать - 1000 (так как в третьей колонке нету значения с числом 3).
4. ПОМОГИТЕ ПОЖАЛУЙСТА СОСТАВИТЬ ЗАПРОС...или наведитена мысль куда копать
[quote=DeepVarvar][/quote] с экранированием как раз у меня все нормально! ЗАПРОС НЕ РАБОТАЕТ! тем более что по ваших ссылках : "Замечание: mysql_escape_string() не экраинрует % и _.", "Замечание: mysql_real_escape_string() не экранирует символы % и _."