PHP.SU

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

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

> Найдено сообщений: 111
isle Отправлено: 15 Июня, 2010 - 15:10:09 • Тема: index.php#.. как передать значение якоря в php страницу? • Форум: JavaScript & VBScript

Ответов: 8
Просмотров: 18853
fenomen51 пишет:
Какие-то другие способы существуют, может функции прокрутки какие или..?


На js, если знаете на сколько и куда опускать страницу (вверх-вниз) реализуется так:

window.scroll(0,1000);
window.scroll(0,-1000);

Еще потребоваться может определение текущей позиции, чтоб от нее поднять-опустить страницу - это на jquery относительно легко делается, но всё равно гемор.

На php можно не только через ГЕТ, но и через РОСТ запрос передать переменную, которая и будет определять куда именно сдвинуть страницу, предварительно только установить счетчик положения нужно в нуль, но это - морока... Лучше просто якорем - самый простой и эффективный способ.

Через ПОСТ нужно форму писать и кнопочку ставить - не всегда удобно и не везде подходит.
isle Отправлено: 15 Июня, 2010 - 03:29:54 • Тема: Полный путь категорий и подкатегорий из "дерева" или двумерного массива • Форум: Программирование на PHP

Ответов: 18
Просмотров: 2424
JustUserR, спасибо, я идею уже понял как сделать можно... перепробовал все варианты: одномерные массивы, двумерные и многомерные вложенные, сортировал по разному и т.д. Попытался без дерева всё сделать, просто пробежав несколько раз по двумерному массиву и соответственно удалив пройденные ячейки и т.д. Но не хватает пока практики сразу сделать вывод, я уже замучался с этими массивами... эх... учиться мне еще и учиться деревья сажать Растерялся

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

PHP:
скопировать код в буфер обмена
  1.  
  2.         $href = $id = $p = $pp = '';
  3.         function PrintTree($data,$lvl=0) {
  4.           global $ism, $domain, $slash, $catslist, $pcat, $num;
  5.           $level = 0; if (!$num) $num = 0;
  6.           foreach($data as $value) {
  7.                 $begin = "\t\t  <li>"; $end = "</li>\n";
  8.                 $link = $value['link']; $sub = $value['subCat'];
  9.                 $id = $value['id']; $pid = $value['pid'];
  10.                 if ($pid==0) $level = 0; else $level++;
  11.                 $url = geturlcat($link);
  12.                 $href = $domain.$slash.$url.'/';
  13.                 $link = str_replace('="'.$url.'"','="'.$href.'"',$link);
  14.                 if ($sub) {$end = ''; if ($lvl==1 || strpos($link,'<li ')) $begin = '';}
  15.                 #if ($sub && $level!=0) $p .= $id.'/'; #else $p = $id.'/';
  16.                 $list .= $begin.$link.$end; $pp = $id.'/';
  17.                 if ($sub) {
  18.                   if ($pid==0) {unset($pcat[$num]); $num = 0; $pp_ = $id.'/';}
  19.                   $pcat[$num] = $id.'/'; $num++; $pp .= $id.'/';
  20.                   $list .= "\n\t\t  <ul>\n".printTree($sub,$lvl++);
  21.                 } else {
  22.                   $pcat[$num] = $id.'/'; $pp_ .= $id.'/';
  23.                 }
  24.                 if ($lvl==1) $list .= "\t\t  </ul>\n\t\t  </li>\n";
  25.                 $lvl = 0; $pp_ = $id.'/';
  26.                 if ($pid==0) {
  27.                   while(count($pcat)>1) array_pop($pcat);
  28.                   $num = 0; $pcat[$num] = $id.'/'; $pp = $id.'/';
  29.                 }
  30.                 #if ($pcat) echo '<pre>'; print_r($pcat); echo '</pre>';
  31.                 if ($pp!='') echo $pp.'<br />';
  32.           }
  33.           return $list;
  34.         }
  35.         $catsblock = PrintTree($tree);


Если вконце распечатать массив $pcat, то видно, что пути нормальные (сейчас просто иды вывел для наглядности), а вот с простой переменной $pp ну прям беда Огорчение

Вот массив (дерево) в php для инклюда, если требуется:

Спойлер (Отобразить)
isle Отправлено: 13 Июня, 2010 - 12:58:57 • Тема: проблема с добавлением статьи в базу • Форум: Программирование на PHP

Ответов: 5
Просмотров: 430
У меня была похожая проблемка - не обновлялись ячейки в БД; я ее нашел, когда включил показ ошибок, может, пригодится Улыбка

Я указал в БД в ячейке вставить цифры (там можно текст вставить и т.д.), а после вычислений скриптом у меня почему-то цифры превращались в текст, т.е.:

вместо $a = 5;

я получал $a = '5';

Поэтому пришлось ставить кавычки перед вводом в БД и тогда записывалось, либо приводить к цифре текст.

Дело давно было, сейчас точно не вспомню как и что делал, но, думаю, смысл понятен... Вдруг кому еще пригодится Улыбка
isle Отправлено: 12 Июня, 2010 - 18:38:16 • Тема: Полный путь категорий и подкатегорий из "дерева" или двумерного массива • Форум: Программирование на PHP

Ответов: 18
Просмотров: 2424
Champion пишет:
А стоп, так так дерево уже есть и нужно просто его обойти и вывести путь от корня до низу?


Не совсем верно, иначе бы это упростило задачу Улыбка , пример моей функции вывода дерева можно под спойлером посмотреть. Мне нужно не только пройтись от верхнего уровня до нижнего, но и вернуться опять к верхнему в дереве... Нужно учесть $level = 0; затем его плюсовать или минусовать - вроде как всё понятно, но вверх его поднимаю без проблем, а спустить обратно (к главным категориям) не получается - категории замещают друг друга. Наделал кучу разных вариантов и не работает, как должно, вот и приходится пока не по дереву бегать, а еще доп. массивы для выборки путей, чтоб потом в дереве реплейсом поменять имя категории на готовый путь.

Но пришла идея не создавать еще один мега-массив для обработки путей, а ... Сейчас думаю так попробоввать: Если опускаемся на уровень вниз (каунтом уровни не получится подсчитать - подсчитывается только то, что на уровень ниже, а это не то), то создаём массив путей, типа:

# В самом начале: $path[0] = "$domain/";
# Затем в дереве при переходе в глубь...
$lvl++;
$path[$lvl] = $path[$lvl-1].'/';
...
и так по нарастающей от уровня...
+ текущая директория = полный путь.

Примерчик чертовски простенький и интересненький... сейчас попробую по этой схемке покрутить массив, спасибо. В принципе, если бегать несколько раз по двумерному массиву, то даже и дерево тогда не нужно, зря строил, а сразу вытащить всё одним махом получится Я поначалу так и начал, но столкнулся с проблемкой как мне массив перестроить после удаления пустых элементов ансетом, чтоб сотню категорий постоянно не пересчитывать, а: 100, 99, 98 ... (иначе коунт($арр) их тоже считает) - не смог поначалу и решил, что проще будет еще мега-массив сделать, но так только еще больше нагромоздил скриптов Улыбка

Возьму-ка я денек еще, через день-два отпишусь как и что сделал, пока нужно еще самому попробовать покрутить это, теперь больше вник в суть деревьев. Эх, век живи - век учись Улыбка

Цитата:
Но как я понял, ты сначала это дерево сформировал из простого массива pid-id-info? Этого не обязательно делать.


Верно, сначала массив взял типа

$cats[$id][$pid][$link];

, отсортировал, почистил и т.д., а из него уже получил дерево. При этом $info (т.е. $link) = "<ul><li><img scr="icon"><a href="/catname/">text</a></li></ul>" вот в таком приметиве выглядит, он в разы больше, а это для примера.

затем уже в процессе прегами и реплейсами меняю href на полный путь.

Спасибо, вроде понятней стало, разобрался, теперь нужно попробовать вживую наклепать.
isle Отправлено: 12 Июня, 2010 - 16:41:34 • Тема: Как передать переменную • Форум: Программирование на PHP

Ответов: 10
Просмотров: 721
Ya_Prizrak пишет:
Cпасибо большое ребята!Еще один вопросик как сделать чтобы логин и пароль можно было вводить только англ буквами и числами?


Самый простой примерчик можно реализовать через преги, но лучше их избегать, где это возможно ;) :

PHP:
скопировать код в буфер обмена
  1. # \W - всё, что не латинские буквы
  2. # \w - только лат. буквы
  3. # \D - всё, что не числа
  4. # \d - любое число от 0 до 9
  5. # \S - всё, что не пробел
  6. # \s - только пробельный символ (таб, перенос каретки и любой из пробелов)
  7.  
  8. $m1 = '|[\W\D]*|i';
  9. $m2 = 'Введем для теста русские буквы с пробелами';
  10. preg_match($m1,$m2,$r);
  11. $res = $r[0];
  12.  
  13. if ($res) echo 'Вы ввели что-то, что не соответствует лат. букве или числу';
  14. else echo 'Вы ввели лат. букву или число';
isle Отправлено: 12 Июня, 2010 - 15:47:30 • Тема: Полный путь категорий и подкатегорий из "дерева" или двумерного массива • Форум: Программирование на PHP

Ответов: 18
Просмотров: 2424
Наконец-то сообразил, как здесь на форуме сделать наглядную распечатку дерева, а то всё у меня форсатирование съедалось Огорчение Вот готовое дерево:

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


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

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


У меня такая же проблема, как и у Фантика, он тоже отдельно получает путь к категории и саму категорию (имя и расположение, тем более формируя целую кучу запросов и массивов, что значительно скажется на каталоге в 50-100 катов/подкатов с очень высокой посещалкой...), я же пытаюсь без всяких запросов в БД и лишней проходкой по массивам взять сразу всё, но не выходит, поэтому я сначала получаю один массив, из которого делаю выборку путей, потом второй - дерево, из самого дерева получаю саму категорию (расположение) - это не рационально: создавать несколько n-вложенных массивов и с каждым в отдельности работать, чтоб потом получить еще один массив - обработанное готовое дерево с путями к категориям и их расположением.

Вроде как смысл понимаю, но логику как всё разом забрать и уменьшить код со ста строчек до 10 - никак не пойму... опять всё возвращаюсь к тому, что приходится создавать и обрабатывать несколько массивов, но хоть без лишних запросов в БД (2 основных как минимум - пути и структуру, т.е. иерархию - расположение в дереве).

Joo, извините, не в обиду будет сказано и никак не в придирку... Просто смотрите, если мне писать класс, то ведь он же должен состоять из каких функций, так? Вот те функции, которые я инклюдом получаю из другого файла, я точно также получу их же и из класса, но только с лишним гемороем: мне проще функцию написать, чем сидеть с классом разбираться, который из этой же функции и будет состоять... То есть масло маслянное с перцем и горщицей Улыбка

Phantik, спасибо за пример, но реализация очень корявая и хуже (? - на мой взгляд, извиняюсь), чем то, что я сделал по другому примерчику (позаимствовал идею у одного блогера и 5 его строчек превратил в сто Ха-ха , теперь занимаюсь обратным процессом).

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

Ребята, спасибо за помощь.

Если кому интересно, то вот так я пока это хозяйство за сегодня реализовал (сначала пути вытащил, потом само дерево распечатал, эх, совместить и упростить код никак пока не выходит, нужен какой-то примерчик хоть бы на пальцах, чтоб логику объединения функций понять):

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


Надеюсь, пример полного кода обработки дерева кому-то еще поможет, как наглядное пособие. Еще раз спасибо за обсуждение, пошел курить деревья дальше. Улыбка
isle Отправлено: 12 Июня, 2010 - 07:13:13 • Тема: Полный путь категорий и подкатегорий из "дерева" или двумерного массива • Форум: Программирование на PHP

Ответов: 18
Просмотров: 2424
Joo пишет:
Это очень просто реализуется на классах, у вас сразу отпадет ограничение по уровню вложенности и обход дерева примет элементарный вид.


Зачем мне классы для построения дерева, если я всё написал в несколько строчек и получил чистое дерево с нужными мне элементами? (просто форматирование потерялось здесь и ненаглядно выводится массив) Не понял

Другое дело - не знаю как написать простую функцию для одновременной распечатки самого дерева и выборки путей категорий/подкатегорий... Пришлось клепать мега-функцию, вернее даже две: распечатка самого дерева и выборка (жестко завязанная по вложенности) путей категорий/подкатегорий, простенький примерчик для наглядности который привел выше.

Если знаете как можно всё объединить в кучу для минимизации (оптимизации?) кода и без искусственных ограничений вложенности, был бы очень благодарен, а то уже мозг просто кипит, скоро взорвусь Огорчение
isle Отправлено: 12 Июня, 2010 - 06:43:21 • Тема: Cache_Lite • Форум: Программирование на PHP

Ответов: 11
Просмотров: 936
Joo пишет:
Мне вот тоже интересно, что значит на ФТП? Вы имеете ввиду, на накопителе сервера, или все таки использую ФТП? Я бы Вам посоветовал выражаться более корректно, тогда как Вы говорите, на ФТП, люди подразумеваю сохранение данных через протокол передачи файлов (ФТП), со всем вытекающим.


Я же уточнил с примером - "а можно на ФТП (на винте сервера)" Подмигивание

П.С. вы, наверно, уже спите Радость а у нас уже петухи пропели... рассвет... скоро лягу на часок.
isle Отправлено: 12 Июня, 2010 - 06:37:14 • Тема: проблема с добавлением статьи в базу • Форум: Программирование на PHP

Ответов: 5
Просмотров: 430
"@$db = " - выулючили ошибки подключения... зачем на тесте?
Подключение к БД есть, где отключение?

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


/* close connection */
mysqli_close($link);
isle Отправлено: 12 Июня, 2010 - 02:03:58 • Тема: Полный путь категорий и подкатегорий из "дерева" или двумерного массива • Форум: Программирование на PHP

Ответов: 18
Просмотров: 2424
Блин, капец, 2 дня убил (хотя дерево строил... м... даже сказать стыдно сколько дней Радость ) и только что осенило, решил поделиться, так как в сети никаких примеров не нашел, может, кому пригодится:

CODE (htmlphp):
скопировать код в буфер обмена
  1. $c = count($tree); $j = 0;
  2. for($i=0;$i< $c+$j;$i++) {
  3.  $id = $tree[$i]['id'];
  4.  if ($id) $catlist[$id] = $id.'/';
  5.  $s1 = $tree[$i]['subCat'];
  6.  if ($s1) {
  7.         foreach($s1 as $sub=>$sub2) {
  8.           $j++;
  9.           $id2 = $s1[$sub]['id'];
  10.           if ($id2) $catlist[$id2] = $catlist[$id].$s1[$sub]['id'].'/';
  11.           $s2 = $s1[$sub]['subCat'];
  12.           if ($s2) {
  13.                 foreach($s2 as $sub3=>$sub4) {
  14.                   $j++;
  15.                   $id3 = $s2[$sub3]['id'];
  16.                   if ($id3) $catlist[$id3] = $catlist[$id2].$s2[$sub3]['id'].'/';
  17.                 }
  18.           }
  19.         }
  20.   }
  21. }
  22. echo '<pre>'; print_r($catlist); echo '</pre>';


Распечатка (айди, можно хоть что распечатать, иды для примера):

Цитата:
Array (
[1] => 1/
[2] => 2/
[3] => 3/
[5] => 5/
[4] => 5/4/
[6] => 5/6/
[7] => 5/7/
[11] => 5/7/11/
[8] => 8/
[9] => 9/
[10] => 10/
)


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

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

Ответов: 10
Просмотров: 721
Ya_Prizrak пишет:
Ет я регистрацию на сайте создаю,и хочу капчу передать обработчику,ее нужно только сессиями передавать?


Конечно, капчу передают с сессией, а иначе смысл капчи ? Ну просто тогда напишите текст: "нажмите кнопку номер 3 из 5" и всё Язычок

А если просто переменную передавать в разные страницы, то создайте файл config.php, который потом можно инклюдом везде воткнуть. Или я чего-то не так понял?
isle Отправлено: 11 Июня, 2010 - 23:32:43 • Тема: Cache_Lite • Форум: Программирование на PHP

Ответов: 11
Просмотров: 936
garvey пишет:
При чем здесь ФТП? Обычное кэширование страниц.


Ну как при чем? Кеш можно в БД как временные таблицы создать, можно в ОЗУ как буфер, а можно на ФТП (на винте сервера). А где по вашему кеш должен храниться - где-то там в интернете, что ли? Радость

---
П.С. Страницы обычно не кешируют, кешируют отдельные блоки страницы во временной директории (папке) временного файла, который имеет определенное время жизни. Ну, например, можно на сутки или на час закешировать вывод блока Категорий сайта, чтоб их постоянно из базы не дергать и не обсчитывать логику, не обрабатывать массивы и т.д., а просто выводить готовый блок html, обновляя его раз в сутки, что значительно уменьшает нагрузку на сервер.
isle Отправлено: 11 Июня, 2010 - 23:03:09 • Тема: Cache_Lite • Форум: Программирование на PHP

Ответов: 11
Просмотров: 936
Капец, для кеша уже и целые классы пишут, скоро, наверно, CMS запустят Ха-ха

Поначалу вам буфер нужен был, теперь оказалось, что простой кеш на ФТП. А чем вас мой вариант не устроил? Всего несколько строк и наверняка работает куда быстрей, чем сей класс, я уже полгода так кеши пишу - всё отлично работает даже при очень высокой посещалке.
isle Отправлено: 11 Июня, 2010 - 22:50:56 • Тема: Как сделать так что бы когда человек нажимал на сылку Авторизация то с помощью инклуд • Форум: Программирование на PHP

Ответов: 10
Просмотров: 799
jei пишет:
да не получается нечего.Вы чо издеваетесь

напишите полностью как код будет


Пока я тут комментарий клепал (хотел на мысль натолкнуть), меня уже опередили и дали хороший ответ Улыбка Вам тогда следует (?) написать в другой ветке? Есть веточка "напишите за меня, пожалуйста". Здесь же всё-таки обсуждают идеи и сам подход больше ;)
isle Отправлено: 11 Июня, 2010 - 22:44:01 • Тема: index.php#.. как передать значение якоря в php страницу? • Форум: JavaScript & VBScript

Ответов: 8
Просмотров: 18853
Честно сказать - не помню, как передавал якорь, в последнее время всегда ссыль пишу с вопросиком, а далее задаю переменную... типа: /index.php?id=1

Но натолкну на мысль: почитайте http://php.net/manual/en/reserve...ables.server.php

Например, если я сижу на site.ru/sitemap.html, то получаю вот что:

#echo $_SERVER['PHP_SELF']; #/index.php
#echo $_SERVER['REQUEST_URI']; #/sitemap.html?cat=4&page=2
#echo $_SERVER['DOCUMENT_ROOT']; #/home/master/data/www/site.ru
#echo $_SERVER['SCRIPT_FILENAME']; #/home/master/data/www/site.ru/index.php
#echo $_SERVER['QUERY_STRING']; #do=islemap
#echo $host = $_SERVER['HTTP_HOST']; #site.ru

Далее есть несколько различных вариантов парсинга этих переменных из строки - зависит от вашей конкретной ситуации как и чем парсить... Можно просто разбить експлодом по знаку, например, "=" и получить значение из строки, можно спец. функциями, типа parse_url или подобными (их 2 или 3 точно, но по памяти так не скажу, давно клепал).

Я когда-то не знал как парсить, делал что-то типа этого:

CODE (htmlphp):
скопировать код в буфер обмена
  1. function go() {
  2.   global $go; $go = array();
  3.   $action = $_SERVER['REQUEST_URI'];
  4.   $uri = parse_url($action);
  5.   $query = explode('&',str_replace(array('cat','page','='),'',$uri['query']));
  6.   $p = intval($query[1]); $c = intval($query[0]);
  7.   $go['cat'] =  !$c || empty($c) || $c < 0 ? 0 : $c;
  8.  $go['page'] = !$p || empty($p) || $p < 2 ? 1 : $p;
  9. }


Распечатать из php результат в яву не сложно, достаточно написать что-то вроде:

echo "<script>document.wright(".$param.");</script>";

Где $param - ваш результат обработки.

Надеюсь, помог Улыбка

Страниц (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