Веб-программирование от незрячего, урок 6 серверная часть: Php и Mysql

in #esteem2 years ago (edited)

Здравствуйте. Этот пост скорее будет справочкой для тех, кто хочет добавлять в базы данных что-то или читать оттуда.

Mysql - это база данных, где можно размещать всё, что угодно: страницы, товары, просто тексты, данные пользователей сайта и пр.
Или, например, в бД. (Сокращение от "База данных") может храниться дамп данных из блокчейна Steem: операции.

Как подключаться к базе данных:

Создадим файл db.php:

<?php

//название базы данных
$dbname = 'db_name';
//имя пользователя
$username = 'db_user';
//пароль
$pass = 'db_pass';
//подключаемся к базе данных
$db = new PDO(
    "mysql:host=localhost;dbname={$dbname};charset=utf8",
    $username,
    $pass
);
?>

Не забудьте поменять db_name на имя базы данных, db_pass - на пароль, db_user - на пользователя БД.

Ну и если у вас сервер не localhost, а иной, также замените.

Для работы с Mysql необходимо заказать хостинг или установить локальный сервер с поддержкой Mysql. Об этом подробнее буду рассказывать, когда начну обучение созданию сайтов на maxsite CMS.

Создание таблицы:

Подключаем db.php:
require_once 'db.php';
А теперь приведу пример:

$sql[] = "CREATE TABLE `tags` ( `ID` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(40) NOT NULL, `posts` INT NOT NULL, PRIMARY KEY (`ID`)) ";

Здесь я создал таблицу tags со столбцами id, name и posts. Они имеют тип int, т.е. для чисел, а name - VARCHAR размером в 40 символов максимум. PRIMARY KEY('ID') указывает, что id - ключ, основа для выборок.

Записываем данные в таблицу:

Для начала подключаем db.php:
require_once 'db.php';
А далее:

$query17 = "INSERT INTO tags SET name='esteem', posts=3000";
$result17 = $db->exec($query17);

Вместо $query17 и $result17 можно писать любые другие переменные. Запрос выше написан на языке sql с адаптацией под Php, но там вроде бы особых отличий нет (Надо изучать сей язык запросов, а я этого не делал. Вам же советую).
Здесь я прописал, что необходимо добавить в таблицу tags тег с именем esteem и количеством постов 3000.
Отсюда, думаю, понятно, что в таблице 2 столбца: name, posts.

Можно написать не фиксированные значения, а переменные:
$query17 = "INSERT INTO tags SET name='".$teg."', posts=".$numposts;
$result17 = $db->exec($query17);

Это позволит, например, вставить создание запроса в цикл:

foreach ($taglist as $tag => $numposts) {
$query17 = "INSERT INTO tags SET name='".$teg."', posts=".$numposts;
$result17 = $db->exec($query17);
}

Тогда, если массив $taglist имеет ключи в виде названия тегов, а значения - в виде количества, они будут добавлены в базу данных.

Можно ещё отфильтровать часть тегов, например, по количеству постов:

foreach ($taglist as $tag => $numposts) {
if ($numpost >=100 and $postnum <=5000) {
$query17 = "INSERT INTO tags SET name='".$teg."', posts=".$numposts;
$result17 = $db->exec($query17);
} else {

}
}

Здесь я указал, что добавлять в базу только теги, которые имеют количество постов от 100 до 5000 включительно.

Кстати, чтобы обновить данные в таблице, надо писать так:

$query17 = "update tags SET name='".$teg."', posts=".$numposts;

Основное - это update.

Получение данных из базы и их вывод:

За это отвечает запрос, начинающийся с select. Давайте получим список тегов и их значений, а затем выведем:
В начале, если надо, подключаем вновь файл db.php (Только если вывод в отдельном php файле). Я это описывать вновь не буду.
А вот теперь составляем запрос и выводим:

// Делаем запрос к таблице tags и выводим все теги, начиная с id > 0
$query = "SELECT * FROM tags WHERE id > 0";
//Делаем запрос к БД, результат запроса пишем в $result:
//теперь в $db_result результат поиска
$db_result = $db->query($query);

//Преобразуем то, что отдала нам база в нормальный массив PHP $data:
$data = $db_result->fetchAll(PDO::FETCH_ASSOC);
krsort($data); // Сортируем

$counter = count($data); // Выявляем количество элементов.
``echo '<h3>Всего тегов: '.$counter.' (Отображаются сначала недавно добавленные)</h3>'; // Заголовок``
``echo '<table><tr><th>Название тега</th><th>Количество постов в новом</th></tr>'; // Начало таблицы.``
foreach ($data as $dating) { // Цикл для получения массива из названий тегов и количества постов.
$taging = $dating['name']; // Имя тега из базы данных;
``echo '<tr>``
``        <td><a href="https://steemit.com/created/'.$taging.'" target="_blank">'.$taging.'</a></td>'; // Ссылка на страницу с тегом. Используется переменная имени тега $taging.``
if ($dating['posts'] ==100) { // Если количество постов у тега равно 100
``      echo '<td>>100</td>'; // Выводим 100``
} else {
``echo '<td>'.$dating['posts'].'</td>'; // Иначе, выводим количество.``
}
``  echo '</tr>'; // Заканчиваем строку таблицы``
}
``echo '</table>'; // Конец таблицы``

Удаление элемента таблицы базы данных:

$list_query = "DELETE FROM tags WHERE id=3"; // Удалит тег с id = 3 из таблицы.

Теперь заменим на переменную, так как чаще всего приходится удалять не элементы с конкретным id, а с несколькими:
$list_query = "DELETE FROM tags WHERE id=".$tag_list['ID'];

То есть, эту строку можно также вставить в цикл. page_list - список тегов из таблицы, а ID - id строки таблицы.

Всё

Надеюсь, был этот справочный пост полезен.