Php урок 4. Работа с базой данных mysql из php

Автор: | 20.08.2015

Знакомство с mysql и phpmyadmin

Итак, для начала нам потребуется сервер, для того чтобы можно было запускать php скрипты и подключаться к базе данных (БД). Приступим к изучению СУБД (средство управления базой данных).

Создадим БД
Для этого нам необходимо открыть cpanel. Наберем в адресной строке http://ajpro.kz/cpanel. Введем логин ajpro и пароль &.gK^{4.03rI

Для создания базы данных необходимо пользоваться первым ярлыком MySql Databases
Для управления базами данных необходимо воспользоваться phpMyAdmin

у4-30

рис1

Создаем первую базу данных в MySql Databases.

у4-31

рис2

1. Откройте панель создания БД MySqlDatabases из Cpanel
2. Введите имя базы данных, используя английские строчные буквы без пробелов. И нажмите кнопку создать БД “CreateDatabase”.
После создания базы данных вам необходимо создать пользователя для того чтобы получить доступ к базе данных.

у4-32

рис3

В том же окне найдите раздел создания пользователя и задайте имя и пароль и нажмите Create User.
Заключающий этап это добавления пользователя в базу данных.

у4-33

рис4

В том же окне MySqlDatabases найдем раздел Add User To Database и выберем нашу базу данных и нашего пользователя и нажмем кнопку Add — добавить.
После нажатия кнопки add появится окно с выбором уровней доступа пользователя к базе данных. Вы может ограничивать доступ для повышения безопасности. Не рекомендуется разрешать пользователю удалять и очищать таблицы. Ниже приведены описания уровней доступа.
ALL PRIVILEGES — как мы видели ранее, это даст пользователю MySQL полный доступ к заданной базе данных (если база данных не указана, то ко всем).
CREATE — позволяет создавать новые таблицы или базы данных.
DROP — позволяет удалять таблицы или базы данных.
DELETE — позволяет удалять строки из таблиц.
INSERT — позволяет добавлять строки в таблицу.
SELECT — поволит использовать команду Select для чтения из баз данных.
UPDATE — позволит редактировать строки таблиц.
GRANT OPTION — позволит назначать или удалять права доступа для других пользователей

у4-34

рис5

Для начала познакомимся СУБД PhpMyAdmin, она позволяет управлять (добавлять, удалять, изменять) записями в БД.
Для этого откройте в Cpanel PHPMyAdmin

Ниже на рисунке отображен внешний вид главной страницы СУБД PhpMyAdmin. В этом окне вы можете создать таблицу, и хранить в ней необходимые записи. Это очень удобно при создании сайтов, так как информация структурирована, и вы можете очень быстро получить любую запись из БД.
Приступим к изучению функционала phpmyadmin.
Для начала работы, нам потребуется создать саму БД (базу данных). У нее будет свое имя, по которому мы потом будем ее искать.

у4-35

рис6

у4-36

рис7

Следуя схеме строения БД, нам нужно сделать таблицу. Для этого после создания базы, у вас будет такое окно:

у4-37

рис8

Здесь я создаю таблицу с именем users и 3 полями в ней.
Дальше phpmyadmin попросит нас задать структуру для каждого поля:

у4-38

рис9

Здесь в столбце «Поле» нужно указать имя, в «Тип» указываем тип данных, которые будут там храниться (INT — это число, VARCHAR — строка или небольшой(!) текст).
В «Дополнительно» указываем полю с именем «id» параметр «auto_increament», что означает, оно будет увеличиваться каждый раз при вставке каких-либо данных, и задаем ему параметр «Первичный ключ», это значит, что по первому столбцу мы сможем однозначно идентифицировать поле.
«Однозначно идентифицировать поле» — значит даже если имя и фамилия будут одинаковы, столбец «id» будет иметь разные значения (так как он автоматически увеличивается на единицу каждый раз).
Теперь нажимаем «Сохранить». Тем самым мы создали таблицу users, в которой можем хранить имя и фамилию (id не нужно вставлять, mysql сделает все за нас), в БД users.
Таблицу мы создавали для хранения записей. А как их туда вставлять?

у4-39

рис10

Выбираем в меню «Вставить» и пишем нужные значения в необходимые поля.
Теперь как удалить или изменить значения в базе данных mysql с СУБД PhpMyAdmin:
Для удаления просто перейдите в меню «Обзор» и нажмите красный крестик напротив записи:

у4-40

рис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;
Выведет количество всех записей в таблице
у4-41

рис 12

SELECT * FROM table_name;
Выбирает все записи из таблицы БД
у4-42

рис 13

SELECT * FROM table_name LIMIT 2,3;
Выбирает 3 записи из таблицы, начиная с 2 записи. Этот запрос полезен при создании блока страниц навигации.
у4-43

рис 14

SELECT * FROM person ORDER BY number;
Выберет все записи из таблицы person в порядке возрастания значений поля number
у4-44

рис15

SELECT * FROM person ORDER BY number DESC;
Выбирает все записи из person, но уже в порядке убывания (т.е. в обратном порядке).
у4-45

рис 16

SELECT * FROM person ORDER BY number LIMIT 5;
Выбирает 5 записей из таблицы person, в порядке возрастания.
у4-46

рис 17

SELECT * FROM person WHERE name=’Anna’;
Выбирает все записи из таблицы person, где поле name соответствует значению Anna.
у4-47

рис18

SELECT * FROM person WHERE name LIKE ‘An%’;
Выбирает все записи из таблицы person, в которой значения поля name начинаются с An.
у4-48

рис 19

SELECT * FROM person WHERE name LIKE ‘%na’ ORDER BY number ;
Выбирает все записи из таблицы person, где name заканчивается на na, и упорядочивает записи в порядке возрастания значения number.
у4-49

рис 20

SELECT name, last_name FROM person;
Выбирает все значения полей name и last_name из таблицы person.
у4-50

рис 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;
у4-51

рис 22

SELECT * from person where age in (12,15,18);
Выведет все записи таблицы person в которых значения поля age будет равно 12 или 15 или 18.
у4-52

рис 23

select max(age) from person;
Выберет максимальное значение age из таблицы person.
у4-53

рис 24

select min(age) from person;
Выберет минимальное значение age из таблицы person.
у4-54

рис 25

Insert запросы
данные запросы позволяют вставить запись в таблицу БД. Другими словами создать строку в таблице или добавить информацию в таблицу БД.
insert into table_name(site, description) values (‘sitear.ru’, ‘SiteAR – создание сайтов’)
Вставит в таблицу table_name, а точнее в поля site и description данной таблицы, соответствующие значения.Update запросы
направлены на изменение уже имеющихся данных в таблице БД.
у4-55

рис 26

update table_name set site = ‘domain.com’ where id = ‘3’
Изменяет значение поля site на domain.com в таблице table_name где id равен 3.
Delete запросы
удаляют записи из таблицы БД.
у4-56

рис 27

delete from table_name where id = ‘3’
Удаляет запись из table_name где id равен 3.
у4-57

рис 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>";			
    }
  
  }
    

?>

admin