| |||||||
Программирование Создание, разработка и доработка различных игр и программного обеспечения |
|
|
Опции темы |
15.01.2009, 23:30 | #1 | ||
Игроман
Регистрация: 13.07.2007
Адрес: Сімферополь
Сообщений: 3,012
Репутация: 629
|
Краткий мануал по PHP + 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. |
||
|
16.01.2009, 00:22 | #2 | ||
ИТ-шник года (09,10)
Регистрация: 26.08.2005
Адрес: UA DNEPR
Сообщений: 2,077
Репутация: 785
|
Ну неплохо. Гуд. Новисам сойдет
__________________
С уважением, ведущий специалист F1 Service, Днепропетровск, Украина |
||
|
16.01.2009, 01:22 | #3 | ||
Шаман
Регистрация: 13.04.2007
Адрес: Praha, ČR
Сообщений: 966
Репутация: 330
|
PHP код ужасен чуть более чем полностью, вот народ начитается такого, и начнёт писать "индийский код"...
Особо улыбнули "or" в стиле Паскаля )) Цитата:
P.S. Новая тема врятли нужна, по крайней мере в таком виде, лучше оформить в виде сообщения в теме про php, на которое будет ссылка в первом посте. Так что либо оформляем в соотвествии с заголовком(php код всё равно не качественный), либо переезжаем в тему о php.
__________________
|
||
|
16.01.2009, 15:01 | #5 | ||
Шаман
Регистрация: 13.04.2007
Адрес: Praha, ČR
Сообщений: 966
Репутация: 330
|
Цитата:
PHP код:
Правильная запись: PHP код:
php - С-подобный язык, поэтому смешение синтаксиса очень не желательно. Эти вещи оставили скорее для "совместимости с программистами". Цитата:
Для примера, можно глянуть вот это http://www.reg.ru/coding_standards Если вам доведётся работать над чем-то в комманде, то поймёте зачем нужны стандарты.. Я конечно понимаю, что это всё написано ради примера, но "учебники" должны быть правильными полностью, иначе учиться по ним нельзя.
__________________
|
||
|
16.01.2009, 16:12 | #6 | ||
Игроман
Регистрация: 13.07.2007
Адрес: Сімферополь
Сообщений: 3,012
Репутация: 629
|
Цитата:
Ну, да, я согласен, некоторые пренибрежения стандартами и спорные моменты в коде есть. Но разве из-за этого его нужно называть ужасным? http://govnokod.ru/php вот это - да, вот это ужас. Я разумеется не считаю себя сверх граммотным программистом, это далеко не так. Но всё равно не думаю что мой код можно назвать ужасным |
||
|
16.01.2009, 17:01 | #8 | ||
Шаман
Регистрация: 13.04.2007
Адрес: Praha, ČR
Сообщений: 966
Репутация: 330
|
Цитата:
Заголовок поменял. В важное тему крепить не буду, в шапке темы по PHP ссылку оставлю. Тему пока не закрываю. Посмотрим что из этого выйдет.
__________________
|
||
|
16.01.2009, 17:26 | #9 | ||||
ИТ-шник года (09,10)
Регистрация: 26.08.2005
Адрес: UA DNEPR
Сообщений: 2,077
Репутация: 785
|
Цитата:
Цитата:
Цитата:
Цитата:
__________________
С уважением, ведущий специалист F1 Service, Днепропетровск, Украина |
||||
|
16.01.2009, 17:36 | #10 | ||
Шаман
Регистрация: 13.04.2007
Адрес: Praha, ČR
Сообщений: 966
Репутация: 330
|
Цитата:
PHP код:
Цитата:
__________________
|
||
|
25.09.2009, 21:27 | #11 | ||
Новичок
Регистрация: 28.04.2009
Адрес: >____> Сообщений:27615
Сообщений: 94
Репутация: 7
|
я в sql полный 0 да и faq этот немного устарел ( ссылки не работают)
разъясните пожалуйста как конектиться к своему же серверу БД. в faq которым я пользовался было сказано настроить в SQL Server Configuration Manager порт своего Tcp/ip но увы я при установленном sql нашел только Client Network Utility в котором можно настроить порт Tcp/ip но при входе в SQL Server Management Studio Express (и вводе там своих данных и пароля при установки) мне говорится что конечный компьютер отверг подключение. пользуюсь sql 2005 |
||
|
26.09.2009, 11:56 | #12 | ||
Игрок
Регистрация: 04.11.2005
Адрес: Рашка, Новосип
Сообщений: 518
Репутация: 283
|
Заменить в ссылках /ru/ на /en/ и читать.
__________________
vas3k.ru Идя на собеседование, необходимо укрепиться в нескольких мыслях: эта контора — говно, и эта работа — говно, и зарплата — тоже говно. И ты будешь обречён делать говно из говна за говно половину сознательного времени жизни. |
||
|
26.09.2009, 12:38 | #13 | ||
Игроман
Регистрация: 13.07.2007
Адрес: Сімферополь
Сообщений: 3,012
Репутация: 629
|
|||
|
22.02.2010, 00:30 | #14 | ||
Dis is one half
Регистрация: 19.10.2007
Адрес: Санкт-Петербург
Сообщений: 1,460
Репутация: 304
|
Есть ли какой-нибудь простой метод получить id (поле с автоинкрементом) только что добавленной записи?
Что-нибудь типа SELECT id FROM (INSERT INTO (a, b, c ) VALUES (1, 2, 3)) Или чего-то подобного? |
||
|
22.02.2010, 00:37 | #15 | ||
Шаман
Регистрация: 13.04.2007
Адрес: Praha, ČR
Сообщений: 966
Репутация: 330
|
OneHalf
http://ru2.php.net/manual/en/functio...-insert-id.php Если конечно я правильно вопрос понял %)
__________________
|
||
|
25.02.2010, 01:37 | #16 | ||
Dis is one half
Регистрация: 19.10.2007
Адрес: Санкт-Петербург
Сообщений: 1,460
Репутация: 304
|
Да, Правильно. Спасибо.
Еще вопрос: Есть у меня поле такого вида: "Type" set('Курсовые', 'Методички', 'Лекции', 'Билеты/Задачи/Вопросы', 'Решения типовиков/задач', 'Учебники/книги', 'Лабораторные', 'Программы', 'Прочее') Тобишь множество из допустимых значений. Мне не очень хочется дублировать это в html, переписывая варианты, и хотелость бы из php создать список для <select> (или набора <input type="checkbox">) с допустимыми вариантами (а то я возможно буду еще менять этот тип). Подскажите, пожалуйста, как это лучше реализовать? Заранее спасибо. Последний раз редактировалось NANA; 25.02.2010 в 06:26. |
||
|
25.02.2010, 19:39 | #17 | ||
Игрок
Регистрация: 04.11.2005
Адрес: Рашка, Новосип
Сообщений: 518
Репутация: 283
|
Циклом. Как же еще?
Или взять готовую реализацию из любого фреймворка, если знать где лежит.
__________________
vas3k.ru Идя на собеседование, необходимо укрепиться в нескольких мыслях: эта контора — говно, и эта работа — говно, и зарплата — тоже говно. И ты будешь обречён делать говно из говна за говно половину сознательного времени жизни. |
||
|
25.02.2010, 20:20 | #18 | ||
Dis is one half
Регистрация: 19.10.2007
Адрес: Санкт-Петербург
Сообщений: 1,460
Репутация: 304
|
Дык как вынуть это из типа поля?
В phpMyAdmin это выглядит так: Я хочу узнать, как получить этот список из php. В принципе я может и статичным текстом этот список впихну на страничку, но хотелось бы знать, как выполнить и такой вариант |
||
|
25.02.2010, 20:49 | #19 | ||
Игрок
Регистрация: 04.11.2005
Адрес: Рашка, Новосип
Сообщений: 518
Репутация: 283
|
А, так оно в БД. Не признал.
Ня: http://dev.mysql.com/tech-resources/...-datatype.html
__________________
vas3k.ru Идя на собеседование, необходимо укрепиться в нескольких мыслях: эта контора — говно, и эта работа — говно, и зарплата — тоже говно. И ты будешь обречён делать говно из говна за говно половину сознательного времени жизни. |
||
|
28.02.2010, 21:51 | #20 | ||
Dis is one half
Регистрация: 19.10.2007
Адрес: Санкт-Петербург
Сообщений: 1,460
Репутация: 304
|
У меня очередная проблема:
Есть две таблицы Files и Subjects Обращение к ним такого типа: SELECT Files.*, Subjects.Title FROM Files LEFT JOIN Subjects ON Files.SubjId = Subjects.id Проблема в том, что в каждой таблице есть поле Title, а я не знаю, как обращаться к конкретному полю (Доступно только значение второго поля). Можно ли как-нибудь получить оба значения, или обязательно нужно переименовать поля? |
||
|
|