Автор Тема: Создание собственной CMS  (Прочитано 6593 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн kolyuchii.exe

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 10
  • +0/-0
  • 0
    • Просмотр профиля
    • http://nikoan.cwx.ru/
Создание собственной CMS
« : 12 Октября 2007, 16:23:12 »
пытаюсь создать собственную систему управления сайтом на базе двумерного массива на  ПХП, но ранее этот язык  не изучал никогда.
Посоветуйте вот по каким вопросам:

для поиска по базе данных (выполненной в виде массива) статей я использую функцию similar_text(), которая сравнивает строку запроса и значения массива (предварительно все значения массива разбиты на отдельные слова) и если число совпадений = 5, то это слово  (и сам под_массив) считаются удовлетворяющими условию поиска и выводятся на страницу. Разумно ли использование этой функции или есть более изящный метод?

Что делать или какую функцию применять для замены одного (допустим, неверного) значения элементов двумерного массива на другое (верное)? Да так, чтобы эти изменения записывались в файл базы данных.

Спасибо!

Оффлайн CGVictor

  • теперь местный
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2511
  • +0/-0
  • 2
    • Просмотр профиля
    • http://cg.net.ru
Создание собственной CMS
« Ответ #1 : 12 Октября 2007, 19:11:25 »
kolyuchii.exe
0. Так. Давайте сначала определимся с терминологией: файл - это файл, а база данных - это отдельный сервер базы данных. Не надо смешивать, говоря об одном и том же - так принято и так удобнее.

1. Откуда берется "число совпадений = 5"? Какая должна быть логика у алгоритма, в самом принципе? Обьясните популярно, что и как должен делать описанный вами метод.

2. Ну и, пока абстрактно: решение с [p]similar_text[/p] с ее N^3 может быть оправданным, но точно не лучшим. Напишите, что требуется сделать - а там найдем более быстрое решение.

Примеры кода и запроса greatly appreciated.
LJ: Backslashed life (rss)

Оффлайн kolyuchii.exe

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 10
  • +0/-0
  • 0
    • Просмотр профиля
    • http://nikoan.cwx.ru/
Создание собственной CMS
« Ответ #2 : 13 Октября 2007, 16:40:40 »
Извиняюсь за мой "компьютерный".

Выкладываю всё по порядку:
есть некая форма ввода данных, писаная на хтмл. данные из этой формы передаются на обрабатывающий скрипт методом POST, который записывает эти данные в файл в виде двумерного массива

<? 
$mas[] = array("""","");
$mas[] = array("""","");
$mas[] = array("""","");
.................................
$mas[] = array("""","");
?>


Это всё уже работает.

когда юзер грузит страницу, она (страница) прикрепляет файл с массивом, извлекает из него значения с помощью foreach и выдает юзеру.

Это тоже работает.

Теперь юзер хочет найти нечто определённое, отправляет запрос и...
вот дальше самое интересное:
тот же самый двумерный массив, разбиваем на подмассивы, потом их (подмассивы) преобразуем в строку, разбиваем её на отдельные слова и сравниваем каждое слово со строкой запроса - это тоже вроде работает, НО! Но если юзверь наберёт "вася", а в элементах массива будет только слово "василий", то результат поиска будет никакой.
По этому я и применил similar_text(), которая сравнивает запрос с каждым словом из элемента массива и если в строке запроса и в слове из элемента массива 5 или более совпадающих символов, то строки считаются идентичными.

цифра -5- взята чисто эмпирически, как наиболее подходящая (ИМХО).

И ещё мне абсолютно не ясен алгоритм замены отдельных значений массива.

Оффлайн CGVictor

  • теперь местный
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2511
  • +0/-0
  • 2
    • Просмотр профиля
    • http://cg.net.ru
Создание собственной CMS
« Ответ #3 : 14 Октября 2007, 22:24:55 »
kolyuchii.exe
По задаче - все равно ничего не ясно. Ну да и ладно;

Функция: есть же [p]strpos[/p], только для нормальной работы надо бы ей передавать не целиком запрос, а что-то вроде substr($qry,0,round(strlen($qry)*.0.8)) - чтобы убрать окончания слов. Это, понятное дело, самый простой вариант, можно и сложнее заморочиться.

Замена: технически, замена это не что иное, как задание нового значения. Поэтому $arr[$key]=$value, или для подмассива, $arr[$key1][$key2] = $value;
LJ: Backslashed life (rss)

Оффлайн Altaxar

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 222
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.moroseac.ru/
Создание собственной CMS
« Ответ #4 : 16 Октября 2007, 00:53:48 »
У меня была задача: узнать номер id записи в MySQL где встречается искомое слово, но упорядочить по коэффициенту совпадения, у MySQL подобное есть но только не с буквами а со словами.
например: Prague , Praha , Praga - это все 3 слова правильно написаны.
ну и превратил буквы в слова, теперь работает, на скорость пока не жалуюсь. Если интересно могу продолжить.
Не все является тем чем кажется.

Оффлайн kolyuchii.exe

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 10
  • +0/-0
  • 0
    • Просмотр профиля
    • http://nikoan.cwx.ru/
Создание собственной CMS
« Ответ #5 : 16 Октября 2007, 11:32:55 »
substr($qry,0,round(strlen($qry)*.0.8)) - как работает (для чего нужен) выделенный фрагмент? Каким образом он уменьшает длину строки? В моем понимании для уменьшения используется "-" (типа "длина строки - 10" или что то в этом роде), а тут не пойми что.
 
[OFF]не сочтите меня за полного чайника, я отнюдь не программист, я биохимик. Завлаб попросил сделать сайт нашей лабы, чтобы все наши статьи были там. А их уева туча и одним хтмл не хочется как папа карло с утра до ночи. Скачивать готовую системку - вообще труба, а так для одной странички написать что-то можно.[/OFF]

Цитировать
Altaxar:
У меня была задача: узнать номер id записи в MySQL где встречается искомое слово, но упорядочить по коэффициенту совпадения, у MySQL подобное есть но только не с буквами а со словами. например: Prague , Praha , Praga - это все 3 слова правильно написаны. ну и превратил буквы в слова, теперь работает, на скорость пока не жалуюсь. Если интересно могу продолжить.


Мне - всегда всё интересно! Выкладывайте!
« Последнее редактирование: 16 Октября 2007, 11:38:24 от kolyuchii.exe »

Оффлайн kolyuchii.exe

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 10
  • +0/-0
  • 0
    • Просмотр профиля
    • http://nikoan.cwx.ru/
Создание собственной CMS
« Ответ #6 : 16 Октября 2007, 11:49:02 »
CGVictor адекватна ли эта запись вида:

substr($qry,0,round(strlen($qry)*.0.8))

 записи:

substr($qry,0,round(strlen($qry)/2))

Исходя из описанного Вами кода намострячил вот что:

$w = \'привет как твои дела что жизнь метаботропные процессы\';
$qry = \'что такое метаболизм?\';
$t = explode(" ", $qry);
   foreach($t as $value)
{
       $e = substr($value,0,round(strlen($value)/2));
       echo $e."<br/>";
          if (strpos($w, $e)===false) 
     {
                 echo \'нет такого<br/><br/>\';
     } else
     {
                 echo "есть такое<br/><br/>";
     }
}


этот скрипт работает когда при запросе не одно слово, а несколько и ищет каждое в отдельности

Оффлайн Altaxar

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 222
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.moroseac.ru/
Создание собственной CMS
« Ответ #7 : 18 Октября 2007, 14:43:10 »
kolyuchii.exe
мой скрипт тебе не подойдет, он работает с MySQL, тоесть поиск производит MySQL.
Но если тебя наведет на мысль, то вот как я это сделал:
например у меня есть запись "K Karlovy Vary" создал 2 столбец и сохранил это так "kk00 kk00 aa01 rr02 ll03 oo04 vv05 yy06 vv00 aa01 rr02 yy03"
(двойный буквы - так как мне надо было чтобы слова получились больше 3 букв)
далие при поиске слова "kkarlovyvary" (без пробелов, например) получаю:
kk00 kk01 aa02 rr03 ll04 oo05 vv06 yy07 vv08 aa09 rr10 yy11
 kk01 kk02 aa03 rr04 ll05 oo06 vv07 yy08 vv09 aa10 rr11 yy12
 kk00 aa01 rr02 ll03 oo04 vv05 yy06 vv07 aa08 rr09 yy10
 kk02 kk03 aa04 rr05 ll06 oo07 vv08 yy09 vv10 aa11 rr12 yy13
 aa00 rr01 ll02 oo03 vv04 yy05 vv06 aa07 rr08 yy09
и задаю вот такой поиск в MySQL.
вот код преоброзования 2:

$name
=strtolower(trim("kkarlovyvary"));
	
	
	
	
$name=explode(\' \',$name);
	
	
	
	
$str=array();
	
	
	
	
for($x=1;$x<6;$x++){
	
	
	
	
	

	
	
	
	
	
	
$k=(int)($x/2)*($x%2==0?1:-1);
	
	
	
	
	
	
foreach ($name as $key => $val){
	
	
	
	
	
	
	
$len=strlen($val);
	
	
	
	
	
	
	
for ($i=0;$i<$len;$i++)
	
	
	
	
	
	
	
	
if(($i+$k)>=0)
	
	
	
	
	
	
	
	
	
$str[$x][$key][$i]=$val[$i].$val[$i].(($i+$k)<10?\'0\'.($i+$k)\\:\\($i+$k));
	
	
	
	
	
	
	
if(isset($str[$x][$key]))
	
	
	
	
	
	
	
	
$str[$x][$key]=implode(\' \',$str[$x][$key]);
	
	
	
	
	
	
}
	
	
	
	
	
	
$str[$x]=implode(\' \',$str[$x]);
	
	
	

	
	
	
	
}
	
	
	
	
$str=implode(\' \',$str);
	
	
	
	
echo $str;

P.S. если заменить for($x=1;$x<6;$x++) на for($x=1;$x<4;$x++) то будет +- один знак, если на 8 то +-3 знакав каждой буквы.
« Последнее редактирование: 18 Октября 2007, 14:53:50 от Altaxar »
Не все является тем чем кажется.

Оффлайн kolyuchii.exe

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 10
  • +0/-0
  • 0
    • Просмотр профиля
    • http://nikoan.cwx.ru/
Создание собственной CMS
« Ответ #8 : 12 Ноября 2007, 13:17:04 »
Как вы думаете, насколько эффективна защиса сайта средствами АПАЧ (.hpaccess)? Или лучше сделать нечто самому?

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28