PHP.SU

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

Страниц (8): « 1 2 3 4 5 6 [7] 8 »

> Найдено сообщений: 111
isle Отправлено: 11 Июня, 2010 - 22:27:01 • Тема: Полный путь категорий и подкатегорий из "дерева" или двумерного массива • Форум: Программирование на PHP

Ответов: 18
Просмотров: 2424
Ребята, требуется нехитрая помощь, кто может, подскажите, пожалуйста, как реализовать: я получил из массива "дерево", теперь мне нужно вытащить из него пути к категориям и подкатегориям. Я достаточно хорошо знаю php, но совсем не дружу с логикой и математикой Растерялся Мне нужно вместо:

$cat[1] = catname1;
$cat[2] = sub-catname1;
$cat[3] = sub-sub-catname1;
$cat[4] = sub-catname2;
...

Получить:

$cat[1] = catname1;
$cat[2] = catname1/sub-catname1;
$cat[3] = catname1/sub-catname1/sub-sub-catname1;
$cat[4] = catname1/sub-catname2;
...

То есть полный путь категорий.

Вот само дерево (уже отсортированный и сжатый массив):

Спойлер (Отобразить)


А вот и сам массив:

Спойлер (Отобразить)


Ссылка в дереве ([link]) и в двумерном массиве выглядит одинаково, вот так:

<ul><li><a href="">text</a></li></ul>

Ссылки я вытащу сам на каты, мне нужно просто пример, как вытащить айди категории, вместо которых я потом прегами заменю "href" (название категории на англ.) в ссылках на полный путь. Надеюсь, объяснил исчерпывающе Улыбка

Если не готовый пример, то хотя бы логику обработки нужно, был бы очень благодарен.
isle Отправлено: 11 Июня, 2010 - 14:13:29 • Тема: Как сделать так что бы когда человек нажимал на сылку Авторизация то с помощью инклуд • Форум: Программирование на PHP

Ответов: 10
Просмотров: 798
Чтобы остаться на странице, добавьте условие:

CODE (htmlphp):
скопировать код в буфер обмена
  1. if (!isset($_SESSION['user_id'])) {
  2.   echo 'Регистрация';
  3.   # OR @include(ROOT_DIR.'reg.php');
  4. } else {
  5.   echo 'Профиль';
  6.   # OR @include(ROOT_DIR.'login.php');
  7. }


По приведенному примеру не знаю как залогиниться или зарегистрироваться, у себя я делал через Гет-запросы всё... То есть href="/register_login.php?go=1".

Затем в файле register_login.php через переменную $_SERVER['REQUEST_URI'] можно отпарсить любым удобным способом нашу переменную $go: если $go==1, то echo 'register user' ELSE echo 'Form login user'.

Я с такой логикой работал, иначе - не знаю как.
isle Отправлено: 11 Июня, 2010 - 14:01:19 • Тема: Вопрос по теории кэширования • Форум: Программирование на PHP

Ответов: 8
Просмотров: 499
Phantik, как я понял, garvey интересуется именно буферизацией на php на сервере, а не в браузере, БД или ФТП. Сам одно время этим интересовался, но полгода назад для меня это было сложно, сейчас созрел для понимания... Радость Если есть опыт, приведите какой-нибудь простенький примерчик, чтоб неделю не гуглить впустую. Улыбка
isle Отправлено: 11 Июня, 2010 - 13:31:56 • Тема: Вопрос по теории кэширования • Форум: Программирование на PHP

Ответов: 8
Просмотров: 499
В ОЗУ тоже как-то кешировал и жал данные, но опыта у самого пока еще мало, могу наврать... Сам советовать пока ничего не буду. Растерялся Эх, тема актуальная - тоже бы с удовольствием поучился.
isle Отправлено: 11 Июня, 2010 - 12:49:24 • Тема: Вопрос по теории кэширования • Форум: Программирование на PHP

Ответов: 8
Просмотров: 499
А где кешировать и что - не ясно... Помогите в том - не знаю в чем, напишите то - не знаю что... Ха-ха

В БД еще сам толком не копался, поэтому с временными таблицами привести пример пока не могу вот так навскидку. А на ФТП я делаю так:

CODE (htmlphp):
скопировать код в буфер обмена
  1.   if (is_file($file)) {
  2.         #Проверяем наш кеш
  3.         $stat = stat($file); $LastModif = $stat['mtime']; $size = $stat['size']; #Статистика кеша.
  4.         if ($LastModif< $ism['block_cats_numitems_cash'] && $size>999) {
  5.           @include($file); #Берем данные из кеша.
  6.           if ($cash_categories && trim($cash_categories)!='') return $cash_categories;
  7.           else $check = true; #Запускаем скрипт на выполнение, если кеш пустой (первый запуск, либо ошибка записи скрипта в кеш и т.д.)
  8.         } else $check = true;
  9.   } else {$fp = fopen($file,'w'); fclose($fp); $check = true;}
  10.  
  11. ...
  12.  
  13.   if ($check) {
  14.     #Выполняем наш скрипт, если кеша нет или его время вышло.
  15.   }
  16.  
  17.   if (is_file($file)) {
  18.         #Загоняем всё в кеш.
  19.         $dump = var_export($out,true);
  20.         $dump = "<?php\n\n\$cash_categories = $dump;\n\n?>";
  21.         if (!@file_put_contents($file,$dump)) echo '<div>Check CHMOD 0777!</div>';
  22.   } else echo 'Problem creat or write cash-file';
  23.  


Пример из моего модуля... CHMOD у всех почти выключен, также и через подключение ФТП его тоже нельзя изменить (хостеры для своей безопасности все такие рюшки выключают), поэтому права 0777 ставить нужно вручную на кеш, здесь это опускаю.
isle Отправлено: 13 Февраля, 2010 - 11:17:00 • Тема: помогите написать регэксп • Форум: Регулярные выражения

Ответов: 1
Просмотров: 201
Если нужен только Титул, лучше тогда так:

CODE (htmlphp):
скопировать код в буфер обмена
  1. preg_match('|<title>\s*(.*?)\s*</title>|si', $text, $matches);
  2. $res = $matches[0];
  3. echo $res;
isle Отправлено: 13 Февраля, 2010 - 11:09:35 • Тема: Помогите написать регулярку • Форум: Регулярные выражения

Ответов: 43
Просмотров: 3010
А... понятно... у вас сложный вывод данных. В таком случае, нужно хотябы примеров 5-10, чтоб можно было составить маску с большой вероятностью совпадений и использовать, возможно, проверку нескольких масок, их массив.

Поскольку я не особо представляю как и что у вас там может выводиться (но суть ясна теперь), предлагаю сделать массив мусора из всех возможных вариантов, например, введите 5-10 вариантов совпадений, которые нужно удалить, а далее регуляркой уже проще будет пройтись по более простой маске и с вероятностью до 100% вытащить результат.

Примерный вариант удаления мусора.

CODE (htmlphp):
скопировать код в буфер обмена
  1. \\Delete trash
  2. $del = array (
  3.   '|Под ред.|si',
  4.   '|Под редакцией|si',
  5.       ...
  6.   '|Автор|si',
  7.   '|Автор книги|si',
  8.   '|Autor|si',
  9.   '|Autor this book|si'
  10. );
  11. $out = preg_replace($del,'',$in);


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

П.С. "Под ред. !Иванова [С].В." - квадратные (возможно, круглые тоже) скобки могут присутствовать или это опечатка? Если этот мусор тоже есть, то и его нужно удалить (его вставить позже в результат всегда можно):

CODE (htmlphp):
скопировать код в буфер обмена
  1. \\Delete trash
  2. $del2 = array (
  3.   '(', ')',
  4.       ...
  5.   '[', ']',
  6. );
  7. $out = str_replace($del2,'',$in);


После обработки должно остаться только что-то типа: "Иванова С.В." или "С.В. Иванова". Обработать это дело уже не сложно: буква+точка, буква+точка и слово, с которого вырезаем только первые 2 (или 3-4, если англ.) буквы по регулярке. Если могут быть запятые или другие знаки (тире, например), преобразуйте их в точки, чтоб привести к единой упрощенной маске с помощью str_replace().
isle Отправлено: 12 Февраля, 2010 - 15:42:10 • Тема: Помогите написать регулярку • Форум: Регулярные выражения

Ответов: 43
Просмотров: 3010
leshiy_SV пишет:
решил сделать так, чтобы получить нужную букву перед ней ставить знак !.


Не понятно, зачем вам велосипед с 4-мя колесами? Улыбка Выше есть пример в 2 строчки.

CODE (htmlphp):
скопировать код в буфер обмена
  1. $str=str_replace('Под ред. ','',$str);
  2. $lit=substr($str,0,2);
  3. echo $lit;


А в случае с прегами (preg_) выдается масив (aray), чтоб его распечатать, нужно указать, какой именно элемент массива нужен. Если нет круглых скобок - элемент массива только 1 - $array[0], если есть хоть одна пара круглых скобок, то эти самые скобки (их содержимое) заносится в элемент 2 - $array[1] и т.д. Т.е. нужно выводить так:

CODE (htmlphp):
скопировать код в буфер обмена
  1. $str="Под ред. !Иванова [С].В.";
  2. $result = preg_match("/!(.?)/",$str);
  3. $result = $found[1]; echo $result;


А вообще регулярка неправильная. В данном случае можно написать так (если проблемы с кирилицей:

CODE (htmlphp):
скопировать код в буфер обмена
  1. $match = '|[^\s]*\s[^\.\s]*\.\s([.*?]{2}).*?|si';
  2. preg_match($match,$str,$found);
  3. $result = $found[1];
  4. echo $result;


Если $str="Под ред. !Иванова [С].В.", то будет работать.
Также, если проблемы с кодировкой, то есть функция icon: сначала преобразуйте ее из утф8 в сп-1251, сделайте необходимые операции , затем опять преобразуйте для вывода или пишите сразу документ редактором, который сохраняет в утф8.

В общем, пока вы не определитесь что именно вам надо, трудно будет определиться как это лучше сделать Улыбка Надеюсь, помог.
isle Отправлено: 02 Февраля, 2010 - 23:21:40 • Тема: Ошибка в регулярном выражении (в нике) • Форум: Регулярные выражения

Ответов: 17
Просмотров: 885
Монстр_11111 пишет:
Да уж , в общем если у кого душа широкая - помогите . А я продолжу дальше искать "баги"


Если позволите, вмешаюсь Улыбка

Во-первых, я столкнулся с подобной проблемой: русский текст регулярка берет от раза к разу когда как, т.е. иногда срабатывает, а иногда нет. Решил проблему так:

Нужно в отдельную переменную закинуть весь русский алфавит прописью и заглавными и не нужно никаких хексов и прочей ерунды. Выглядит так:

$alpha = 'а,б,в,...,я,А,Б,В,...,Я';

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $_POST['nikname']='Тест';
  3. if (preg_match("|[^".$alpha."\w\d]+|", $_POST['nikname']) ) {
  4. echo 'Предупреждение...'; }
  5.  


Так должна работать, если нет, то есть функция иконви:

CODE (htmlphp):
скопировать код в буфер обмена
  1. $out = iconv(WINDOWS-1251, UTF-8, $in);


Конвертнет из WINDOWS-1251 в UTF-8, а потом уже в регулярку. У меня заработало без проблем Улыбка
isle Отправлено: 22 Января, 2010 - 08:17:09 • Тема: Запрос в БД в пользовательской функции • Форум: Программирование на PHP

Ответов: 2
Просмотров: 402
Капец, извелся уже... Опять на этом Глобале споткнулся, блин. Да, global нужно воткнуть во внутрь самой функции, а не ставить его снаружи, иначе одни и теже переменные делятся на локальные (внутри функции) и глобальные вне ее. Хорошо бы об этом в примере написать (на сайте php.su), а то там совсем всё простенько.

Спасибо, теперь работает.
isle Отправлено: 22 Января, 2010 - 07:06:51 • Тема: Как сделать функцию из html? • Форум: Программирование на PHP

Ответов: 3
Просмотров: 268
По идее как-то так:

CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2. $names = array('n1',...'n9'); //Массив имен.
  3. $a = <<<EOF
  4. <option value="select">находится в городе...</option>\n
  5. <option value="1">Caнкт-Пeтepбypг</option>\n
  6.   ...
  7. <option value="9">Бepлин</option>\n
  8. EOF;
  9.  
  10. for ($i=0; $i<$9; $i++) {
  11.  echo '<select name=".$names[$i].">'.$a;
  12. }
  13. ?>
isle Отправлено: 22 Января, 2010 - 05:12:46 • Тема: Запрос в БД в пользовательской функции • Форум: Программирование на PHP

Ответов: 2
Просмотров: 402
Решил поупражняться в пользовательских функциях, но как только стал переходить на них, сразу же получил ошибки при запросах в БД. Странно, но сами запросы написаны правильно и отдельно работают, например, если просто написать:

CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2. $sql = "SELECT `domain_lastcheck` FROM `domain` WHERE `domain_name`='".$site_domain."' LIMIT 1";
  3. $R = mysql_query($sql,$db) or die("SQL ERROR in line ".__LINE__.", function mysql_query");
  4. $row = mysql_fetch_array($R);
  5. echo $site_last_analysis = $row[0];
  6. ?>


Но это же самое в функции следом:

CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2. function site_last_analysis() {
  3.  $sql = "SELECT `domain_lastcheck` FROM `domain` WHERE `domain_name`='".$site_domain."' LIMIT 1";
  4.  $R = mysql_query($sql,$db) or die("SQL ERROR in line ".__LINE__.", function mysql_query");
  5.  $row = mysql_fetch_array($R);
  6.  return $row[0];
  7. }
  8. site_last_analysis();
  9. ?>


выдает ошибку: mysql_query(): supplied argument is not a valid MySQL-Link resource in.... Кто-нибудь в курсе, почему так?
isle Отправлено: 15 Января, 2010 - 03:07:36 • Тема: Пауза в выполнении скрипта • Форум: Программирование на PHP

Ответов: 6
Просмотров: 2170
alpha_beta, спасибо за предложенную помощь, вроде всё сам решил, благодаря подсказке vitaliy_mad, за что тоже большое спасибо. Пробовал так тоже, но не работало... ошибка была в том, что неправильно всё писал - с маленькой буквы, а нужно... вместо "innerhtml" или "innerHtml" (как в примере) написать "innerHTML" и т.д. Предложенный вариант показывает 0.3 сек. работы скрипта, в то время, как мой вариант 6.0 сек., что более похоже на правду.

Всё гениальное оказалось таким простым Голливудская улыбка Странно, что в сети эти скрипты находятся совершенно под другими запросами... (другие похожие примеры, смотрел сейчас "динамическая подгрузка").

Кстати, echo round(microtime()-$sts,3); не работает потому как выдается большая точность с microtime(true), да еще с экспонентой, а вот так (ниже пример) работает на ура, а без "true" не работает. Может, это кому еще пригодится Улыбка

Весь скрипт, который я наклепал:

CODE (text):
скопировать код в буфер обмена
  1. <?php
  2. function get_micro_time() {
  3.   list($usec,$sec)=explode(" ",microtime());
  4.   return((float)$usec+(float)$sec);
  5. } $start_time = get_micro_time();
  6. ?>
  7.  
  8. <span id="time"></span>
  9.  
  10. <!-- Скрипт обработки данных -->
  11.  
  12. <script type="text/javascript">
  13.   document.getElementById("time").innerHTML="<?php echo round(get_micro_time() - $start_time,3); ?> sec"
  14. </script>


Показывает время выполнения скрипта "6.203 сек". Здорово. Еще раз спасибо за участие.
isle Отправлено: 15 Января, 2010 - 01:13:12 • Тема: Пауза в выполнении скрипта • Форум: Программирование на PHP

Ответов: 6
Просмотров: 2170
vitaliy_mad пишет:
хм... во первых, время испольнения скрипта в начале страницы можно только динамически подгружать... в конце работы скрипты с помощью JavaScript.


Вот-вот... я и хочу вывести время динамически, но не могу найти нигде примерчик, хотя бы просто на пальцах...

Цитата:
далее:
isle пишет:
Функция sleep делает не паузу, а останавливает весь скрипт

а в чем разница?


Разница в том, что sleep делает не паузу, а полную остановку всех подгрузок, например, инклюды начнут грузиться только через 10 секунд, а не фоном... Т.е. вообще нет смысла в слипе... либо его нужно на 2 ветки делить: идет обыное фоновое выполнение скрипта, т.е. инклюды и т.д. и вторая ветка дерева, когда обрабатывается второй параллельный скрипт со слипом. Но в гугл- и яндексответах я это дело тоже не нашел, только общие советы, которые мне пока, как новичку, не понятны. Буду рад за любую подсказку.
isle Отправлено: 15 Января, 2010 - 01:03:28 • Тема: Пауза в выполнении скрипта • Форум: Программирование на PHP

Ответов: 6
Просмотров: 2170
Приветствую, форумчане. Появилась проблема в выводе необъявленной переменной. Но дело даже не в ней. Суть:

Нужно вывести переменную либо создав паузу и повторное выполнение проверки наличия нужного значения переменной, либо вывести переменную, например, через аякс, JavaScript, задав setTimeOut или как-то еще.

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

CODE (text):
скопировать код в буфер обмена
  1. <?
  2. function get_micro_time() {
  3.   list($usec,$sec)=explode(" ",microtime());
  4.   return((float)$usec+(float)$sec);
  5. } $start_time = get_micro_time();
  6.  
  7. $analysis_time = 0;
  8.  
  9. if ($analysis_time != 0) echo $analysis_time;
  10.  
  11. ...
  12.  
  13. $analysis_time = round(get_micro_time() - $start_time,3),' sec.';
  14. ?>


Понимаю, что примерчик тупой и if написан не в тему, поэтому прошу помощи, как правильно это сделать. В сети не нашел, запрос очень рейтинговый, многие ищут, но никто не дает ответов, может кто-то из форумчан с этим сталкивался? Функция sleep делает не паузу, а останавливает весь скрипт, поэтому здесь не катит, while создает зацикливание без паузы... как быть?

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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB