Создаем скрипт вопрос ответ на PHP для сайта

faq для сайта

От автора: в этом уроке мы создадим с вами систему вопросов и ответов на PHP, используя также для этих целей возможности MySQL и jQuery. Такую систему чаще всего называют FAQ или ЧАВО и ее использование ограничено лишь Вашей фантазией — ведь это может быть не только система вопрос-ответ, но и, к примеру, пошаговая инструкция при выполнении каких-либо действий или что-либо еще.


Результат, к которому мы будем стремиться показан в самом начале предлагаемого видео. Вкратце, мы будем показывать только вопросы, а ответы на эти вопросы будут скрыты. По клику на нужный вопрос — ответ на него будет плавно появляться (или выезжать — можно не ограничиваться одним эффектом). Как Вы уже, наверное, поняли — эффекты мы будем добавлять при помощи возможностей библиотеки jQuery, ну а информацию (вопрос-ответ) — будем хранить в БД и получать ее оттуда при помощи PHP. Приступим.

Время ролика: 52:06

Ссылка для скачивания исходников: Скачать исходники

Ссылка для скачивания всего архива (видео+исходники): Скачать одним архивом. Размер: 126 mb.

Шаг 1. Создаем БД для системы вопрос-ответ

Прежде всего, нам необходимо создать хранилище для информации — это, конечно же, удобнее это сделать, используя БД. Если у Вас будет небольшая по объему страница и для нее не нужна будет БД — этот шаг вполне можно пропустить. Также, если Вы не хотите создавать БД вручную, то можете воспользоваться дампом БД из дополнительных материалов и просто импортировать его (как это сделать я показываю в видео).

Создадим необходимую нам БД. Об основах работы с БД я рассказывал в ряде предыдущих уроков, поэтому здесь буду объяснять предельно кратко. Если Вы используете пакет Денвер, то перейдите по ссылке http://localhost/Tools/phpMyAdmin/ и Вы попадете на страницу веб-приложения phpMyAdmin, предназначенного для администрирования MySQL. На этой же странице мы даем имя создаваемой БД — назовем ее «faq».
faqphp

После клика по кнопке «Create» создастся нужная нам БД. Вся информация в БД хранится в таблицах, поэтому нам нужно создать все необходимые таблицы в созданной БД. Создадим таблицу с тем же именем («faq») и количеством полей 3.

faqphp

После клика по кнопке «Go» мы попадем на страницу со структурой создаваемой таблицы. Здесь мы должны дать имена 3-м создаваемым полям и указать еще некоторую информацию:

faqphp

имя поля — «id», тип — INT, Index — PRIMARY, AUTO_INCREMENT;

имя поля — «question», тип — VARCHAR, длина — 255;

имя поля — «answer», тип — TEXT.

Давайте вкратце разберем каждое из полей. С именами, думаю понятно — в первом поле «id» мы храним идентификатор пары вопрос-ответ. Во втором поле «question» — храним вопрос и в третьем «answer» — ответ на этот вопрос.

Далее, тип поля. Для поля «id» мы указали тип INT — это целочисленный тип, т.е., в этом поле будут храниться только целые числа. Тип VARCHAR — это символьный (текстовый) тип, предназначенный для хранения небольших текстов, его длина — 255 символов. В поле типа TEXT можно хранить тексты больших объемов. Кроме того, для первого поля — «id» — мы указали Index — PRIMARY (в русскоязычной версии phpMyAdmin это «первичный ключ») и AUTO_INCREMENT. Эти два атрибута значат, что указанное поле мы не будем заполнять, его будет заполнять сервер. При этом все значения, заносимые в данное поле, будут уникальными, и каждое новое значение будет увеличено на единицу (автоинкремент). Если провести какую-нибудь знакомую аналогию, то это поле можно сравнить с номером по порядку в таблицах.M

После сохранения структуры таблицы мы можем перейти во вкладку Insert и занести в таблицу необходимые данные (хотя обычно это делается через административную часть).

faqphp

Как я говорил, мы заполняем только поля «question» и «answer», поле «id» будет заполняться сервером. Я создам 3 пары вопрос-ответ, но у вас их может быть сколь угодно много.

faqphp

Отлично! Мы создали БД и нужную нам таблицу. Теперь пришло время получить информацию из нее с помощью PHP, и создать полноценное приложение вопросов и ответов.

Шаг 2. Получение информации из БД, обработка её средствами PHP

Для урока я нашел в сети бесплатный шаблон сайта, в котором создал страницу faq.php. Обратите внимание, что расширение страницы должно быть именно php, поскольку в ней будет присутствовать код PHP. Перед получением информации из БД, мы должны с ней соединиться. Обычно соединение с БД выносят в отдельный файл, который затем просто подключают к странице. Но наш проект учебный и, к тому же, совсем небольшой, поэтому мы все будем делать на одной странице. Итак, откроем в редакторе страницу faq.php и в самом верху страницы подключимся к БД. Делается это при помощи 2-х функций: mysql_connect(«имя сервера», «пользователь», «пароль») и mysql_select_db(«имя БД»). Первой функцией мы подключаемся к серверу БД (в скобках указаны параметры, с которыми работает функция), второй — выбираем нужную БД для работы (на сервере ведь может быть не одна БД):

<?php
mysql_connect("localhost", "root", "") or die("Ошибка подключения к серверу");
mysql_select_db("faq") or die("Ошибка соединения с БД");
?>

Так как я работаю на Денвере, то указываю имя сервера «localhost» (в Вашем случае, скорее всего, имя сервера будет таким же, даже если Вы работаете на сервере хостера… все данные по работе с сервером хостер предоставляет в инструкции). По умолчанию уже создан пользователь с именем «root», которое я и указал. Пароль для этого пользователя не создан, поэтому в качестве третьего параметра функции mysql_connect() я указал пустое значение. Также желательно дописывать при работе с сервером MySQL условие на тот случай, если при соединении с сервером произошла какая-либо ошибка. Это желательно делать по той простой причине, что если не удалось соединиться с сервером, значит не будет вытащена информация на страницу, а, значит, страница будет полупустой, кроме того, на ней еще и будут выведены всевозможные ошибки. Мы задали такое условие функцией die(), которая в случае ошибки прекратит выполнение программы и выведет сообщение, указанное в кавычках.

Второй функцией мы выбираем нужную нам БД. Теперь мы можем сохранить файл и обновить страницу. Если все сделано верно, то страница должна загрузиться без всяких сообщений и ошибок. После успешного подключения мы можем получать информацию из нужной таблицы (таблиц также может быть несколько в выбранной БД). «Общение» с сервером MySQL происходит посредством запросов. Нам нужен всего один запрос, которым мы вытащим всю информацию из таблицы «faq». В запросе нам понадобится оператор SELECT, который, собственно, и обеспечивает выборку необходимой информации. Сам запрос отправляется в БД функцией mysql_query().

Итак, в нужном месте блока page (там, где мы хотим выводить вопрос-ответ) открываем конструкцию PHP и пишем запрос:

<?php
$res = mysql_query("SELECT * FROM `faq`");
?>

Для тех, кто знаком хоть немного с английским этот запрос будет практически полностью понятен. Затруднения может вызвать только символ звездочка («*»). Этот символ можно прочитать как «все» («all»). Сам же запрос можно прочитать так: «ВЫБРАТЬ все ИЗ `таблицы faq`». Все выбранное мы поместим в переменную $res. Таким образом, мы получили в $res все содержимое таблицы (пока что 3 строки). Удобство работы с MySQL заключается не только в том, что мы можем хранить информацию в ней, но и в том, что этой информацией можно очень легко манипулировать. Мы можем вытащить только конкретный ряд (строку) или даже конкретное поле ряда. Кроме того, существуют функции для того, чтобы можно было легко манипулировать ВСЕЙ извлеченной информацией, как в нашем случае. Функция эта — mysql_fetch_assoc(). Данная функция обрабатывает каждый ряд результата запроса и возвращает ассоциативный массив. В нашем случае будет обработано 3 ряда.

Что такое ассоциативный массив я уже рассказывал в нескольких предыдущих уроках. Это массив, ключами которого выступает строка (ассоциация). Ключами нашего массива будут выступать имена полей в таблице «faq». Как я упоминал, функция mysql_fetch_assoc() обрабатывает 1 ряд запроса. У нас таких рядов пока что 3. Для того, чтобы было обработано все 3 ряда — нам понадобится осуществить просто 3 однотипных действия — в этом нам помогут циклы, а именно — цикл while(). О работе с данным циклом я также довольно подробно уже рассказывал, а потому здесь скажу только пару слов. Само слово while можно перевести как «пока», т.е., пока будет выполняться некое условие (оно прописывается в скобках) — мы будем выполнять некий блок действий (они прописываются в операторных скобках).

Синтаксис цикла:

while(условие){
	блок действий;
}

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

Весь код блока PHP, отвечающего за вывод информации вопрос-ответ будет таким:

<?php
$res = mysql_query("SELECT * FROM `faq`");
while($row = mysql_fetch_assoc($res)){
	echo '<div class="question">' .$row['question']. '</div>
	<div class="answer">' .$row['answer']. '</div>';
}
?>

Как и говорилось, функция mysql_fetch_assoc() берет каждый ряд результата запроса из переменной $res и возвращает ассоциативный массив $row. Как только ряды закончатся — работа цикла завершится. В блоке действий мы при помощи функции (или, скорее, конструкции) echo выводим в блоках каждое конкретное значение элементов question и answer массива $row.

Теперь мы можем обновить страницу и увидеть, что система вопросов и ответов на PHP, практически полностью готова. Осталось добавить небольшой функционал jQuery, для достижения конечного результата.

Шаг 3. Пишем функционал jQuery

Для использования фреймворка jQuery нам, прежде всего, понадобится сама библиотека. Текущую версию ее можно скачать на сайте http://jquery.com/

Сохраненную библиотеку поместим в каталог scripts под именем jquery.js (можно и в любой другой каталог под любым именем). Теперь мы должны подключить эту библиотеку на нужной странице. Делается это очень просто — внутри тегов head пропишем такую строку кода:

<script type="text/javascript" src="scripts/jquery.js"></script>

Теперь скажем несколько слов об основах работы с jQuery. Конечно же, в пределах одного урока невозможно научиться работе с данным фреймворком, но, на самом деле, ничего сложного здесь нет и всю работу с ним можно разделить на 3 этапа:

отбор элементов и формирование «набора jQuery» (выборки);

отслеживание событий, которые происходят с отобранными элементами;

реакция на событие.

Основа основ работы с jQuery как раз и заключена в первом пункте — отбор элементов, с которыми мы будем работать. Как же мы можем отобрать эти элементы. Все просто — для этого достаточно знаний CSS… Разработчики не стали выдумывать новый синтаксис для фреймворка и для формирования выборки использовали синтаксис CSS.

Давайте для начала определимся немного с тем, что нам нужно сделать. Все ответы изначально будут скрыты. По клику (это как раз и будет событие) на вопрос — мы покажем (это уже реакция на событие) ответ на него. А в выборку мы, соответственно, должны взять все вопросы. Как говорилось, для того, чтобы взять все вопросы, — нам достаточно знаний CSS… Мы неспроста блокам вопросов присвоили class=»question». Именно по указанному классу мы и можем отобрать все элементы с этим классом в набор jQuery (хотя способов отбора jQuery нам предоставляет массу). Взять все нужные нам элементы мы можем всего одной строкой кода:

$(".question");

Как видите, используется синтаксис CSS, т.е., мы взяли все элементы с классом question. Далее мы будем просто отслеживать события по отобранным элементам.

Перед тем, как мы продолжим с jQuery — опишем созданные классы question и answer в таблице стилей. Для этого либо прямо на странице пропишем нужные стили, либо сделаем это в файле стилей layout.css:

.question{
	cursor: pointer;
	text-decoration: underline;
	background-color: #ccc;
	border: 1px solid #888;
	margin-top: 5px;
	padding-left: 10px;
}

.answer{
	border: 1px solid #ccc;
	padding: 5px;
	margin-bottom: 10px;
	display: none;
}

Вкратце опишем то, что мы прописали в коде. Класс question:

— курсор сделаем в виде руки, т.е., такой, какой мы видим при наведении на ссылку;
— установим подчеркивание текста;
— фоновый цвет;
— рамка;
— внешний отступ сверху;
— внутренний отступ слева;
Класс answer:
— рамка;
— внутренние отступы;
— внешний отступ снизу;
— и ключевое свойство — скрываем блок.

После сохранения стилей — все ответы будут скрыты. Теперь пропишем весь код jQuery, а затем прокомментируем его:

<script type="text/javascript">
$(document).ready(function(){
	$(".question").toggle(function(){
		$(this).next().slideDown();
	}, function(){
		$(this).next().slideUp();
	});
});
</script>

Прежде всего, мы прописали событие ready(), в которое поместили весь остальной код. Это сделано для того, чтобы этот код выполнялся только после того, как будет полностью сформировано DOM-дерево или, говоря проще — после того, как полностью будет загружена страница. Для знакомых с английским она интуитивно понятна — после того, как будет готов (ready — готово) документ — выполним все необходимое. Что же именно мы выполним? Мы отберем все элементы с классом question (в набор попадут все наши 3 блока с вопросами). А далее мы применим к элементам набора метод toggle(). Что делает этот метод? Этот метод организует своеобразный переключатель функций. Поскольку нам необходимо только 2 состояния блоков с классом answer — показывать/скрывать — в переключатель мы поместим 2 функции (на самом деле таких функций может быть гораздо больше). Говоря простым языком — мы создали обычный выключатель с двумя положениями — on|off. Метод toggle() будет отслеживать событие клика по отобранным элементам и применять функцию, при этом одному клику будет соответствовать вызов одной функции. Чтобы было понятнее с порядком работы прописанных нами 2-х функций возьмем пример клик (реакция):

1-ый клик (вызов функции 1); 2-ой клик (вызов функции 2); ; 3-ий клик (вызов функции 1) и т.д.

Таким образом, по кликам осуществляется переход от функции к функции. Когда все функции отработали — наш своеобразный счетчик обнулится и по следующему клику вновь выполнится самая первая функция. Все предельно просто.

Что же мы прописали в функциях, вызываемых переключателем (по клику)? Мы должны по клику на конкретный вопрос вызвать блок с ответом именно на конкретный вопрос. Например, по клику на вопрос 2 — показать ответ 2. Для этого нам достаточно перейти к следующем элементы после того, по которому произошел клик. Сделать это можно при помощи следующей записи: $(this).next(). Опять же, для тех, кто знаком с английским, все должно быть интуитивно понятным.

This (этот) — это указатель на текущий элемент, т.е., тот элемент, по которому был клик. Next (следующий) — это переход от текущего к следующему элементу. Поскольку следующим после вопроса будет ответ на него — как раз и будет выбран нужный нам элемент, к которому будет применен один из методов эффектов: slideDown (раскрывает элемент набора) или slideUp (скрывает элемент набора) — в зависимости от состояния переключателя.

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

Заключение

Вот таким вот не слишком сложным способом, мы реализовали нашу задумку и получили в итоге довольно неплохую систему вопросов и ответов на PHP, часто задаваемых вопросов — FAQ, ЧАВО. Как говорилось выше, использовать наше творение можно не только для создания страницы FAQ. Этот же принцип может быть использован и для, к примеру, формы обратной связи на странице. Для того, чтобы она не занимала много места на странице — мы можем ее скрывать и показывать только тогда, когда пользователь решит ее заполнить. Для этого нам достаточно поместить ссылку с текстом типа «Развернуть форму» и по клику на этот текст — показывать форму. На этом урок завершен. До новых встреч!

Рад видеть ваши отзывы и вопрос в комментариях!

JavaScript. БОЛЬШЕ ЧЕМ ПРОСТО САЙТ! Первый в рунете видеокурс по JavaScript!

Автор: Кудлай Андрей

Редакция: Рог Виктор и Андрей Бернацкий. Команда webformyself.

E-mail: contact@webformyself.com

Курс по программированию на языке PHP

Изучите PHP с нуля до результата!

Смотреть курс

Метки:

Комментарии Вконтакте:

Комментарии Facebook:

Комментарии (58)

  1. Павел

    Спасибо! Для меня урок очень полезный и своевременный) Буду ждать следующий)

  2. Денежный сайт

    Ну чтож. Достаточно полезный урок для начинающих. К стате говоря он и мне оказался полезным. Спасибо вам за него

  3. Александр

    Прекрасный урок!!! Получил истинное удовольствие и от самой темы и от её подачи… СПАСИБО БОЛЬШОЕ!
    Но очень бы хотелось, если есть такая возможность, узнать как можно сделать аналогичную «штуку», но без использования БД на «Мускуле», а с исппользованием ТХТ-хранилища данных… И конечно, очень хочется продолжения: как сделать фому отпавки вопосов в «живом эфире»? и как сделать админку для редактиования написанного и отправки ответов?…
    Спасибо!

    • Андрей Кудлай

      Вам спасибо за комментарий и… отдельное спасибо за идею ;)
      В общем, не проблема — попробуем записать цикл из парочки небольших уроков, где будет рассказано как использовать для хранилища ТХТ-файлы, основы работы с файловой системой, ну и будет простенькая админка к данному проекту.

  4. Степан

    Спасибо за отличную тему и прекрасно приготовленный видео урок!
    На сайте виде просматривается!
    А вот (видео+исходники) скачал одним архивом, и файл [video.mp4] из архива НЕ вытаскивается!
    Пишет сообщение- [Ошибка CRC в video.mp4, файл повреждён]

  5. Игорь

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

  6. Руслан

    Для нубов :)

  7. Виктор Рог

    Перезалил архив. Все вроде как работает!

  8. Отец Виктор

    Огромное спасибо за ваш труд! Попробуем воплотить в жизнь.

  9. Гость

    К сожалению, у «народа» бывают какое-то непонятное поведение: то скачивается все за пару-тройку секунд, то предлагает ожидать целых 2 часа (или даже больше)…
    Как показывает практика, filesonic, hotfile, rapidshare и даже turbobit более удобны для конечного пользователя — дают возможность скачать даже в бесплатном режиме значительно быстрее — максимум минут за 30-40 файл размером 100-150 Мб.
    Уверен, что Ваши подписчики и просто посетители этого несомненно полезного сайта будут благодарны Вам, если материалы будут размещены еще и на других зеркалах.

    За статью спасибо.
    За сайт — отдельное спасибо — нашел много полезных материалов.

  10. Игорь

    Архив нормальный. Все работает. Спасибо!

  11. Эдуард

    Меня давно просили сделать что-то навроде справочника.
    Теперь знаю как!
    Большое спасибо!

  12. Наталия

    Урок бесподобный!!!
    Страх перед МУСОЛОМ (так я называю между собою MySQL) меня всегда сковывал и не позволял идти дальше простого PHP.
    Теперь, я думаю, страх будет снят, и я смогу научиться использовать MySQL во всем его многообразии.
    Огромное Вам спасибо!

  13. Vlad

    Спасибо. Как всегда очень доходчиво.

  14. Сергей

    Спасибо за урок. Попробую разобраться.

  15. Олег Лукин

    Спасибо. Вовремя урок появился, не мог найти ошибочку на сайте. После просмотра видео все встало на свои места. Величайшая благодарность автору урока.

  16. Георгий

    ПО ссылке Скачать исходники загружается архив на 27 Kb, который не открывается !??

  17. Aleks

    Спасибо за урок. Приятно повторять и видеть чтото новое. Рекомендую к просмотру всем.

  18. Сергей

    Спасибо за понятный и нужный урок!

  19. Максим

    довольно простой урок для начинающих….. Но все равно, делаете полезное дело!!!!!!!!!!!!!!!

  20. светлана

    Копала интернет и ничего подобного не находила.Для таких как я новичков все преподнесли просто и доходчиво,РЕБЯА ОГРОМНОЕ СПАСИБО!Жду с нетерпением следующие уроки.

  21. Андрей

    Подскажите как создать такую страницу уже на готовый сайт? То есть как добавить в Базу данных?

    • Андрей Кудлай

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

      • Андрей

        Буду ждать с нетерпением новых уроков. Таблицу я в БД создал, а как это все подключит к своей теме не знаю.

  22. Марина

    Очень понравился урок.
    Все работает.
    Но при выводе результата — цифры выводятся нормально, а буквы — «шаг», текст вопроса — все буквы выводятся «????????».
    Кодировку подобрать не смогла.
    В чем причина- заполнение БД (кодировку меняла ср1251 и utf8) или в скрипте.
    Подскажите, пожалуйста.

    • Андрей Кудлай

      Марина, здесь вопрос удаленно решить довольно сложно. Могу посоветовать следующее — и страница сайта, и данные в БД желательно должны быть в одной кодировке. Если кодировка контента в БД отлична, то можно привести ее в соответствие с кодировкой сайта при помощи следующего запроса: mysql_query(«SET NAMES ‘cp1251′»);
      Этот запрос следует выполнить в скрипте сразу же после соединения и выбора БД, т.е. в самом верху файла. В запросе установлена кириллическая кодировка соединения. Если содержимое страницы имеет кодировку юникод, то, соответственно, вместо cp1251 нужно указать utf8.

  23. Артур (;

    ВИдеоурок просто красава, весб день искал это и никака найти не мог, огрооомное спасибо :) ))))))

  24. Виталий

    Я выставил сравнение cp1251_general_ci, кодировка страницы: windows-1251. Тем не менее, на странице вижу только одну надпись:

    Нет соединения с базой данных

    • Андрей Кудлай

      После соединения с БД сформируйте еще один запрос, которым устанавливается кодировка соединения:
      mysql_query(«SET NAMES ‘cp1251′») or die(«Can’t set charset»);

  25. Матвей

    А возможно ли доработать FAQ таким образом:
    1. сделать окно где пользователь вводит свой вопрос но там как в поисковой строке гула подставляются уже существующие вопросы и если он пытается набрать то что там уже есть то по энтеру выводится окно с ответом на вопрос.
    2. Если вопрос отличается от того что он спрашивает то вопрос отправляется админу а на экране выводится форма где пользователь оставляет свои контакты куда придет ответ на вопрос. ну и админу бы еще в форме где он получает подобный запрос от пользователя после ответа на него, что бы этот ответ и вопрос попадали в FAQ.
    Если сделаете такой урок буду просто очень счастлив)

    • Андрей Кудлай

      Возможно :)
      Только это будет уже не совсем FAQ, а поиск по нему (по сайту). Делается это с помощью AJAX’a — в БД хранится список вопросов и начиная, к примеру, с 4-го введенного символа формируется асинхронный запрос, которым проверяется есть ли совпадения со значением поискового инпута.
      Попробуем реализовать эту идею и записать урок, возможно, немного в другом представлении, но суть идеи останется неизменной.

  26. Андрей

    Здравствуйте, Андрей!
    Скажите, а как можно сделать, чтобы информация из БД извлекалась не сплошь построчно, а выборочно по категориям? Например, мы формируем БД не из трех, а из четырех столбцов, где присваиваем той или иной строке категорию, например, кат. 1 и кат. 2. А потом извлекаем сведения покатегорийно, например все строки кат.1 или все строки кат.2.

    • Андрей Кудлай

      Здравствуйте, Андрей :)
      Как Вы правильно заметили, в БД нужно будет создать еще одно поле типа INT, в котором будет содержаться идентификатор категории. Обычно под эти цели также создается еще одна таблица с названиями категорий — в ней будет 2 поля (id и поле названия). Вот этот вот id и будет соответствовать идентификатору категории в таблице с вопросами. Но это все зависит от задач приложения.
      А для того, чтобы выбрать записи только, к примеру, категории 2 — достаточно добавить к запросу выражение WHERE. Это своеобразное условие, которым задается параметр выборки. Запрос тогда будет таким:
      $res = mysql_query(«SELECT * FROM faq WHERE cat=2″);

      • Андрей

        Спасибо, Андрей!

      • Андрей

        Здравствуйте!
        Помогите еще усовершенствовать этот код. Если категорий много, то не хочется писать для каждого списка отдельный файл с данным кодом. Как сделать так, чтобы в части «WHERE o_category=X» вместо Х из некоего отдельного списка ссылок на категории подставлялось бы значение той категории, на которую переходит пользователь? А для вывода списков существовал бы единый файл-шаблон вывода? Спасибо.

        • Андрей Кудлай

          Здравствуйте!
          Помогаю ))) Архив можно скачать здесь — http://narod.ru/disk/36201184001/faq.rar.html
          В архиве доработанный файл faq.php и дамп БД.
          Что изменено:
          1) в БД добавлена таблица категорий cat с двумя полями: идентификатор и название категорий;
          2) в таблице faq добавлено 1 поле id_cat, по которому определяется принадлежность вопроса к той или иной категории;
          3) в файле faq.php сначала выбираются все категории, при этом каждое название категории является ссылкой, передающей GET-параметр категории;
          4) по клику на категории получаем GET-параметр, по которому и выбираем вопросы нужной категории из БД.
          В общем, ничего сложного :)
          С оформлением, думаю, разберетесь.

          • Андрей

            Спасибо, Андрей! Будьте так любезны, помогите еще раз, последний. Для того, чтобы моя идея обрела окончательную реализацию, мне нужно, чтобы список наших вопросов и ответов являлся списком ссылок, при переходе по которым каждая пара вопрос-ответ открывалась бы на отдельной странице. Как это можно сделать в том изначальном варианте кода? Спасибо.

        • Андрей Кудлай

          Пожалуйста ;)
          Тут я помогу Вам уже алгоритмом, поскольку то, что Вы просите уже кардинально отличается от идеи самого урока…
          1) по клику на категорию выводим список вопросов этой категории (это я уже сделал, только убираем из реализации ответы);
          2) по клику на вопрос передаем GET-параметром идентификатор вопроса на новую страницу;
          3) на новой странице принимаем этот идентификатор и достаем из БД 1 запись, соответствующую полученному идентификатору;
          4) выводим в нужной форме полученную запись…
          Все… в принципе, все, что нужно — это создать еще 1 файл для вывода пары вопрос-ответ… немного разберитесь в файле, который я вчера сделал и все у Вас получится.

          • Андрей

            Все сработало! Спасибо, дай Вам Бог удачи!

        • Андрей Кудлай

          Пожалуйста. И Вам удачи :)

  27. Андрей

    Андрей, где Вы рассказывали об основах работы с БД? Я не нашел ничего!

  28. Андрей

    Здравствуйте!
    А что с видео, ничего не показывает?

    • Андрей Кудлай

      Здравствуйте!
      Только что проверил — все показывает. Если у Вас не показывает, скорее всего необходимо обновить Flash Player. Также можно скачать видео — в начале урока есть ссылка и посмотреть через проигрыватель.

  29. mayya.sultanova@gmail.com

    Spasibo — ohen ponravilos — dostupno. Daje video ne otkrivala.
    Xohetsya teper bolshe derzat :)

  30. Елена

    Вот спасибо! Огромная вам благодарность! Очень-ОЧЕНЬ кстати нашла у вас на сайте этот урок! Все понятно, все так подробнейшим образом рассказано! Что просто не возможно не понять! Здорово!
    Ну и все-таки вопрос хочется спросить. Хочу сделать так, чтобы при клике мышкой срабатывал не один, а сразу два стиля, которые так же идут друг за другом. Как можно так сделать?
    Пробовала в один стиль объединять, но не получается. Потому что один — отвечает за стиль изображения, второй — за стиль текста.

    • Андрей Кудлай

      Пожалуйста.
      Для того, чтобы добавить каких-то стилей, достаточно описать их в классе и добавлять данный класс методом addClass() или удалять методом removeClass()
      Попробуйте, если что-то не получится — милости просим на наш форум, где постараемся помочь с кодом.

      • Елена

        AddClass нужно прописывать как параметр в next()?

        • Андрей Кудлай

          Нет, не как параметр, а как продолжение цепочки. Давайте все же продолжим решение вопроса на форуме, поскольку комментарии ну никак не предназначены для этого.

          • Елена

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree