| |||||||
Программирование Создание, разработка и доработка различных игр и программного обеспечения |
|
|
Опции темы |
15.01.2009, 23:30 | #1 | ||
Игроман
Регистрация: 13.07.2007
Адрес: Сімферополь
Сообщений: 3,012
Репутация: 629
|
Краткий мануал по PHP + MySQL
Дело было ночью, делать было нечего... Решил написать мануал, который думаю поможе каждому начинающему программисту, который хочет познакомиться с mysql.
Этот краткий мануал поможет начинающим программистам, которые хотят научиться писать подобные системы, а так же обучиться основам синтаксиса и использования mysql в php. Я не буду углубляться в тонкости php и mysql, я всего лиш попытаюсь дать вам базовые знания используя их вы со временем уже сами сможете усовершенствовать свои знания. Внимание! Мануал предназначен только для ознакомления с mysql и помогает новичкам понять алгоритм построения систем управления пользователями. Использовать его в рабочих проектах крайне не рекомендуется Итак, чтобы вы поняли основу построения сиетем управления пользователями и получили базовые знания mysql, я на примерах расскажу вам как реализовать следующии функции: - Регистрация пользоваталей (добавление данных в таблицу) - Авторизация пользователей (выборочное получение данных с таблицы, использование сессий) - Получение списка всех пользователей (массовое получение данных из таблицы, сортировка и вывод на экран) - Поиск пользователей (поиск по базе) - Редактирование/удаление профиля (редактирование/удаление полей в таблице) Для начала, советую вам ознакомиться с функциями, которые будут использованы в данном мануале при работе с mysql: mysql_connect() mysql_select_db() mysql_query() mysql_num_rows() mysql_fetch_assoc() mysql_error() Первое что нужно сделать - это подключиться к базе данных (в дальнейшем БД) и создать таблицу пользователей с определённой структурой. Для этого создадим 2 файла: config.php и create_table.php файл config.php будет служить нам для подключения к БД и хранения данных для подключения. Текст файла config.php: Скрытый текст: Если всё сделано правильно, то, запустив этот скрипт в браузере, вы должны получить чистую страницу. Теперь создадим в нашей базе таблицу users. Для этого нам нужно выполнить mysql запрос. Синтаксис создания таблицы имеет примерно такой вид: CREATE TABLE `имя_таблицы` ( `поле 1` параметры поля, `поле 2` параметры поля, `поле 3` параметры поля, параметры таблицы); Для выполнений mysql запросов в php используется функция mysql_query(). Итак, текст файла create_table.php: Скрытый текст: Объясню назначения параметров, использующихся при создании данного запроса. INT, VARCHAR, TEXT - тип поля (цифра в скобках после типа определяет максимальную длину поля) NOT NULL - не является неопределённостью. default - стандартное значение поля (в данном случае все поля изначально пустые) auto_increment - автоматическое заполнение поля. При каждом заполнении таблицы значение этого поля будет увеличиваться на 1 PRIMARY KEY - первичный ключ. Первичный ключ определяет уникальность строки, и препятствует вводу повторяющихся данных в это поле. В данном случае, это поле `id`. Теперь запустите скрипт через браузер. Если всё сделано правильно вы должны увидеть на экране Table created successful! Теперь, когда таблица создана, можем перейти к основной части. Сейчас попытаемся сделать регистрацию пользователей. Для начала создадим файл reg.php. Теперь мысленно представим себе структуру скрипта: 1) рисуем ХТМЛ форму. 2) если форма была заполнена и отправлена на сервер, проверяем введённые данные на валидность. 3) если ошибок не обнаружено, заполняем таблицу users используя полученные данные, в противном случае выводим сообщение об ошибке. Сразу скажу, что пароли в таблице в открытом виде храниться не будут. В таблице будет храниться мд5 хеш пароля. Синтаксис запроса для занесения данных в таблицу имеет несколько видов. Я советую пользоваться вам вот таким: INSERT INTO `имя таблицы` ( `поле 1`, `поле 2`, `поле 3` ) VALUES ( 'значение поля 1', 'значение поля 2', 'значение поля 3') Текст файла reg.php: Скрытый текст: Тестируем, смотрим таблицу через, например, майадмин. Если юзер появился - всё сделано правильно. Следующий шаг - авторизация пользователей. Для этого создадим файл index.php. Логика скрипта очень простая: 1) Если есть пост данные ищем пользователя в таблице с таким же именем и паролем. Если он обнаружен - объявляем новую сессионную переменную и в качестве значения присваеваем ей id этого пользователя и редиректим на тот же index.php. 2) Если пользователь не обнаружен, выводим сообщение о неудачной авторизации. 3) Если же пост данных нет, просто чекаем наличие сессии. Если сессия есть - Показываем закрытую страницу. Если же нет - рисуем форму авторизации. Скрытый текст: Запрос выбора данных строится так: SELECT `имя поля` FROM `имя таблицы` WHERE `поле 1`='значение 1' and `поле 2`='поле 2' LIMIT 1 - знак * после слова SELECT означает что нужно выбрать все поля - в sql запросах можно использовать только словесные обозначения AND и OR. Знаки &&(и) и ||(или) здесь работать не будут - При сравнении могут использоваться следующие операторы: = (равно), > (больше), < (меньше), >= (больше или равно), <= (меньше или равно), < > (больше или меньше (оператор != в sql запросах не используется)) - LIMIT 1 означает что результат нужно ограничить лиш одной строкой Текст файла index.php: Скрытый текст: Теперь, что бы сделать выход пользователя, создайте файл logout.php. Файл очень простой - удаляем сессию, редиректим на index.php Текст файла logout.php: Скрытый текст: Осталось реализовать изменение и удаление данных, массовый вывод информации из таблицы и поиск по бд. Сначала сделаем самое простое - поиск пользователей по логину. Создайте файл search.php Запрос поиска формируется так: SELECT `имя поля` FROM `имя таблицы` WHERE `имя поля` LIKE '%значение%' - Знак % означает любой символ тут всё просто: 1) проверяем, есть ли ПОСТ-данные 2) если есть, ищем в таблице users 3) рисуем форму поиска текст файла search.php: Скрытый текст: Теперь создадим файл list.php в котором будет выводиться список всех пользователей. Структура скрипта не сильно отличается от скрипта поиска, поэтуму, думаю, пояснять тут нечего. Текст файла list.php: Скрытый текст: Следующий, предпоследний шаг - изменение данных в таблице. Точнее, мы будем изменять логин и пароль пользователей. Создадим файл edit.php Запрос изменения данных в таблице выглядит так: UPDATE `имя таблицы` SET `поле 1`='значение 1', `поле 2`='значение 2' WHERE `поле 3`='значение 3' Логика скрипта простая: 1) проверяем, есть ли ПОСТ-данные 2) изменяем значения полей в таблице 3) рисуем форму Тут тоже, надеюсь, всё понятно. Текст файла edit.php: Скрытый текст: Ну и наконец создаём последний файл delete.php. Наверное это самый лёгкий скрипт из всех Структура запроса удаления записи в таблице: DELETE FROM `имя таблицы` WHERE `поле 1`='значение 1' Логика скрипта: 1) удаляем пользователя 2) Уничтожаем все сессии и выводим на экран сообщение об удачном удалении пользователя. Текст файла delete.php: Скрытый текст: Поздравляю! Вы освоили построение базовых sql запросов, которые вам будут нужны на протяжении всей вашей крьере программиста. Всем спасибо. Надеюсь, этот мануал действительно кому-то поможет Искрене ваш, Hast. ЧаВо: Скрытый текст: UPDATE: Мануал обновил, учёл все замечания и пожелания. По всем вопросам и предложениям по улучшению мануала или фака — ко мне в ЛС.
Последний раз редактировалось Hast; 25.03.2010 в 17:00. |
||
|
12.03.2011, 11:18 | #22 | ||
Новичок
Регистрация: 03.06.2010
Сообщений: 0
Репутация: 0
|
Цитата:
Просто очень много слов было написано о том, что код кривой, хотя, признаться, я и сам бы так написал (в плане алгоритма и запросов) Хотелось бы, как новичку, увидеть правильно исполнение, изложенного автором сабжа, кода=))) |
||
|
12.03.2011, 11:39 | #23 | ||
Шаман
Регистрация: 13.04.2007
Адрес: Praha, ČR
Сообщений: 966
Репутация: 330
|
cmexxx
Если кратко, то нужно проверять и фильфтровать данные, после получения их из суперглобальных массивов. Нельзя данные из форм пихать в запросы сразу.
__________________
|
||
|
12.03.2011, 18:07 | #24 | ||
Новичок
Регистрация: 03.06.2010
Сообщений: 0
Репутация: 0
|
Вы случайно не имеете ввиду использование массивов $HTTP_POST_VARS и $HTTP_GET_VARS ?
кстати раз уж зашала речь о безопасности ведь можно еще огрничивать длину вводимых пользователем данных (это что касается инъекций через формы) Другое дело когда инъекции через адресную строку... вот тут хотелось бы услышать дополнительные разъяснения от людей сведущих))) |
||
|
12.03.2011, 18:54 | #25 | ||
Игроман
Регистрация: 13.07.2007
Адрес: Сімферополь
Сообщений: 3,012
Репутация: 629
|
Цитата:
Цитата:
И да, в шапке, в разделе ЧаВо есть описание самых базовых мер безопасности. |
||
|
12.03.2011, 19:23 | #26 | ||
Новичок
Регистрация: 03.06.2010
Сообщений: 0
Репутация: 0
|
Нет, насколько я знаю,м вышеуказанные массивы передают свои параметры в адресной строке а это не есть хорошо
Цитата:
Напрямую-это вы имеете ввиду через адресную строку? Вот с этим я и хочу разобраться Последний раз редактировалось cmexxx; 12.03.2011 в 19:34. |
||
|
12.03.2011, 20:02 | #27 | ||
Игроман
Регистрация: 13.07.2007
Адрес: Сімферополь
Сообщений: 3,012
Репутация: 629
|
Цитата:
Через адресную строку передаются только $_GET параметры. $_POST данные передаются серверу уже в теле запроса (в заголовке указывается только размер передаваемых данных). Тебе никто не мешает написать свой http-клиент (да хоть на том же php через curl) и передавать запросы прямо на сервер. |
||
|
16.03.2011, 22:59 | #29 | ||
Игрок
Регистрация: 03.11.2007
Адрес: Каменная цитадель)
Сообщений: 548
Репутация: 374
|
Объясните, пожалуйста, совсем понять не могу: с помощью каких СУБД можно создать распределённую базу данных? Задал этот вопрос здесь, поскольку здесь идёт речь и о MySQL.
__________________
Какие бы у тебя проблемы сейчас не были, просто остановись, посмотри на небо, глубоко вдохни и смело иди вперед. Знай, у тебя все получится и ни в коем случае не отступай! |
||
|
17.03.2011, 14:27 | #30 | ||
Юзер
Регистрация: 12.11.2005
Сообщений: 109
Репутация: 223
|
Рыцарь,
Вот тут хорошая статья с примерами на Oracle - посмотри http://citforum.ru/database/kbd96/45.shtml |
||
|
17.03.2011, 15:13 | #31 | ||
Игрок
Регистрация: 03.11.2007
Адрес: Каменная цитадель)
Сообщений: 548
Репутация: 374
|
A&D, спасибо за статью.
А MySQL относится к распределённым БД?
__________________
Какие бы у тебя проблемы сейчас не были, просто остановись, посмотри на небо, глубоко вдохни и смело иди вперед. Знай, у тебя все получится и ни в коем случае не отступай! |
||
|
27.03.2011, 12:54 | #32 | ||
Юзер
Регистрация: 09.08.2005
Сообщений: 144
Репутация: 90
|
что-то типа такого может уже защитить от sql инекций:
Скрытый текст: А в основном конечно: К тому же обязательно пишите в пыхэпе с выключенным register_globals Бери PostgreSQL. Не ошибешься.
__________________
”*°•. `”*°••°*”` .•°*”`”*°•. `”*°••°*”` •°*”` .•°*”`.•°*”`*ЛОВИ ПОЗИТИФФ*`”*°•.`”*°•. .•°*”` .•°*”` .•°*”` `”*°•. `”*°•. `”*°• |
||
|
13.08.2016, 18:25 | #33 | ||
Новичок
Регистрация: 02.02.2012
Адрес: Москва, Санкт-Петербург
Сообщений: 7
Репутация: 2
|
Это какая версия PHP? начинаю изучать сейчас PHP поэтому многие советовали сразу начать с 7-ой версии. Кто что думает по этому поводу? Может какая книга есть стоящая чтобы без ошибок код можно было написать.
|
||
|
21.09.2016, 14:07 | #34 | ||
Юзер
Регистрация: 12.11.2005
Сообщений: 109
Репутация: 223
|
|||
|
|