PHP.SU

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

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

> Найдено сообщений: 40
Polaris Отправлено: 05 Октября, 2010 - 09:28:23 • Тема: Проблема с поиском • Форум: Программирование на PHP

Ответов: 3
Просмотров: 396
AdMeen пишет:
собственно почему бы не передавать строку через GET?


Там результаты поиска могут использоваться еще в нескольких документах, в общем-то. Подумалось, в сессии оно правильнее будет.
Polaris Отправлено: 05 Октября, 2010 - 07:24:56 • Тема: Проблема с поиском • Форум: Программирование на PHP

Ответов: 3
Просмотров: 396
Не могу разобраться с такой штукой.
Есть форма поиска, перенаправляет на страницу с результатами с возможностью постраничного просмотра и сортировки. Строку с where для запроса я храню в сессии.

Ситуация такая. К примеру, хочу сделать 2 разных поиска и сравнить результаты.
Открываю одну вкладку браузера с формой поиска, задаю параметры и получаю результат. Открываю вторую вкладку браузера с формой поиска, задаю новые параметры поиска, получаю другой результат. Потом возвращаюсь в первую, делаю сортировку результата или переход на новую страницу. Снова иду во вторую, тоже делаю переход или сортировку и - опа! - результат поиска заменяется на результат из 1й страницы. Все из-за того, что храню фактически одну строку с параметрами поиска в сессии.
Как в такой ситуации сделать правильно? Использовать массив строк в сессии что ли?
Может, где-то пример можно глянуть, чувствую, что все должно быть несложно - везде, где ни посмотрю, это работает правильно.
Polaris Отправлено: 19 Апреля, 2010 - 08:53:37 • Тема: Метод POST и кнопка "Назад" в IE • Форум: Программирование на PHP

Ответов: 5
Просмотров: 768
Подумал и нашел более простой вариант. С формы поиска перенаправляешь не прямо на скрипт с выводом результатов, а на какой-либо промежуточный скрипт, где сохраняешь в сессии параметры поиска. А оттуда уже делаешь header('location: результат_поиска.php').
Вроде работает.
Polaris Отправлено: 15 Апреля, 2010 - 11:50:15 • Тема: Метод POST и кнопка "Назад" в IE • Форум: Программирование на PHP

Ответов: 5
Просмотров: 768
То есть, единственное решение в данном случае - метод GET вместо POST?
Polaris Отправлено: 15 Апреля, 2010 - 07:47:57 • Тема: Метод POST и кнопка "Назад" в IE • Форум: Программирование на PHP

Ответов: 5
Просмотров: 768
Чувствую, что тема не новая, но по поиску ничего не нашел. Однако
Есть страница с формой поиска, данные отправляются методом POST. Есть страница с многостраничными результатами поиска. Когда там переходишь по страницам поиска и хочешь вернуться по кнопке "Назад" - в IE получаешь "Веб-страница просрочена".

Как с этим бороться, помимо переделки метода на GET?
Polaris Отправлено: 05 Апреля, 2010 - 12:34:42 • Тема: POST Content-Length of X bytes exceeds the limit of Y bytes in Unknown on line 0 • Форум: Программирование на PHP

Ответов: 5
Просмотров: 2969
JustUserR пишет:

Как вариант можно использовать для админки отдельный CGI-скрипт в режиме NPH - он будет самостоятельно получать HTTP-запрос от пользователя и если к моменту окончания HTTP-заголовка становится очеидно что он не имеет прав доступа то обрывать соединение На PHP такое не выйдет по вышеуказанным причинам


эх, cgi не вариант - отключено вообще...
Polaris Отправлено: 05 Апреля, 2010 - 05:57:39 • Тема: POST Content-Length of X bytes exceeds the limit of Y bytes in Unknown on line 0 • Форум: Программирование на PHP

Ответов: 5
Просмотров: 2969
JustUserR пишет:
В принципе если ваш PHP-скрипт не закрыт firewall-ом и HTTP-запросы до него доходят - то ничто не мешает посылать на него длинные POST-запросы с файлами возможно в целях взлома - ведь даже если сам PHP-скрипт выдаст ошибку о том что соотвествующих прав нет то он выдаст это после загрузки файлов
Есть одно очень важное правило PHP - загрузка всех GET/POST-запросов происходит ДО начала исполнения PHP-кода из вашего PHP-скрипта - и вы никак внутри него не можете контролировать размер передаваемого файла - разве что размерами лимитирующий переменных в php.ini Из-за этого правила полностью на PHP нельзя реализовать загрузчик файлов с прогресс-баром и вероятно это правило сказывается у вас


Да, у меня стоит ограничение на post_max_size 2M и upload_max_filesize 2M в php.ini. Заметил, что несколько увеличился входящий http-трафик на сервере, что в общем-то нежелательно...
Есть ли какие-то возможно общие рекомендации, помимо закрытия фаерволом доступа на админку?
Polaris Отправлено: 02 Апреля, 2010 - 06:27:13 • Тема: POST Content-Length of X bytes exceeds the limit of Y bytes in Unknown on line 0 • Форум: Программирование на PHP

Ответов: 5
Просмотров: 2969
Версия php 5.2.10.
Стабильно вижу в логах такую ошибку 5-6 раз в день. В принципе, нагуглил и прочитал про это вот что:

Цитата:

Закачка файлов в PHP: не забываем про post_max_size
PHP // 24 Января, 2008 // под утро
Обычное дело ограничить размер закачиваемых файлов при помощи upload_max_filesize, но в конфигах есть еще одна важная опция post_max_size, ограничивающая размер POST-данных (соотношение должно быть такое memory_limit > post_max_size > upload_max_filesize). Думаю php-разработчикам, читающим мой блог будет интересно узнать об одном side-effect’е, который до некоторого времени считался багом типа documentation issue (т.е. не был никак описан) и о котором я сам даже не подозревал.

Как следует из определения, post_max_size ограничивает размер передаваемых данных, поэтому php резервирует в памяти буффер именно этого размера. Что происходит, если объем данных больше этой величины (например закачиваемый файл имеет размер больше ожидаемого)? Все очень просто — php сбрасывает $_POST и $_FILES, как если бы upload вобще не происходил, при этом в логах следующее:

PHP Warning: POST Content-Length of X bytes exceeds the limit of Y bytes in Unknown on line 0Это и есть тот самый side-effect. Действительно, если в буфер влезает только часть POST-данных, то php-скрипт может повести себя непредсказуемо. Чтобы минимизировать ущерб — php не передаст в ваш скрипт вообще ничего.

Если срабатывает ограничение upload_max_filesize, мы можем об этом узнать из массива $_FILES, его соответствующий элемент ‘error’ будет содержать код ошибки UPLOAD_ERR_INI_SIZE. В случае же срабатывания ограничения post_max_size, как я уже описал, $_FILES пустой, а ошибку сдетектировать и пользователю написать надо. К счастью нам все еще доступен $_GET, поэтому решаем добавлением GET-параметра в action атрибут нашей формы:

<form enctype="multipart/form-data" method="post" action="?doing_upload=1">
...
</form>Теперь в скрипте, принимаюшем форму мы можем проверить существование параметра doing_upload и что $_FILES на самом деле пустой и красиво сказать пользователю, что он неправ. Примерно так:

if (isset($_GET['doing_upload']) &&
(! isset($_FILES) || (count($_FILES) == 0)))
print "Sorry, post_max_size is in effect";Если с закачкой файла в вашей форме есть еще какие-нибудь поля, то вы можете их потерять, если пользователь ошибётся с размером файла и при этом не знает о существовании кнопки Back (бывает и такое). Поэтому я рекомендую форму закачки файла вообще засунуть в отдельный iframe. Главный совет: если у вас в проекте есть форма закачки файлов, попробуйте превысить post_max_size и посмотрите как ваше приложение сможет с этим справиться.

Положите эту мелочь на свою полочку знаний и не повторяйте моих ошибок


Но проблема в том, что у меня форма для заливки файлов только в админке, куда доступ ограничен моим ip и запаролен через htaccess. Сообщения появляются, когда в админке я ничего не делаю.
В остальном на сайте есть формы, но без заливки файлов - обычные input и textarea с контролем количества вводимых символов и принудительной обрезкой.

Что это вообще такое и как это лечить?
Polaris Отправлено: 26 Марта, 2010 - 12:23:37 • Тема: jQuery autocomplete и кодировка • Форум: Программирование на PHP

Ответов: 7
Просмотров: 1344
Darksynx пишет:
Сделайте индекс в таблице для поля, по которому идёт поиск. В данном случае нагрузка сократится в разы


В данном случае я выбираю из view, а создание индексов на них вроде невозможно, только на базовую таблицу. А если в базовой таблице записей в десятки раз больше, имеет ли смысл создавать в ней индекс на искомое поле?

JustUserR пишет:
На самом деле это сильно неоптимизированное решение потому что именно соединение с базой занимает самое большое время - по крайней мере по сравнению с выполнением несложного запроса


А как лучше поступить? Можно ссылку или наводку хотя бы?

В принципе, проект не сказать чтобы сильно посещаемый, но хочется на будущее уметь.
Polaris Отправлено: 26 Марта, 2010 - 07:05:47 • Тема: jQuery autocomplete и кодировка • Форум: Программирование на PHP

Ответов: 7
Просмотров: 1344
SAD
Спасибо, так действительно работает.
Есть один момент - мне интересно, насколько верно с точки зрения нагрузки на сервер в autocomplete.php каждый раз открывать и закрывать соединение с базой? Смотрю top'ом нагрузку - несколько скачет, несущественно правда...
Polaris Отправлено: 25 Марта, 2010 - 12:38:17 • Тема: jQuery autocomplete и кодировка • Форум: Программирование на PHP

Ответов: 7
Просмотров: 1344
Проблема вроде достаточно распространенная, и читал уже много на эту тему, но никак не получается у меня. Суть в то, что надо организовать опережающий ввод текста, были выбраны jQuery (поскольку используется в проекте) и плагин к ней autocomplete.
Исходный проект достаточно старый и весь сделан в windows-1251. А jQuery, как я понял, понимает только utf.
Потому при вводе русских символов jQuery отдает кракозябры. Пробую в обработчике организовать конвертирование в windows-1251, тоже самое.

Обработчик autocomplete.php:

PHP:
скопировать код в буфер обмена
  1.  
  2. header('Content-type: text/html; charset=windows-1251');
  3. $q = $_GET['q'];
  4.  
  5. include("dbconnect.php");
  6.        
  7. if($result = $p_db->query ("select distinct name from street where name like '%$q%' order by name")) {
  8.         while($record = $result->fetch_row ())  {      
  9.                 echo iconv('utf-8', 'windows-1251', $record[0]).'\n';
  10.         }
  11.                
  12.         $result->free ();
  13. }
  14.        
  15. $p_db->close ();
  16.  


и сам джава-скрипт:


CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. function selectItem(li) {  
  3. }  
  4.  
  5. $(document).ready(function(){
  6.         $("#f_street").autocomplete("autocomplete.php", {
  7.                 delay:10,
  8.                 minChars:2,
  9.                 matchSubset:1,
  10.                 autoFill:true,
  11.                 matchContains:1,
  12.                 cacheLength:10,
  13.                 selectFirst:true,
  14.                 maxItemsToShow:10,
  15.                 onItemSelect:selectItem
  16.         });  
  17. });  
  18.  


f_street - это input, на который навешивается autocomplete.
Второй день туплю, буду благодарен за подсказки.
Polaris Отправлено: 25 Января, 2010 - 11:52:58 • Тема: Можно ли составить вот такой запрос • Форум: SQL и Архитектура БД

Ответов: 20
Просмотров: 96
Champion пишет:

Но только на быстродействии это может не лучшим образом сказаться

Получилось опять-таки немного не то, чего я ожидал, и несколько медленнее. Чтож, лучшее - действительно враг хорошего. Видимо, придется оставить как есть.
Polaris Отправлено: 25 Января, 2010 - 08:10:34 • Тема: Можно ли составить вот такой запрос • Форум: SQL и Архитектура БД

Ответов: 20
Просмотров: 96
Viper пишет:
и не будет.

Выходит, в моем случае, выхода нет?
Единсвенное, что приходит в голову - выбирать в запросе все, а потом "отсекать" ненужное уже в php.
Polaris Отправлено: 25 Января, 2010 - 07:11:01 • Тема: Можно ли составить вот такой запрос • Форум: SQL и Архитектура БД

Ответов: 20
Просмотров: 96
Все бы хорошо, но лимит 1 во внутреннем запросе отчего-то не работает...
Polaris Отправлено: 23 Января, 2010 - 06:27:31 • Тема: Можно ли составить вот такой запрос • Форум: SQL и Архитектура БД

Ответов: 20
Просмотров: 96
Champion
EuGen

спасибо, в понедельник буду пробовать.

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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB