![]() |
Краткий мануал по 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: Мануал обновил, учёл все замечания и пожелания. По всем вопросам и предложениям по улучшению мануала или фака — ко мне в ЛС. |
Ну неплохо. Гуд. Новисам сойдет
|
PHP код ужасен чуть более чем полностью, вот народ начитается такого, и начнёт писать "индийский код"...
Особо улыбнули "or" в стиле Паскаля )) Цитата:
P.S. Новая тема врятли нужна, по крайней мере в таком виде, лучше оформить в виде сообщения в теме про php, на которое будет ссылка в первом посте. Так что либо оформляем в соотвествии с заголовком(php код всё равно не качественный), либо переезжаем в тему о php. |
чем именно он ужасен? :) Можно конкретнее? :) Насчёт or/and - просто привык так писать. Особой разницы не вижу.
|
Цитата:
PHP код:
Правильная запись: PHP код:
php - С-подобный язык, поэтому смешение синтаксиса очень не желательно. Эти вещи оставили скорее для "совместимости с программистами". Цитата:
Для примера, можно глянуть вот это http://www.reg.ru/coding_standards Если вам доведётся работать над чем-то в комманде, то поймёте зачем нужны стандарты.. Я конечно понимаю, что это всё написано ради примера, но "учебники" должны быть правильными полностью, иначе учиться по ним нельзя. |
Цитата:
Ну, да, я согласен, некоторые пренибрежения стандартами и спорные моменты в коде есть. Но разве из-за этого его нужно называть ужасным? http://govnokod.ru/php вот это - да, вот это ужас. Я разумеется не считаю себя сверх граммотным программистом, это далеко не так. Но всё равно не думаю что мой код можно назвать ужасным :horse: |
Hast
Цитата:
|
Цитата:
Заголовок поменял. В важное тему крепить не буду, в шапке темы по PHP ссылку оставлю. Тему пока не закрываю. Посмотрим что из этого выйдет. |
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
PHP код:
Цитата:
|
я в sql полный 0 да и faq этот немного устарел ( ссылки не работают)
разъясните пожалуйста как конектиться к своему же серверу БД. в faq которым я пользовался было сказано настроить в SQL Server Configuration Manager порт своего Tcp/ip но увы я при установленном sql нашел только Client Network Utility в котором можно настроить порт Tcp/ip но при входе в SQL Server Management Studio Express (и вводе там своих данных и пароля при установки) мне говорится что конечный компьютер отверг подключение. пользуюсь sql 2005 |
Цитата:
|
Цитата:
Цитата:
|
Есть ли какой-нибудь простой метод получить id (поле с автоинкрементом) только что добавленной записи?
Что-нибудь типа SELECT id FROM (INSERT INTO (a, b, c ) VALUES (1, 2, 3)) Или чего-то подобного? |
OneHalf
http://ru2.php.net/manual/en/functio...-insert-id.php Если конечно я правильно вопрос понял %) |
Да, Правильно. Спасибо.
Еще вопрос: Есть у меня поле такого вида: "Type" set('Курсовые', 'Методички', 'Лекции', 'Билеты/Задачи/Вопросы', 'Решения типовиков/задач', 'Учебники/книги', 'Лабораторные', 'Программы', 'Прочее') Тобишь множество из допустимых значений. Мне не очень хочется дублировать это в html, переписывая варианты, и хотелость бы из php создать список для <select> (или набора <input type="checkbox">) с допустимыми вариантами (а то я возможно буду еще менять этот тип). Подскажите, пожалуйста, как это лучше реализовать? Заранее спасибо. |
Цитата:
Или взять готовую реализацию из любого фреймворка, если знать где лежит. |
Дык как вынуть это из типа поля?
В phpMyAdmin это выглядит так: http://i026.radikal.ru/1002/55/4965cde22663.png Я хочу узнать, как получить этот список из php. В принципе я может и статичным текстом этот список впихну на страничку, но хотелось бы знать, как выполнить и такой вариант |
Цитата:
Ня: http://dev.mysql.com/tech-resources/...-datatype.html |
У меня очередная проблема:
Есть две таблицы Files и Subjects Обращение к ним такого типа: SELECT Files.*, Subjects.Title FROM Files LEFT JOIN Subjects ON Files.SubjId = Subjects.id Проблема в том, что в каждой таблице есть поле Title, а я не знаю, как обращаться к конкретному полю (Доступно только значение второго поля). Можно ли как-нибудь получить оба значения, или обязательно нужно переименовать поля? |
SELECT Files.*, Subjects.Title AS subj_title
И это, кстати, в шапке есть. |
Цитата:
Просто очень много слов было написано о том, что код кривой, хотя, признаться, я и сам бы так написал (в плане алгоритма и запросов) Хотелось бы, как новичку, увидеть правильно исполнение, изложенного автором сабжа, кода=))) |
cmexxx
Если кратко, то нужно проверять и фильфтровать данные, после получения их из суперглобальных массивов. Нельзя данные из форм пихать в запросы сразу. |
Вы случайно не имеете ввиду использование массивов $HTTP_POST_VARS и $HTTP_GET_VARS ?
кстати раз уж зашала речь о безопасности ведь можно еще огрничивать длину вводимых пользователем данных (это что касается инъекций через формы) Другое дело когда инъекции через адресную строку... вот тут хотелось бы услышать дополнительные разъяснения от людей сведущих))) |
Цитата:
Цитата:
И да, в шапке, в разделе ЧаВо есть описание самых базовых мер безопасности. |
Цитата:
Цитата:
Напрямую-это вы имеете ввиду через адресную строку? Вот с этим я и хочу разобраться |
Цитата:
Цитата:
|
ну вот и разобрались))) я новичок в этом, поэтому и спрашиваю, что не понятно)
благо что есть, кому объяснить) |
Объясните, пожалуйста, совсем понять не могу: с помощью каких СУБД можно создать распределённую базу данных? Задал этот вопрос здесь, поскольку здесь идёт речь и о MySQL.
|
Рыцарь,
Вот тут хорошая статья с примерами на Oracle - посмотри http://citforum.ru/database/kbd96/45.shtml |
A&D, спасибо за статью.
А MySQL относится к распределённым БД? |
Цитата:
Скрытый текст: А в основном конечно: Цитата:
;) Цитата:
|
Это какая версия PHP? начинаю изучать сейчас PHP поэтому многие советовали сразу начать с 7-ой версии. Кто что думает по этому поводу? Может какая книга есть стоящая чтобы без ошибок код можно было написать.
|
|
Конечно лучше с 7, ведь это самое новое обновление, а зачем тебе уже 5.2 или 5.3? Если они себя изжили и их ломают на раз.
|
| Часовой пояс GMT +4, время: 20:14. |
Powered by vBulletin® Version 3.8.0
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.