PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (2): [1] 2 »

> Найдено сообщений: 19
ivanm Отправлено: 21 Марта, 2017 - 12:16:12 • Тема: set_error_handler и название функции в namespace • Форум: Вопросы новичков

Ответов: 4
Просмотров: 366
БОЛЬШОЕ СПАСИБИЩЕ. Работает!
ivanm Отправлено: 17 Марта, 2017 - 16:20:05 • Тема: set_error_handler и название функции в namespace • Форум: Вопросы новичков

Ответов: 4
Просмотров: 366
Хочу перехватывать ошибки в свою функцию

только функция у меня подключается файлом и лежит там в нейспейсе:
PHP:
скопировать код в буфер обмена
  1. require_once 'functions/myfunctions';
  2. use \config\functions as functions;

если после этого обращаться к функции
PHP:
скопировать код в буфер обмена
  1. functions\myFunctionName($params);

то все работает.
А вот как прописать название этой функции в set_error_handler?
Вот так не получается:
PHP:
скопировать код в буфер обмена
  1. set_error_handler("functions\myFunctionName", E_ALL); // не работает
  2. set_error_handler("{functions\myFunctionName}", E_ALL); // тоже не работает
  3. set_error_handler('functions\myFunctionName', E_ALL); // ну не работает

как правильно записать??? оно ж в кавычках...
ivanm Отправлено: 04 Октября, 2016 - 14:55:32 • Тема: работа с библиотекой XMPPHP, отправка сообщения • Форум: Вопросы новичков

Ответов: 4
Просмотров: 1027
НУ ВСЕ! Закипел чайничек....
-по XMPPHP - не советуют использовать - устарела Недовольство, огорчение
-fabiang/xmpp - я непойму как поставить, где пути прописать..да и composer какойто нужен
(если дадите какой то мануал чтобы совсем уж по пальцам - буду признателен)
-наверное неплохой вариант накопал - поставил на сервер sendxmpp (перлскрипт - устанавливается из официального репозитория):
пробовал сделать вот так:
PHP:
скопировать код в буфер обмена
  1. print_r(shell_exec('sendxmpp -t -v -u sendername -p password -j server.ua:5222 -s "hello" receivername'));

но видимо чтото с синтаксисом не то - видает в терминале:
sendxmpp: ssl_verify: 1
sendxmpp: tls_ca_path:
sendxmpp: Connect: 1
sendxmpp: AuthSend: ok
и виснет терминал...(^C)

вобщем проблемка у меня с xmpp... уже неделю бьюсь об стенку....
(Добавление)
САМ ОТВЕЧАЮ НА СВОЙ ВОПРОС:
-наилучший способ - это использовать скрипт sendxmpp установленый на сервере
(например у меня так: aptitude install sendxmpp)

из php отсылаем сообщение так:
PHP:
скопировать код в буфер обмена
  1. shell_exec('echo proba | sendxmpp -t -v -j server.ua:5222 -u sendername -p password receivername@server.ua')


ХУХ...
ivanm Отправлено: 02 Октября, 2016 - 06:57:27 • Тема: работа с библиотекой XMPPHP, отправка сообщения • Форум: Вопросы новичков

Ответов: 4
Просмотров: 1027
Мелкий пишет:
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
если чтото надо разрешить на сервере - подскажите как...


PS: возможно есть решение(для freebsd):
https://kamihouse[dot]wordpress[dot]com/[dot][dot][dot]ssl-com-php-5-6/
и тут еще немного об этом:
http://forum[dot]codeigniter[dot]com/thread-590[dot]html

но как применить для моего дебиана - так и не понял Недовольство, огорчение


PS: дописал:
stream_context_set_option($this->_smtp_connect, 'ssl', 'verify_host', FALSE);
stream_context_set_option($this->_smtp_connect, 'ssl', 'verify_peer_name', FALSE);
stream_context_set_option($this->_smtp_connect, 'ssl', 'verify_peer', FALSE);
перед:
stream_socket_enable_crypto($this->socket, true, STREAM_CRYPTO_METHOD_SSLv23_CLIENT);
выбивает:
PHP Warning: stream_context_set_option() expects parameter 1 to be resource, null given in
PHP Warning: stream_context_set_option() expects parameter 1 to be resource, null given in
PHP Warning: stream_context_set_option() expects parameter 1 to be resource, null given in
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

PS: пробовал еще сделать как сдесь:
http://forum[dot]directadmin[dot]com/sho[dot][dot][dot]read.php?t=50885
но тоже не помогло...либо не то чтото сделал

вообщим больше ничего не гуглится.... помогите собрать все вместе...
ivanm Отправлено: 30 Сентября, 2016 - 13:03:08 • Тема: работа с библиотекой XMPPHP, отправка сообщения • Форум: Вопросы новичков

Ответов: 4
Просмотров: 1027
Сервер Debian, php 7.0

Работаю с библиотекой XMPPHP для отправки сообщений на жабер.

PHP:
скопировать код в буфер обмена
  1. $content=array('adr'=>'xxxk4@im.xxx.xx.ua', 'title'=>'proba', 'msg'=>'проба xmpp');
  2. include(CONF.'lib/jabber/XMPPHP/XMPP.php');
  3. $conn = new XMPPHP_XMPP('хх.ххх.хх.ua', 5222, 'хххk_1', 'pass', 'xmpphp', 'xx.xxx.xx.ua',
  4.         $printlog=false, $loglevel=XMPPHP_Log::LEVEL_INFO);
  5. foreach($content as $k=>$v){
  6. try{
  7. $conn->connect();
  8. $conn->processUntil('session_start');
  9. $conn->presence();
  10. $conn->message($content['adr'], $content['title'].':'.$content['msg']);
  11. $conn->disconnect();
  12. }catch(XMPPHP_Exception $err){die ($err->getMessage()); // return ($err->getMessage());}
  13. }


библиотеку уже модифицировал для работы с 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

в строке 394 библиотеки вот такое:
PHP:
скопировать код в буфер обмена
  1. stream_socket_enable_crypto($this->socket, true, STREAM_CRYPTO_METHOD_SSLv23_CLIENT);


Внятного мануала именно по библиотеке XMPPHP как это исправить - не нашел..
Помогите кто чем может Недовольство, огорчение
ivanm Отправлено: 22 Декабря, 2014 - 13:33:31 • Тема: отправка писем по smtp с атачами и без • Форум: Работа с сетью

Ответов: 0
Просмотров: 883
нужна функция для отправки писем по smtp c вложениями. Для этого модифицировал уже написанную функцию для отправки просто письма(добавил разделитель). После отправки -письмо приходит с непонятным текстом и без вложений
Чувствую что что-то с кодировкой... помогите разобраться что к чему:
текст функции:
PHP:
скопировать код в буфер обмена
  1.  
  2. function smtpmail( $rcpt, $rcpt_name, $subject, $message, $arrfiles ){
  3.         $from='zzz@domain.com';
  4.         $from_name='ззз';
  5.         $port='25';
  6.         $domain='domain.com';
  7.         $host='smtp.domain.com';
  8.         $login='zzz@domain.com';
  9.         $passw='zzz123';
  10.         # $rcpt='aaa@gmail.com';
  11.         # $rcpt_name='ААА'; // Імя отримувача
  12.         # $subject='Ббб';
  13.         # $message='Привет..как дела...'; // текст листа
  14.         # $arrfiles - массив з ссылками на файли: $k-название файла в письме (xxx.pdf), $v- адрес файла на сервере
  15.        
  16.         $gluestr='----------AaBbCcDdEeFfGgHh'; // строка расделитель
  17.        
  18.         $header.='From: =?utf-8?B?'.base64_encode($from_name).'?= <'.$from.'>'."\r\n";
  19.         $header.='To: =?utf-8?B?'.base64_encode($rcpt_name).'?= <'.$rcpt.'>'."\r\n";
  20.         $header.='Reply-To: <'.$from.'>'."\r\n";
  21.         $header.='Subject: =?utf-8?B?'.base64_encode($subject).'?='."\r\n";      //$subject="=?utf-8?B?{$subject}?=";
  22.         $header.='MIME-Version: 1.0'."\r\n";
  23.         $header.='User-Agent: ZDLOGISTIC Mail Robot'."\r\n";
  24.         $header.='Date: '.date('r')."\r\n";
  25.         $header.='Content-Type: multipart/mixed; boundary="'.$gluestr.'"'."\r\n";
  26.         //$header.='Content-Type: text/plain; charset="utf-8"'."\r\n";
  27.         //$header.='Content-Transfer-Encoding: base64'."\r\n";
  28.        
  29.         $message=$gluestr."\r\n".'Content-Type: text/plain; charset="utf-8"'."\r\n".'Content-Transfer-Encoding: base64'."\r\n\r\n".$message."\r\n".$gluestr;
  30.        
  31.         if(count($arrfiles)>0){ // якщо є файли
  32.                 foreach($arrfiles as $k=>$v){
  33.                         $fp=fopen($v,'rb'); // откриваємо файл
  34.                         $code_file = chunk_split(base64_encode(fread($fp, filesize($v))));
  35.                         fclose($fp);
  36.                         $message=$message."\r\n".'Content-Type: application/octet-stream; name="'.$k.'"'."\r\n".'Content-Transfer-Encoding: base64'."\r\n".
  37.                                                           'Content-Disposition: attachment; filename="'.$k.'"'."\r\n\r\n".$code_file."\r\n".$gluestr;
  38.                 }
  39.         }
  40.        
  41.         echo '<textarea name="inf" type="text" rows="80" cols="160">',$message,'</textarea>';
  42.        
  43.         $smtp_conn=fsockopen($host,$port,$errno,$errstr,10); if(get_data($smtp_conn)!='220'){return false;}
  44.         fputs($smtp_conn,'EHLO zdlogistic'."\r\n"); if(get_data($smtp_conn)!='250'){return false;}
  45.         fputs($smtp_conn,'AUTH LOGIN'."\r\n"); if(get_data($smtp_conn)!='334'){return false;}
  46.         fputs($smtp_conn,base64_encode($login)."\r\n"); if(get_data($smtp_conn)!='334'){return false;}
  47.         fputs($smtp_conn,base64_encode($passw)."\r\n"); if(get_data($smtp_conn)!='235'){return false;}
  48.         $size_msg=mb_strlen($header."\r\n".$message,'UTF-8'); // кількість символів в повідомленні
  49.         fputs($smtp_conn,'MAIL FROM:<'.$from.'> SIZE='.$size_msg."\r\n"); if(get_data($smtp_conn)!='250'){return false;}
  50.         fputs($smtp_conn,'RCPT TO:<'.$rcpt.'>'."\r\n"); if(get_data($smtp_conn)!='250'){return false;}
  51.         fputs($smtp_conn,'DATA'."\r\n"); if(get_data($smtp_conn)!='354'){return false;}
  52.         fputs($smtp_conn,$header."\r\n".base64_encode($message)."\r\n.\r\n"); if(get_data($smtp_conn)!='250'){return false;}
  53.         fputs($smtp_conn,'QUIT'."\r\n"); if(get_data($smtp_conn)!='221'){return false;}
  54.        
  55.         return true;
  56. }
  57.  


текст письма приходит вот такой вот:
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"

LS0tLS0tLS0tLUFhQmJDY0RkRWVGZkdnSGgNCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiDQpDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQNCg0KNjA3ODk2NjYg0JrQmNCH0JIt0JLQntCb0JjQndCh0KzQmtCY0JnCoCA9PiDQl9CQ0J/QntCg0IbQltCW0K8t0JvQhtCS0JXCoCA9PiDQstC40LQgOTsNCjY4NzAwMzQzINCW0JjQotCe0JzQmNCgwqAgPT4g0JrQoNCY0JLQmNCZINCg0IbQk8KgID0+INCy0LjQtCA0LzUwMS81MDk7MTc7DQo1NjA2ODk2OCDQmtCY0IfQki3QktCe0JvQmNCd0KHQrNCa0JjQmcKgID0+INCX0JDQn9Ce0KDQhtCW0JbQry3Qm9CG0JLQlcKgID0+INCy0LjQtCA5Ow0KNjAzODkyNTEg0JrQntCg0J7QodCi0JXQndCsLSDQltCY0KLQntCc0JjQoNCh0KzQmtCY0JnCoCA9PiDQmtCg0JjQktCY0Jkg0KDQhtCTwqAgPT4g0LLQuNC0IDQvNTAxOw0KDQotLS0tLS0tLS0tQWFCYkNjRGRFZUZmR2dIaA0KQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07IG5hbWU9IjYwNzg5NjY2LnBkZiINCkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NA0KQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9IjYwNzg5NjY2LnBkZiINCg0KDQoNCi0tLS0tLS0tLS1BYUJiQ2NEZEVlRmZHZ0hoDQpDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTsgbmFtZT0iNjg3MDAzNDMucGRmIg0KQ29udG
VudC1UcmFuc2Zlci1FbmNvZGluZzogYm FzZTY0DQpDb250ZW50LURpc3Bvc2l0aW 9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT 0iNjg3MDAzNDMucGRmIg0KDQoNCg0KLS 0tLS0tLS0tLUFhQmJDY0RkRWVGZkdnSG gNCkNvbnRlbnQtVHlwZTogYXBwbGljYX Rpb24vb2N0ZXQtc3RyZWFtOyBuYW1lPS I1NjA2ODk2OC5wZGYiDQpDb250ZW50LV RyYW5zZmVyLUVuY29kaW5nOiBiYXNlNj QNCkNvbnRlbnQtRGlzcG9zaXRpb246IG F0dGFjaG1lbnQ7IGZpbGVuYW1lPSI1Nj A2ODk2OC5wZGYiDQoNCg0KDQotLS0tLS 0tLS0tQWFCYkNjRGRFZUZmR2dIaA0KQ2 9udGVudC1UeXBlOiBhcHBsaWNhdGlvbi 9vY3RldC1zdHJlYW07IG5hbWU9IjYwMz g5MjUxLnBkZiINCkNvbnRlbnQtVHJhbn NmZXItRW5jb2Rpbmc6IGJhc2U2NA0KQ2 9udGVudC1EaXNwb3NpdGlvbjogYXR0YW NobWVudDsgZmlsZW5hbWU9IjYwMzg5Mj UxLnBkZiINCg0KDQoNCi0tLS0tLS0tLS 1BYUJiQ2NEZEVlRmZHZ0ho
ivanm Отправлено: 24 Ноября, 2014 - 14:15:15 • Тема: Объединение двух запросов в один • Форум: Работа с СУБД

Ответов: 4
Просмотров: 958
Спасибо. В принципе наверное самое логичное решение - еще один запрос с ценниками и потом выбирать из массива.
Ну или переписывать главный запрос уже исходя из позиции множества видов join к транспортному средству..
ivanm Отправлено: 24 Ноября, 2014 - 09:53:12 • Тема: Объединение двух запросов в один • Форум: Работа с СУБД

Ответов: 4
Просмотров: 958
1.Затем что один запрос будет работать гораздо быстрее чем запрос в цикле.
2. $grscr=explode(';',$row['grscr']) устраивает. Тут просто нужно перечислить виды продукции по каждому транспортному средству в таблицу, тем более в GROUP_COMCAT там сортировка стоит-поэтому достаю значения нормально.

Может у кого-то есть еще мысли..
ivanm Отправлено: 21 Ноября, 2014 - 14:46:35 • Тема: Объединение двух запросов в один • Форум: Работа с СУБД

Ответов: 4
Просмотров: 958
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 20.04.2014 5 2100
2 05.04.2014 5 2300
...
3 20.04.2014 8 1950
4 06.04.2014 8 1520
...

Необходимо в одном запросе получить:
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.
ivanm Отправлено: 20 Августа, 2013 - 10:34:37 • Тема: MySql - много параметров • Форум: SQL и Архитектура БД

Ответов: 4
Просмотров: 37
По этому поводу возникли еще одни грабли :
- Нужно предыдущий запрос вложить в другой запрос :
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. $query_string = " SELECT xxx, yyy,
  3.                          ( SELECT `pr`,
  4.                               (
  5.                                  IF(`p1`=$vp1, 1, IF(`p1`=0,0,-1))+
  6.                                  IF(`p2`=$vp2, 1, IF(`p2`=0,0,-1))+
  7.                                  IF(`p3`=$vp3, 1, IF(`p3`=0,0,-1))
  8.                                ) AS np
  9.                             FROM `mytable`
  10.                             ORDER BY np desc LIMIT 1
  11.                          ) AS zzz FROM kkkk";
  12.  

тоесь результат вложенного запроса должен стать полем `zzz`
......не работает ! и в принципе знаю почему! потому что вложенный запрос должен вернуть "одно поле"....а он возвращает "два поля". Но второе ж поле мне нужно только для того чтобы правильно отсортировать записи!
Можно его как-то не выводить???
ivanm Отправлено: 19 Августа, 2013 - 12:59:35 • Тема: MySql - много параметров • Форум: SQL и Архитектура БД

Ответов: 4
Просмотров: 37
... Продолжаю сам.....
Пока вопрос решил вот таким вот образом :
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. $query_string = "SELECT `pr`, `p1`, `p2`, `p3`,
  3.                                         (
  4.                                          IF(`p1`=$vp1, 1, IF(`p1`=0,0,-1))+
  5.                                          IF(`p2`=$vp2, 1, IF(`p2`=0,0,-1))+
  6.                                          IF(`p3`=$vp3, 1, IF(`p3`=0,0,-1))
  7.                                         ) as np
  8.                                 FROM `mytable`
  9.                                 ORDER BY np desc LIMIT 1";

т.е. сортировкой по значимости: формируем поле `np` где будет уровень значимости записи и по нему сортируем, а потом отбираем только одну запись в которой значимость максимальная.
Значимость определяется так : если совпадение - то поле +1; если ноль(поле не определено - то 0; если несовпадение - то -1.
Но терзают смутные сомнения .... что это все через жопу...
ivanm Отправлено: 19 Августа, 2013 - 10:40:12 • Тема: MySql - много параметров • Форум: SQL и Архитектура БД

Ответов: 4
Просмотров: 37
...Мысли вслух...
1. вивести записи где есть хоть какие-то совпадения:
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. $query_string = "SELECT `pr`, `p1`, `p2`, `p3` FROM `mytable`
  3. WHERE  `p1`=$vp1 OR `p2`=$vp2 OR `p3`=$vp3"
  4.  

2. теперь из записей выбрать ту - где совпадение по максимальному количеству параметров.
...это пока не решил...может как-то через GROUP BY ?
ivanm Отправлено: 16 Августа, 2013 - 12:39:51 • Тема: MySql - много параметров • Форум: SQL и Архитектура БД

Ответов: 4
Просмотров: 37
1. Есть таблица mytable : цена и параметры 1, 2, 3

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. `mytable` :
  3.  -----------------------
  4.  | Цена | П1 | П2 | П3 |
  5.  |`pr`  |`p1`|`p2`|`p3`|
  6.  -----------------------
  7.  | 700  |  0 | 0  | 0  |
  8.  -----------------------
  9.  | 1000 | 10 | 0  | 0  |
  10.  -----------------------
  11.  | 1100 | 10 | 1  |  0 |
  12.  -----------------------
  13.  | 599  |  7 |  0 | 0  |
  14.  -----------------------
  15.  | 420  | 25 | 4  | 1  |
  16.  -----------------------


** 0 (Ноль) - Это считается отсутствием параметра.

2. есть форма где пользователь выбирает(или вводит) параметры :
(параметры могут быть выбраны, или не выбраны, или частично выбраны,
или их может отобрать программа - короче они есть... в переменных:
(int)$vp1, (int)$vp2, (int)$vp3, )


3. В зависимости от введенных параметров запрос должен вывести цену.

Пример1 : не совпадение ни по одному параметру, введенному пользователем - запрос должен выдать - 700.
Пример2 : параметр1=10, другие - не совпали - запрос должен выдать - 1000.
Пример3 : параметр1=10, Параметр3=3, другие - не совпали. запрос должен выдать - 1000 (так как в третьей колонке нету значения с числом 3).

4. ПОМОГИТЕ ПОЖАЛУЙСТА СОСТАВИТЬ ЗАПРОС...или наведитена мысль куда копать Улыбка
ivanm Отправлено: 27 Марта, 2013 - 12:34:28 • Тема: SELECT LIKE ESCAPE • Форум: Вопросы новичков

Ответов: 4
Просмотров: 196
[quote=DeepVarvar][/quote]
Большое спасибо. А все гениальное - просто. Надо было просто сделать без ESCAPE
ivanm Отправлено: 27 Марта, 2013 - 09:54:05 • Тема: SELECT LIKE ESCAPE • Форум: Вопросы новичков

Ответов: 4
Просмотров: 196
[quote=DeepVarvar][/quote] с экранированием как раз у меня все нормально! ЗАПРОС НЕ РАБОТАЕТ! тем более что по ваших ссылках : "Замечание: mysql_escape_string() не экраинрует % и _.", "Замечание: mysql_real_escape_string() не экранирует символы % и _."

Страниц (2): [1] 2 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB