Знакомство с mysql и phpmyadmin
Итак, для начала нам потребуется сервер, для того чтобы можно было запускать php скрипты и подключаться к базе данных (БД). Приступим к изучению СУБД (средство управления базой данных).
Создадим БД
Для этого нам необходимо открыть cpanel. Наберем в адресной строке http://ajpro.kz/cpanel. Введем логин ajpro и пароль &.gK^{4.03rI
Для создания базы данных необходимо пользоваться первым ярлыком MySql Databases
Для управления базами данных необходимо воспользоваться phpMyAdmin
рис1
Создаем первую базу данных в MySql Databases.
рис2
1. Откройте панель создания БД MySqlDatabases из Cpanel
2. Введите имя базы данных, используя английские строчные буквы без пробелов. И нажмите кнопку создать БД “CreateDatabase”.
После создания базы данных вам необходимо создать пользователя для того чтобы получить доступ к базе данных.
рис3
В том же окне найдите раздел создания пользователя и задайте имя и пароль и нажмите Create User.
Заключающий этап это добавления пользователя в базу данных.
рис4
В том же окне MySqlDatabases найдем раздел Add User To Database и выберем нашу базу данных и нашего пользователя и нажмем кнопку Add — добавить.
После нажатия кнопки add появится окно с выбором уровней доступа пользователя к базе данных. Вы может ограничивать доступ для повышения безопасности. Не рекомендуется разрешать пользователю удалять и очищать таблицы. Ниже приведены описания уровней доступа.
ALL PRIVILEGES — как мы видели ранее, это даст пользователю MySQL полный доступ к заданной базе данных (если база данных не указана, то ко всем).
CREATE — позволяет создавать новые таблицы или базы данных.
DROP — позволяет удалять таблицы или базы данных.
DELETE — позволяет удалять строки из таблиц.
INSERT — позволяет добавлять строки в таблицу.
SELECT — поволит использовать команду Select для чтения из баз данных.
UPDATE — позволит редактировать строки таблиц.
GRANT OPTION — позволит назначать или удалять права доступа для других пользователей
рис5
Для начала познакомимся СУБД PhpMyAdmin, она позволяет управлять (добавлять, удалять, изменять) записями в БД.
Для этого откройте в Cpanel PHPMyAdmin
Ниже на рисунке отображен внешний вид главной страницы СУБД PhpMyAdmin. В этом окне вы можете создать таблицу, и хранить в ней необходимые записи. Это очень удобно при создании сайтов, так как информация структурирована, и вы можете очень быстро получить любую запись из БД.
Приступим к изучению функционала phpmyadmin.
Для начала работы, нам потребуется создать саму БД (базу данных). У нее будет свое имя, по которому мы потом будем ее искать.
рис6
рис7
Следуя схеме строения БД, нам нужно сделать таблицу. Для этого после создания базы, у вас будет такое окно:
рис8
Здесь я создаю таблицу с именем users и 3 полями в ней.
Дальше phpmyadmin попросит нас задать структуру для каждого поля:
рис9
Здесь в столбце «Поле» нужно указать имя, в «Тип» указываем тип данных, которые будут там храниться (INT — это число, VARCHAR — строка или небольшой(!) текст).
В «Дополнительно» указываем полю с именем «id» параметр «auto_increament», что означает, оно будет увеличиваться каждый раз при вставке каких-либо данных, и задаем ему параметр «Первичный ключ», это значит, что по первому столбцу мы сможем однозначно идентифицировать поле.
«Однозначно идентифицировать поле» — значит даже если имя и фамилия будут одинаковы, столбец «id» будет иметь разные значения (так как он автоматически увеличивается на единицу каждый раз).
Теперь нажимаем «Сохранить». Тем самым мы создали таблицу users, в которой можем хранить имя и фамилию (id не нужно вставлять, mysql сделает все за нас), в БД users.
Таблицу мы создавали для хранения записей. А как их туда вставлять?
рис10
Выбираем в меню «Вставить» и пишем нужные значения в необходимые поля.
Теперь как удалить или изменить значения в базе данных mysql с СУБД PhpMyAdmin:
Для удаления просто перейдите в меню «Обзор» и нажмите красный крестик напротив записи:
рис11
А для редактирования нажмите на карандаш и замените необходимые поля.
Теперь вы можете управлять базой данных mysql используя PhpMyAdmin.
Работа с базой данных mysql из php
Итак, для начала нужно научиться подключаться к уже заведомо созданной БД. Для этого используется вот такой код:
<?php $connect=mysql_connect("localhost","root",""); /* Здесь мы подключаемся к базе используя функцию mysql_connect, в ней следует указать три параметра 1)сервер базы данных 2)логин пользователя БД 3)пароль пользователя БД */ $db=mysql_select_db("baza"); //Здесь мы указываем //какую БД будем использовать ?>
В вышеизложенном коде, я подключался к серверу localhost используя логин root который не требует пароля (поэтому его не указываем).
После подключения к базе, мы можем проводить все те операции которые выполняли в СУБД phpmyadmin. То есть вставку, удаление, изменение и получение различной информации.
Теперь по пунктам:
1) Вставка записей в базу данных mysql из php
$query="INSERT INTO `таблицу` (`указываем поле`,`указываем поле`) VALUES ('любое значение','любое значение')"; $result=mysql_query($query); if($result==true) { echo "Успешно!"; } else { echo "Ошибка!<br />".mysql_error(); }
То есть вставка производится функцией INSERT. Если все прошло успешно, то mysql вернет результат true, или иначе — false.
Полей можно указывать хоть сколько, главное чтобы все они существовали в БД. То есть, к примеру, существует таблица в которой есть поля «name» , «surname» и «city».
Для вставки в нее значений будем использовать такой код:
$query="INSERT INTO `users` (`name`,`surname`,`city`) VALUES ('Ruslan','Huzin','Kokshetau')"; $result=mysql_query($query); if($result==true) { echo "Успешно!"; } else { echo "Ошибка!<br>".mysql_error(); }
2) Удаление записей из базы данных mysql из php
Удаление выполняется функцией DELETE. Для этого будет примерно вот такой код:
$query="DELETE FROM `users` WHERE `name`='Ruslan' "; $result=mysql_query($query); if($result==true) { echo "Успешно!"; } else { echo "Ошибка!<br>".mysql_error(); }
То есть мы удалим из таблицы users все строки (ну или одну), где столбец name равен значению Ruslan.
3) Изменение значений в базе данных mysql из php
Также мы можем вносить изменения в уже существующие записи в таблице. К примеру нам надо заменить значение столбца name в строке, где столбец surname имеет значение Huzin. Для этого выполняем такой код:
$query="UPDATE `users` SET `name`='myname' WHERE `surname`='Huzin' "; $result=mysql_query($query); if($result==true) { echo "Успешно!"; } else { echo "Ошибка!<br>".mysql_error(); }
4) Получение значений из базы данных mysql из php
Теперь самое интересное) Раз мы записали что-то, то ведь должны и получить обратно?)))
К примеру нам нужно достать из таблицы users всю строку где столбец name равен Ruslan.
Для этого нам потребуется чуть другой код, нежели в первых примерах.
Вот собственно и он:
$query="SELECT * FROM WHERE `name`='Ruslan' "; $result=mysql_query($query); if($result==true) { echo "Успешно!"; } else { echo "Ошибка!<br>".mysql_error(); } $data=mysql_fetch_array($result); /* Теперь в переменной хранятся данные из таблицы */
Тут нам потребовалась еще одна функция, для записи выбранных данных в переменную (массив) на php.
Для того что обратиться к выбранной строке, мы пишем так:
$data[‘имя столбца’]
то есть, чтобы достать фамилию из выбранной строки (где имя было Ruslan), мы на вывод должны написать:
echo $data[‘surname’];
А при выборке из таблицы, писали SELECT *, эта звездочка означает, что нужно выбрать все столбцы из строки.
Если нам надо, к примеру, выбрать только surname, пишем SELECT `surname`.
А для выборки сразу нескольких строк из таблицы, потребуется еще и цикл для их вывода. Это в том случае, если к примеру, строк со столбцом Ruslan будет несколько.
Вот код:
$query="SELECT * FROM WHERE `name`='Ruslan' "; $result=mysql_query($query); while($data=mysql_fetch_array($result)) { echo $data['name']."<br>".$data['surname']."<hr>"; }
Теперь на экран выведутся все строки, у которых столбец name равен значению Ruslan.
Простые mysql запросы
Зная структуру БД, таблиц в БД и полей, можно посылать следующие запросы в MySQL.
Select запросы
слово select, говорит само за себя, и становится понятно, что пользуясь данными запросами, мы будем выбирать (читать) информацию из БД.
SELECT count(*) FROM table_name;
Выведет количество всех записей в таблице
рис 12
SELECT * FROM table_name;
Выбирает все записи из таблицы БД
рис 13
SELECT * FROM table_name LIMIT 2,3;
Выбирает 3 записи из таблицы, начиная с 2 записи. Этот запрос полезен при создании блока страниц навигации.
рис 14
SELECT * FROM person ORDER BY number;
Выберет все записи из таблицы person в порядке возрастания значений поля number
рис15
SELECT * FROM person ORDER BY number DESC;
Выбирает все записи из person, но уже в порядке убывания (т.е. в обратном порядке).
рис 16
SELECT * FROM person ORDER BY number LIMIT 5;
Выбирает 5 записей из таблицы person, в порядке возрастания.
рис 17
SELECT * FROM person WHERE name=’Anna’;
Выбирает все записи из таблицы person, где поле name соответствует значению Anna.
рис18
SELECT * FROM person WHERE name LIKE ‘An%’;
Выбирает все записи из таблицы person, в которой значения поля name начинаются с An.
рис 19
SELECT * FROM person WHERE name LIKE ‘%na’ ORDER BY number ;
Выбирает все записи из таблицы person, где name заканчивается на na, и упорядочивает записи в порядке возрастания значения number.
рис 20
SELECT name, last_name FROM person;
Выбирает все значения полей name и last_name из таблицы person.
рис 21
SELECT DISTINCT site FROM table_name;
Выбирает уникальные (DISTINCT) значения поля site из таблицы table_name. Например, при 5 значениях поля site: sitear.ru, sitear.ru, sitear.ru, yaveterinar.ru, wi-korporaciya.ru; выведет только 3 уникальные значения: sitear.ru, yaveterinar.ru, wi-korporaciya.ru;
рис 22
SELECT * from person where age in (12,15,18);
Выведет все записи таблицы person в которых значения поля age будет равно 12 или 15 или 18.
рис 23
select max(age) from person;
Выберет максимальное значение age из таблицы person.
рис 24
select min(age) from person;
Выберет минимальное значение age из таблицы person.
рис 25
Insert запросы
данные запросы позволяют вставить запись в таблицу БД. Другими словами создать строку в таблице или добавить информацию в таблицу БД.
insert into table_name(site, description) values (‘sitear.ru’, ‘SiteAR – создание сайтов’)
Вставит в таблицу table_name, а точнее в поля site и description данной таблицы, соответствующие значения.Update запросы
направлены на изменение уже имеющихся данных в таблице БД.
рис 26
update table_name set site = ‘domain.com’ where id = ‘3’
Изменяет значение поля site на domain.com в таблице table_name где id равен 3.
Delete запросы
удаляют записи из таблицы БД.
рис 27
delete from table_name where id = ‘3’
Удаляет запись из table_name где id равен 3.
рис 28
Сложные mysql запросы
Как уже упоминалось раньше, сложные mysql запросы, работают более, нежели с одной таблицей БД. Данные mysql запросы, мы будем рассматривать более в индивидуальном порядке, так как они сложные и их будет немного.
SELECT DISTINCT last_name FROM person, address WHERE person.adress_no = address.address_no AND city LIKE ‘L%’;
или
SELECT DISTINCT last_name FROM person p, address adr WHERE p.adress_no = adr.address_no AND city LIKE ‘L%’;
Выводит все уникальные фамилии людей (last_name), которые живут в городе с названием на букву L. (предполагаем, что в таблице address есть поля address_no, city).
Данные примеры сложных mysql запросов, выведут один и тот же результат. Запросы не очень то и сложные, нужно только указать имя таблицы БД, а потом, через точку указать поле таблицы. Или же можно, как во втором примере, дать короткие имена таблицам (p для person, adr для address). Результат запросов будет один и тот же.
SELECT heroes.char_name, heroes.count, char_templates.ClassName FROM char_templates, heroes WHERE char_templates.ClassId = heroes.class_id Order by char_templates.ClassName;
или
SELECT char_name, count, ClassName FROM heroes left join char_templates on heroes.class_id=char_templates.ClassId;
Берем из таблицы heroes поле char_name, из heroes поле count, из таблицы char_templates поле ClassName, где char_templates.ClassId и heroes.class_id имеют общий идентификатор и сортируем запрос по имени класса героев.
Таким же образом, можно подавать сложные mysql запросы с помощью update, insert, delete и др.
Задание.
1. Создать форму регистрации пользователя.
2. Сделать проверку в базе данных существует ли пользователь с таким логином.
3. Если существует предложить перейти на форму входа на сайт или сменить пароль.
4. Если пользователь не существует, то добавить его в базу данных.
5. Создать форму входа на сайт.
6. Создать форму смены пароля.
7. Создать страницу подтверждения емайла.
<? //1 соединились с базой данных mysql_connect("localhost","root",""); mysql_select_db("users"); //2 проверяем были ли отправлены данные из формы if($_GET['id']>0) { mysql_query( "update `users` set `status`='Ok' where `id`='{$_GET['id']}'"); } if($_GET['del']>0) { mysql_query( "update `users` set `status`='del' where `id`='{$_GET['del']}'"); } if(isset($_POST['login'])) { //2.1 Проверяем есть ли такой пользователь в базе данных $table=mysql_query( "select `id` from `users` where `login`='{$_POST['login']}' "); $row=mysql_fetch_array($table); //2.2 Если id пользователя больше нуля то выводим сообщение об ошибке if($row['id']>0) echo "Извините, но такой пользователь уже зарегистрирован"; else { //Если такого пользователя нет то мы его регистрируем $_POST['password']=MD5($_POST['password']); mysql_query("insert into `users` (`login`,`password`) values ('{$_POST['login']}','{$_POST['password']}')"); //сообщаем об успешной регистрации echo "Поздравляю вас, {$_POST['login']} с успешной регистрацией!"; } } ?> <h1>Форма регистрации пользователя</h1> <form method='post'> <input name='login' placeholder='Введите логин'><br> <input name='password' type='password' placeholder='Введите пароль'><br> <input type='submit' value='Зарегистрироваться'><br> </form> <hr> <h1>Админка. Пользователям не трогать</h1> <? $table=mysql_query("select * from `users`"); while($row=mysql_fetch_array($table)) { if($row['status']!="Ok") { echo $row['login']; echo "<a href='?id={$row['id']}'>Активировать</a>"; echo "<br>"; } else { echo $row['login']; echo "<a href='?del={$row['id']}'>Заблокировать</a>"; echo "<br>"; } } ?>