PHP MySQL разработка — набор заданий для PHP-разработчика по взаимодействию языка и сервера БД MySQL: PHP магазин, поиск по базе, заполнение таблиц
Задание 1: PHP магазин
Создайте «двухстраничный» PHP магазин (index.php и basket.php). На главной странице магазина index.php должны располагаться товары в количестве не менее 5 наименований (не требуется, чтобы товары хранились в БД, это тема следующих заданий). с названием, стоимостью и кнопкой «Добавить». Правом углу главной страницы должна выводиться корзина пользователя, а при нажатии на «Добавить», товар должен появляться в пунктах корзины.
На странице basket.php сделать возможным изменением пунктов корзины и кнопку/ссылку «Заказать». При нажатии на неё, показывать поля доставки товара, а после, результат заказа (уникальный идентификатор и перечень товаров с указанием количества) должен оправляться в базу (в одну таблицу БД)
- предусмотрите постраничное разбиение для количества товаров более 9
- Для хранения корзины используйте сессионную переменную
- Количество товаров отдельного наименования должно меняться при добавлении в корзину
Задание 2: Заполнение связанных таблиц
Создайте две, связанные в MySQL как «один ко многим» таблицы: категории (category) и товары (catalog). Создайте php-скрипт, который будет выводить товары из каталога с указанием категории, добавлять новые категории, добавлять новые товары с указанием категории
- при добавлении товара должен быть доступен элемент <select> с перечнем категорий (они выбираются из таблицы category)
Задание 3: Поиск данных по базе
Создайте одну таблицу catalog. Товары в каталоге должны содержать поля: название, описание, категория, цена. Напишите скрипт, который будет принимать данные из HTML-формы и выводить отфильтрованные данные из таблицы. Форма должна содержать <select> с перечнем категорий и три текстовых поля фильтрации (название, описание, цена).
Нужно получить HTML форму приблизительно такого содержания:
<h2>Поиск товара</h2>
<form action="">
<input type="text" name="title"/>
<input type="text" name="description"/>
<select name="category" id="">
<option value="">Lorem.</option>
<option value="">Nesciunt!</option>
<option value="">Cumque.</option>
<option value="">Reprehenderit.</option>
</select>
<input type="text" name="price"/>
</form>
Задание 4: Паджинация
Создайте таблицу catalog. Напишите PHP код, который при выводе товаров из базы реализует постраничное разбиение материала (http://htmllab.ru/php-pagination/).
Задание 5: Аутентификация
Создайте таблицу user с полями id, user, pass, status. Заполните её несколькими строками данных. Реализуйте форму входа на сайт: при совпадении имен пользователя и хэша вводимого пароля с значением хэша в таблице, в сессионную переменную отмечать о корректной аутентификации и создавать ссылку «Выход» на странице. При некорректном вводе отмечать, что данные введены некорректно и выводить фразу «Некорректный ввод». Подсказка: логин: John, пароль: qwerty.
Задание 6: Заполнение данными сторонней таблицы
Дана MySQL-таблица. Написать php-скрипт, который будет заполнять таблицу данными.
DROP TABLE IF EXISTS `wp_posts`;
CREATE TABLE IF NOT EXISTS `wp_posts` (
`ID` bigint(20) unsigned NOT NULL,
`post_author` bigint(20) unsigned NOT NULL DEFAULT '0',
`post_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`post_date_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`post_content` longtext NOT NULL,
`post_title` text NOT NULL,
`post_excerpt` text NOT NULL,
`post_status` varchar(20) NOT NULL DEFAULT 'publish',
`comment_status` varchar(20) NOT NULL DEFAULT 'open',
`ping_status` varchar(20) NOT NULL DEFAULT 'open',
`post_password` varchar(20) NOT NULL DEFAULT '',
`post_name` varchar(200) NOT NULL DEFAULT '',
`to_ping` text NOT NULL,
`pinged` text NOT NULL,
`post_modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`post_modified_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`post_content_filtered` longtext NOT NULL,
`post_parent` bigint(20) unsigned NOT NULL DEFAULT '0',
`guid` varchar(255) NOT NULL DEFAULT '',
`menu_order` int(11) NOT NULL DEFAULT '0',
`post_type` varchar(20) NOT NULL DEFAULT 'post',
`post_mime_type` varchar(100) NOT NULL DEFAULT '',
`comment_count` bigint(20) NOT NULL DEFAULT '0'
) ENGINE=InnoDB AUTO_INCREMENT=2068 DEFAULT CHARSET=utf8;
Примечания:
- Эта таблица из БД WordPress; в процессе выполнения этого упражнения познакомитесь со структурой
- Рассмотреть варианты вставки данных через форму (по одной записи, при этом HTML-форму сделать минимальной, чтобы при проверке и работе не вводить 100-500 полей), а также пакетно, через LOAD DATA
- Не нужно уточнять у меня, что значит то или иное поле — пользуйтесь инетом
Задание 7: Содержимое сайта
Создайте простую таблицу для хранения страниц сайта. Реализуйте добавление, просмотр, удаление страниц сайта.
Примечания:
-
- Основной материал страниц должен добавляться через произвольный визивиг-редактор
- Адреса страниц должны быть реализованы в виде «чистых ссылок»
Задание 8: Игры на PHP
Это задание для отдыха и отвлечения от трудностей квеста. Нужно выполнить минимум одно задание из перечня
-
- Создайте на PHP игру пользователя с компьютером — «Крестики-нолики» (пример игры на JavaScript). Это задание для разминки и не требует работы с БД. Используйте сессию.
-
- Создайте игру «Угадай слово». Правила: есть база с таблицей слов и описаний этих слов. При старте игры, из базы выбирается произвольное слово и описание. Пользователю показывается описание и поля ввода для ввода букв слова. Все правильно введенные буквы учитываются, а неправильно введённые не показываются при проверке, чтобы пользователь продолжал ввод. Чем меньше ходов у пользователя — тем лучше
-
- Создать произвольную (от крестиков-ноликов, до монополии с шахматами) игру в двухпользовательском режиме. Для совместной игры нужно генерировать уникальный код и присылать партнеру по игре
-
- Создать игру морской бой. Режим работы с компьютером или парный
-
- Создайте игру, в которой нужно периодически заходит на страницу и «прокачивать» уровень игрового персонажа (героя или здания, или тому подобное). После каждого повышения уровня, должно требоваться больше времени на последующее улучшение. Используйте header() для обновления страницы после истечения требуемого времени. По-хорошему, игра должна использовать базу, но можно и на сессиях. Присмотритесь к Travian и Ogame
- Создайте игру по аналогии с Монополией. Будьте аккуратны, это затягивает 🙂 Предусмотрите многопользовательский режим.
Задание 9: Хранение переписки
Создать две таблицы users и messages для хранения переписки между пользователями. Реализовать возможность закрытой переписки между отдельными пользователями по аналогии с vk.com/fb.com (но без JS и AJAX — с ними можно экспериментировать после выполнения задания или прохождения квеста). Предусмотреть аутентификацию пользователей. При проверке задания — пришлите мне логин и пароль, для переписки с вами.
Задание 10: Автозамена слов
Есть таблица words, в которой хранятся слова и некоторые URL (создать самостоятельно). Создать простую форму из <textarea> и кнопки отправки формы. Написать скрипт, который будет заменять все слова полученные из многострочного текстового поля на те же слова, но с гиперссылкой на URL из базы.