Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Регистрируясь, я даю согласие на обработку данных и условия почтовых рассылок.
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр В Битве героев вас ждут захватывающие приключения: сражайтесь с ордами монстров, исследуйте десятки уникальных локаций и собирайте мощное снаряжение. Объединяйтесь с кланом, чтобы вместе преодолеть испытания и победить самых грозных врагов. Ведите своего героя к славе и триумфу!

Битва Героев

Приключения, Ролевые, Мидкорные

Играть

Топ прошлой недели

  • solenakrivetka solenakrivetka 7 постов
  • Animalrescueed Animalrescueed 53 поста
  • ia.panorama ia.panorama 12 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая «Подписаться», я даю согласие на обработку данных и условия почтовых рассылок.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Промокоды Яндекс Еда Постила Футбол сегодня
0 просмотренных постов скрыто
Mr.Ducks
Mr.Ducks
Серия PHP и веб-разработка: полезные руководства и совет

Регистрация на PHP с использованием PDO и MySQL: Полное Руководство⁠⁠

1 год назад

В современном веб-разработке регистрация пользователей — это важная и часто встречающаяся задача. В этой статье мы рассмотрим, как создать простую систему регистрации с использованием HTML-формы, PHP для обработки данных, подключение к базе данных через PDO и работу с MySQL.

Мы также обсудим, почему важно использовать PDO для безопасности, как хэшировать пароли, и что такое подготовленные выражения.

Регистрация на PHP с использованием PDO и MySQL: Полное Руководство

Шаг 1: Создание HTML-формы для регистрации

Начнем с базовой HTML-формы, которая будет собирать имя пользователя, электронную почту и пароль. Эта форма отправляет данные методом POST на PHP-скрипт (register.php), который будет обрабатывать информацию.

<!DOCTYPE html>

<html lang="ru">

<head>

<meta charset="UTF-8">

<meta http-equiv="X-UA-Compatible" content="IE=edge">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>Регистрация</title>

</head>

<body>

<h2>Форма регистрации</h2>

<form action="register.php" method="post">

<label for="username">Имя пользователя:</label><br>

<input type="text" id="username" name="username" required><br><br>

<label for="email">Email:</label><br>

<input type="email" id="email" name="email" required><br><br>

<label for="password">Пароль:</label><br>

<input type="password" id="password" name="password" required><br><br>

<input type="submit" value="Зарегистрироваться">

</form>

</body>

</html>

Шаг 2: PHP-скрипт для обработки данных с использованием PDO

Теперь перейдем к созданию PHP-скрипта (register.php), который будет принимать данные из формы и сохранять их в базе данных MySQL. Мы будем использовать PDO (PHP Data Objects) для подключения и работы с базой данных, что обеспечивает безопасность и удобство работы.

<?php

// Настройки подключения к базе данных

$host = 'localhost'; // Имя хоста

$dbname = 'my_database'; // Имя базы данных

$username_db = 'root'; // Имя пользователя БД

$password_db = ''; // Пароль БД (если есть)

// Подключение к базе данных через PDO

try {

$dsn = "mysql:host=$host;dbname=$dbname;charset=utf8";

$pdo = new PDO($dsn, $username_db, $password_db, [

PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // Включаем обработку ошибок

PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // Массивы по умолчанию

PDO::ATTR_EMULATE_PREPARES => false, // Отключаем эмуляцию подготовленных выражений

]);

} catch (PDOException $e) {

die("Ошибка подключения к базе данных: " . $e->getMessage());

}

// Проверка отправки формы

if ($_SERVER["REQUEST_METHOD"] == "POST") {

// Получаем данные из формы

$username = $_POST['username'];

$email = $_POST['email'];

$password = password_hash($_POST['password'], PASSWORD_DEFAULT); // Хэшируем пароль

// SQL-запрос для вставки данных

$sql = "INSERT INTO users (username, email, password) VALUES (:username, :email, :password)";

// Подготовка и выполнение запроса через PDO

try {

$stmt = $pdo->prepare($sql);

$stmt->execute([

':username' => $username,

':email' => $email,

':password' => $password

]);

echo "Регистрация прошла успешно!";

} catch (PDOException $e) {

echo "Ошибка при выполнении запроса: " . $e->getMessage();

}

}

// Закрытие соединения (необязательно в PDO, но можно сделать для аккуратности)

$pdo = null;

?>

Пояснение к коду:

  • Подключение через PDO: Мы подключаемся к базе данных через PDO. Этот способ работы с базой данных считается безопасным, так как поддерживает подготовленные выражения, защищающие от SQL-инъекций.

  • Хэширование пароля: Использование функции password_hash() позволяет безопасно хранить пароли, применяя современный алгоритм хэширования. Это значительно увеличивает уровень защиты пользовательских данных.

  • Подготовленные запросы: Мы используем подготовленные запросы для передачи данных в базу. Это защищает от SQL-инъекций, так как данные передаются отдельно от структуры SQL-запроса.

Шаг 3: Создание таблицы в MySQL

Перед тем, как вы сможете зарегистрировать пользователей, вам нужно создать таблицу для хранения информации о них. Вот пример SQL-запроса для создания таблицы users в базе данных:

CREATE TABLE users (

id INT AUTO_INCREMENT PRIMARY KEY,

username VARCHAR(50) NOT NULL,

email VARCHAR(100) NOT NULL,

password VARCHAR(255) NOT NULL,

created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP

);

Пояснение к таблице:

  • id: Автоматически увеличивающийся идентификатор для каждого пользователя.

  • username: Имя пользователя, которое должно быть уникальным и не пустым.

  • email: Электронная почта, которая также должна быть уникальной и валидной.

  • password: Хэшированный пароль пользователя.

  • created_at: Автоматическая отметка времени, когда пользователь зарегистрировался.

Преимущества использования PDO:

  1. Безопасность: PDO поддерживает подготовленные выражения, которые защищают от SQL-инъекций, одной из наиболее распространенных атак на базы данных.

  2. Кросс-базовая поддержка: PDO позволяет легко менять драйверы для работы с разными базами данных (например, MySQL, PostgreSQL, SQLite).

  3. Обработка ошибок: PDO легко настраивается для выброса исключений в случае ошибок, что помогает отлавливать и решать проблемы на ранних стадиях.

Хэширование паролей в PHP

Хэширование пароля с помощью password_hash() делает вашу систему более безопасной. Это важно, так как хранение паролей в открытом виде крайне небезопасно. При хэшировании создается "отпечаток" пароля, который невозможно восстановить до оригинала, даже если данные будут скомпрометированы.

$password = password_hash($_POST['password'], PASSWORD_DEFAULT);

Для проверки пароля при авторизации можно использовать функцию password_verify().

Заключение

Создание системы регистрации с использованием PHP и PDO — это простой, но мощный способ начать работу с безопасной аутентификацией пользователей. Мы рассмотрели основные аспекты: создание формы, работу с базой данных через PDO, использование подготовленных запросов для защиты от SQL-инъекций, а также хэширование паролей.

Этот пример является хорошей основой для построения более сложных систем аутентификации, где можно добавлять подтверждение по электронной почте, двухфакторную аутентификацию и другие меры безопасности.

Убедитесь, что ваш сервер настроен на работу с PHP и MySQL, а также что конфигурация базы данных соответствует вашим требованиям.

Показать полностью 1
PHP Mysql Регистрация HTML Безопасность База данных Веб-разработка Персональные данные IT Программа Длиннопост
11
IliaHohlov
IliaHohlov
Лига программистов

Задача-тест с собеседования по SQL⁠⁠

1 год назад
Задача-тест с собеседования по SQL

Здравствуй, уважаемый читатель!

Как насчёт очередной задачи с собеседования по SQL? Задача базового курса, поэтому поставил одну звезду уровня сложности из пяти.

Дана схема данных (рисунок выше). Необходимо создать представление (VIEW) с названием CLIENTS_INFO, содержащее следующую информацию о клиентах: INN, NAME, PHONE.

Какая ошибка допущена в следующей SQL команде?

CREATE VIEW CLIENTS_INFO
AS SELECT INN, NAME, PHONE
FROM CLIENTS, CLIENT_CONTACTS
WHERE CLIENTS.CLIENT_ID = CLIENT_CONTACTS.CLIENT_ID

Задача-тест с собеседования по SQL

Посмотреть правильный ответ и найти еще больше интересных задач можно в моем Телеграм-канале.

Показать полностью 2
[моё] Программирование IT Собеседование Тестирование Программист SQL База данных Oracle Ms SQL Mysql Postgresql Задача
49
J0HNSS0N
J0HNSS0N
Лига программистов

Ответ на пост «Задачи с собеседования по SQL»⁠⁠1

1 год назад

Example Answer Structure

Question: What value will the following query return?

SELECT COUNT(*) FROM TMP_TABLE;

Answer:

To determine the result of the query SELECT COUNT(*) FROM TMP_TABLE;, we need to understand what the COUNT(*) function does in SQL. The COUNT(*) function counts the number of rows in a table, regardless of whether they contain NULL values or not.

Let's look at the data in the table TMP_TABLE:

column1column21212NULL131214NULLNULL1315

There are 5 rows in the table. The COUNT(*) function will count all these rows, including those with NULL values.

Therefore, the query:

SELECT COUNT(*) FROM TMP_TABLE;

will return the value 5.

This value is the total number of rows in the table TMP_TABLE, without any consideration of the content of the columns or whether they contain NULL values.
______
ChatGPT4o. Простите.

Программирование Собеседование IT SQL Задача Аналитика База данных Ms SQL Oracle Postgresql Postgres Mysql Тестирование Telegram (ссылка) Ответ на пост Текст
1
14
IliaHohlov
IliaHohlov
Лига программистов

Задача по SQL с неочевидным решением⁠⁠

1 год назад

Здравствуй, уважаемый читатель! Спасибо, что заходишь ко мне на канал и изучаешь SQL со мной!

Недавно нашёл в интернете достаточно простую задачу с собеседования по SQL, в которой нужно было составить запрос к таблицам. Ссылку на источник размещу ниже. В своём Телеграм канале, где мы решаем разные задачи с собеседований и разбираем практические ситуации, я предложил всем поучаствовать в её решении. Надеюсь, тебе будет тоже интересно попробовать её решить. Ниже описание задачи.

В базе данных есть таблица анализов Analysis, имеющая следующие столбцы: an_id — ID анализа; an_name — название анализа; an_price — цена анализа; an_group — группа анализов. Есть, также, таблица заказов Orders: ord_id — ID заказа; ord_datetime — дата и время заказа; ord_an — ID анализа. Необходимо вывести название и цену для всех анализов, которые продавались 5 февраля 2020 и всю следующую неделю.

Тут сделай паузу и попробуй сначала сам решить задачу.

Итак, надеюсь, ты делал паузу и составил SQL-запрос. Далее будем решать вместе.

Напомню, что нужно было вывести список анализов и их цену, которые продавались 05.02.2022 и всю следующую неделю.

Первым решением напрашивается соединение таблицы анализов и таблицы продаж с применением условия на период. Кстати, именно это и указано в качестве ответа на задачу.

На самом деле, из-за того, что один анализ за выбираемый интервал времени мог быть продан сколько угодно раз (один и тот же анализ мог быть продан хоть тысячу раз и больше) заместо соединения таблицы анализов с таблицей заказов, я бы предложил использование EXISTS:

select  a.an_name, a.an_cost from  analysis a where  exists (select 1 from orders  where ord_an = a.an_id  and ord_datetime between to_date('05.02.2022', 'dd.mm.yyyy') and to_date('05.02.2022', 'dd.mm.yyyy') + 7)

Благодаря тому, что мы не джоинили анализы с их заказами, в результирующей таблице анализы не замножатся по количеству присоединившихся к ним заказов. То есть в результате мы получим:

а не:

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

Ссылка на источник: https://tproger.ru/articles/5-zadanij-po-sql-s-realnyh-sobesedovanij

Поддержи статью лайком или подпиской!

Ещё больше интересных практических задач по SQL и задач с собеседований в нашем Телеграмм-канале и в интернете :)

Показать полностью 3
[моё] IT Программирование Собеседование Тестирование Фриланс SQL Oracle Программист Ms SQL Mysql Postgresql Postgres База данных Длиннопост
8
11
Slava.Rozhnev
Slava.Rozhnev
ИТ-проекты пикабушников
Серия SQLize.online

Хочу поделиться хорошей новостью!⁠⁠

1 год назад

Я рад сообщить, что моя платформа sqlize.online получила пожертвование от MariaDB CIO.

[моё] SQL Обучение It обучение Mysql Текст
16
2
IliaHohlov
IliaHohlov
Лига программистов

Задачи с собеседования по SQL⁠⁠1

1 год назад

Всем привет!

Продолжаем разбирать SQL задачи с собеседований с нашего Телеграм-канала!

В базе данных есть таблица TMP_TABLE, имеющая всего два столбца и содержащая следующие данные:

TMP_TABLE

column1 column2

-----------------------------------------

12 12

NULL 13

12 14

NULL NULL

13 15

Какое значение вернёт следующий запрос?

SELECT COUNT(*) FROM TMP_TABLE

Задачи с собеседования по SQL
Показать полностью 1
[моё] Программирование Собеседование IT SQL Задача Аналитика База данных Ms SQL Oracle Postgresql Postgres Mysql Тестирование Telegram (ссылка)
68
0
IliaHohlov
IliaHohlov
Лига программистов

ЗАДАЧИ ПО SQL⁠⁠

1 год назад

Всем доброго понедельника!

Как насчёт очередной небольшой задачи по SQL с нашего Телеграм-канала?

В таблице INVOICES две строки. В первой строке в столбце QTY число 25, во второй строке в этом же столбце лежит NULL.

Какой будет результат запроса?

SELECT SUM(QTY) FROM INVOICES

ЗАДАЧИ ПО SQL
Программирование IT Собеседование SQL Oracle Postgresql Mysql Тестирование Программист Telegram (ссылка)
35
IliaHohlov
IliaHohlov
Лига программистов

ЗАДАЧА-ТЕСТ ПО SQL⁠⁠

1 год назад

Всем привет!

Как насчет небольшой задачи по SQL с нашего Телеграм-канала? По сложности назначаю 1 звёздочку из пяти! Проверьте себя, ничего не забыли из основы основ? И внимательно читаем условие задачи, ато обидно будет ответить не правильно на достаточно простой задаче 😉

Таблица PERS определена следующим образом:

(ID NUMBER NOT NULL PRIMARY KEY,

NAME VARCHAR(100) NOT NULL)

Запрос

SELECT COUNT(*) FROM PERS WHERE NAME = 'Иванов Иван Иванович'

возвращает число 2.

Сколько строк вернёт следующий запрос?

SELECT DISTINCT ID, NAME FROM PERS WHERE NAME = 'Иванов Иван Иванович'

ЗАДАЧА-ТЕСТ ПО SQL
Показать полностью 1
IT Собеседование Программирование SQL Oracle Mysql База данных Telegram (ссылка)
33
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Промокоды Яндекс Еда Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии