Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2011, 21:40   #1
mr.saalexander
Пользователь
 
Регистрация: 17.05.2011
Сообщений: 10
Вопрос PHP поиск + несколько преобразований

Добрый вечер.
По учебе задали проект - написать небольшой сайт который хранит в базе данных статьи зарегистрированных пользователей.

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

и так, излагаю.

Сейчас сайт разрабатываю у себя на компьютере.
Использую в качестве сервера Apach + PHP + MySQL (Denwer)
Есть база данных.
В ней на данный момент 2 таблицы:

пользователи (id, логин, пароль, email, валидация)
статьи (id, название, краткое описание, полное описание, дата_создания, hide, user_id)

user_id связан с пользователи.id
hide - поле показывает, будет ли выводиться статья в поиске или нет.


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

Первое - это поиск на php.

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

Второе - корректный вывод данных

Допустим в базе данных хранится 300 статей. Из них в поиск попало 200 статей. Подскажите пожалуйста, как вывести на каждую страницу только по 20 статей, а с низу сделать переход по страницам 1 | 2 | 3 | 4 (прим. Яндекс)

Третье - генерация ссылки


Немного решил усложнить задачу. Хочу реализовать, но пока не знаю как: когда пользователь, авторизовавшись, решает добавить статью, в специальный инпут, генерировалась ссылка на эту статью типа http://www.сайт1.ru/1.html

чисто только чтобы было число, т.е ссылка на другую статью была http://www.сайт1.ru/100500.html и тд. Я так понимаю, нужно это делать инкриментом.

Сам код поиска сейчас выглядит так:

PHP код:
$first_rec=0;
$num_rec=20;
$k=0;
$query "SELECT title, s_disc, date FROM articles WHERE (title LIKE '%".$_POST['search-str']."%') OR 
(s_disc LIKE '%"
.$_POST['search-str']."%')";

$result mysql_query($query) or die ("Ошибка при запросе");

/*Печать результатов запроса*/

print "<table>\n";

while (
$massive mysql_fetch_array($resultMYSQL_NUM)) {

print 
"\t<tr>\n";

for (
$i=1;$i<=4;$i++) { print "\t\t<td>$massive[$i]</td>\n"; }

print 
"\t</tr>\n";

}

print 
"</table>\n";

/* Освобождение памяти, занятой результатом запроса */

mysql_free_result($result);

/* Закрытие соединения */

mysql_close($connect);

?> 
Заранее спасибо за помощь.
mr.saalexander вне форума Ответить с цитированием
Старый 17.05.2011, 21:54   #2
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

1. Понятно, что какая-то ссылка у статьи должна быть, преобразования можно сделать через mod_rewrite. Тогда можно сделать что-то типа site.ru/ABCDE - а при этом будет открываться что-то другое, или же просто вот так и будет.
2. Постраничный вывод - надо поискать по словам. В целом делается через LIMIT.
3. Можно хранить текущее число статей, а при добавлении считывать его и делать инкремент
motorway вне форума Ответить с цитированием
Старый 17.05.2011, 22:12   #3
mr.saalexander
Пользователь
 
Регистрация: 17.05.2011
Сообщений: 10
По умолчанию

1. Хорошо, в принципе да, а можно по подробнее узнать на счет этих преобразований, но при этом, чтобы в запросе - выводился чисто заголовок статьи.
2. Где можно найти хотя бы примерный код, чтобы на основании его (подкорректировав) сделать то что нужно.
3. Где именно лучше хранить? в принципе можно при каждом новом добавлении статьи, перед добавлением естественно, делать запрос на выборку всех статей, сохранить в переменную, и к ней прибавить +1 да? так?
mr.saalexander вне форума Ответить с цитированием
Старый 17.05.2011, 22:28   #4
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

1. Может, я не до конца понял, что нужно, но в целом в Гугле можно поискать по mod_rewrite.
Вот пример:
Код:
RewriteRule ^([a-zA-Z0-9_-]+)$ script.php?url=$1
Такая запись в файле .htaccess будет запускать скрипт нужный, а в адресе при этом будет site.ru/ABCDE
2. Поискать здесь или в Гугле по словам "постраничный вывод"+PHP+MySQL
3. Можно хоть в файле простом текстовом. Число с кол-вом всех статей.
Ну или специальное поле в БД.
Считывать надо будет это число и прибавлять. Либо как-то автоматически
motorway вне форума Ответить с цитированием
Старый 17.05.2011, 22:49   #5
mr.saalexander
Пользователь
 
Регистрация: 17.05.2011
Сообщений: 10
По умолчанию

Все хорошо, спасибо большое. Если будут сложности, то я снова сюда напишу.
mr.saalexander вне форума Ответить с цитированием
Старый 17.05.2011, 22:52   #6
8oOoRPM
Форумчанин
 
Регистрация: 12.11.2010
Сообщений: 146
По умолчанию ответ

1. поиск у вас гавно
2. открыты пути хакерам и лузерам которые знают об инджекте,
при желании я выведу и сохраню дамп у себя всех статей на сайте
3. ссылка генерируется ишодля из значений вставленых в мускул, если это без mod_rewrite то простым $_GET параметром со структурой ?id=321,
где 321 это айди поля из базы с автоинкрементом
4. phpclasses.org- поиск - pagination

Советы:
Фильтровать данные при работой с бд, минимум- htmlentities или strip_tags и mysql_real_escape_string

Для поиска дам функцию которая подготавливает строку к полнотекстовому поиску посредством REGEXP
PHP код:
 function search_prepare($strin)
 {
   
$search strtoupper(preg_replace('/,/'' 'trim($strin)));
   
$search strtoupper(preg_replace('/;/'' 'trim($search)));
   
$search strtoupper(preg_replace('/-/'' 'trim($search)));
   
$search strtoupper(preg_replace('/\./'' 'trim($search)));
   
$search strtoupper(preg_replace('/\s+/''|'trim($search)));
   return  
mb_strtoupper(urldecode($search), 'UTF-8');
 } 
остальное уже сами
8oOoRPM вне форума Ответить с цитированием
Старый 17.05.2011, 23:09   #7
mr.saalexander
Пользователь
 
Регистрация: 17.05.2011
Сообщений: 10
По умолчанию

вот поэтому сюда и обратился, что всех тонкостей не знаю
спасибо за помощь

на счет pagination можно в кратце, своими словами. Что это есть такое

Последний раз редактировалось mr.saalexander; 17.05.2011 в 23:12.
mr.saalexander вне форума Ответить с цитированием
Старый 18.05.2011, 07:07   #8
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Во-первых, держать полное описание статьи в базе это извращение. Статью храните в файле, а в базе держите указание на это файл.
Во-вторых, не придумывайте свой велосипед и используйте для поиска Sphinx.
Виталий Желтяков вне форума Ответить с цитированием
Старый 18.05.2011, 07:26   #9
Alexei91
Заблокирован
Форумчанин
 
Аватар для Alexei91
 
Регистрация: 30.12.2009
Сообщений: 544
По умолчанию

Цитата:
держать полное описание статьи в базе это извращение
WordPress держит статьи в таблице префикcзаданныйприустановке_posts. Drupal по-моему тоже тексты нод держит в базе. А вот изображения, вложенные файлы и прочее уже отдельно.
ИМХО, писать свою CMS с нуля без использования каких-либо фреймворков - вот извращение.
Темы для WordPress. Русские WordPress шаблоны
Alexei91 вне форума Ответить с цитированием
Старый 18.05.2011, 08:31   #10
mr.saalexander
Пользователь
 
Регистрация: 17.05.2011
Сообщений: 10
По умолчанию

давайте не будем разводить "извращение" не "извращение". Просьба была не такая. На счет сфинкса - спасибо, прочитал - вроде бы хорошая штука.
mr.saalexander вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод побитовый преобразований EddieG Общие вопросы C/C++ 2 19.09.2010 17:18
Шифрование методом аналитических преобразований Margosha89 Помощь студентам 0 31.05.2010 16:04
Шифрование методом аналитических преобразований! Margosha89 PHP 7 31.05.2010 11:49
Поиск в листе Excel одного значения несколько раз Andr3000 Microsoft Office Excel 2 23.04.2010 10:24
Вывод массива после некоторых преобразований в С++ xnise Помощь студентам 8 05.12.2009 12:13