Веб-программирование от незрячего, урок 6 серверная часть: Php и Mysql
Здравствуйте. Этот пост скорее будет справочкой для тех, кто хочет добавлять в базы данных что-то или читать оттуда.
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 строки таблицы.
Всё
Надеюсь, был этот справочный пост полезен.