[Мысли вслух, что бы не забыть и не делать все как в первый раз. склероз.]
[Мысли вслух, что бы не забыть и не делать все как в первый раз. склероз.]

Способ фильтрации данных на PHP


Этот код проверяет, существуют ли значения для каждого поля, и выводит сообщения в зависимости от того, прошли ли данные проверку.

$filters = [
    'email' => FILTER_VALIDATE_EMAIL,
    'age' => FILTER_VALIDATE_INT,
];
$data = filter_input_array(INPUT_POST, $filters);
// Проверка для email
if ($data && isset($data['email'])) {
    if ($data['email'] === false) {
        echo "Неверный email";
    } else {
        echo "Email корректен: " . htmlspecialchars($data['email']);
    }
}
// Проверка для возраста
if ($data && isset($data['age'])) {
    if ($data['age'] === false) {
        echo "Возраст должен быть целым числом";
    } else {
        echo "Возраст корректен: " . htmlspecialchars($data['age']);
    }
}

Динамичное меню и кнопка "вверх"


При загрузке страницы меню плавно выпадает сверху, при скролле вниз так же плавно уходит вверх + появляется кнопка «Вверх».

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Веб-страница на Bootstrap</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
    <style>
        body {
            font-family: Arial, sans-serif;
        }
        .menu {
            transition: top 0.3s;
        }
        .scroll-to-top {
            position: fixed;
            bottom: 20px;
            right: 20px;
            display: none;
            background: grey;
            border: none;
            border-radius: 50%;
            color: white;
            width: 50px;
            height: 50px;
            font-size: 20px;
            cursor: pointer;
        }
        footer {
            background: white;
            padding: 10px 0;
            text-align: left;
            bottom: 0;
            width: 100%;
        }
        .content {
            margin-top: 60px; /* Отступ для фиксированного меню */
        }
    </style>
</head>
<body>
<nav class="navbar navbar-expand-lg menu fixed-top bg-white">
    <a class="navbar-brand" href="#">Мой сайт</a>
    <div class="collapse navbar-collapse">
        <ul class="navbar-nav ml-auto">
            <li class="nav-item"><a class="nav-link text-muted font-weight-bold" href="#">Главная</a></li>
            <li class="nav-item"><a class="nav-link text-muted font-weight-bold" href="#">Дизайн</a></li>
            <li class="nav-item"><a class="nav-link text-muted font-weight-bold" href="#">Музыка</a></li>
            <li class="nav-item"><a class="nav-link text-muted font-weight-bold" href="#">Хобби</a></li>
        </ul>
    </div>
</nav>
<div class="content">
    <div class="container">
        <h1>Добро пожаловать</h1>
        <p><img src="https://via.placeholder.com/800x300" class="img-fluid" alt="Заглушка изображения"></p>
        <p>Это текстовый заглушка. Здесь может быть Ваш текст.</p>
        <p><img src="https://via.placeholder.com/800x300" class="img-fluid" alt="Заглушка изображения"></p>
        <p>Это текстовый заглушка. Здесь может быть Ваш текст.</p>
        <p><img src="https://via.placeholder.com/800x300" class="img-fluid" alt="Заглушка изображения"></p>
        <p>Это текстовый заглушка. Здесь может быть Ваш текст.</p>
    </div>
</div>
<button class="scroll-to-top" onclick="scrollToTop()">↑</button>
<footer>
    <div class="container">
        <p>© <span id="current-year"></span>. Все права защищены.</p>
        <p>example@example.com</p>
    </div>
</footer>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.5.2/dist/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
    <script>
        let lastScrollTop = 0;
        const navbar = document.querySelector('.menu');
        const scrollToTopButton = document.querySelector('.scroll-to-top');
        let buttonVisible = false; // Флаг видимости кнопки
        window.addEventListener('scroll', function() {
            let st = window.pageYOffset || document.documentElement.scrollTop;
            if (st > lastScrollTop) {
                // Прокрутка вниз
                navbar.style.top = '-60px'; // скрыть меню
                if (!buttonVisible) {
                    scrollToTopButton.style.display = 'block'; // показать кнопку
                    buttonVisible = true;
                }
            } else {
                // Прокрутка вверх
                navbar.style.top = '0'; // показать меню
                if (buttonVisible) {
                    scrollToTopButton.style.display = 'none'; // скрыть кнопку
                    buttonVisible = false;
                }
            }
            lastScrollTop = st <= 0 ? 0 : st; // Для мобильных устройств или отрицательной прокрутки
        });
        function scrollToTop() {
            window.scrollTo({ top: 0, behavior: 'smooth' });
            buttonVisible = false; // Скрыть кнопку после прокрутки
            scrollToTopButton.style.display = 'none'; // скрыть кнопку
        }
        // Установка текущего года в футере
        document.getElementById('current-year').innerText = new Date().getFullYear();
    </script>
</body>
</html>

Плавное меню при загрузке страницы


Вот пример кода на HTML и CSS, который создает верхнее меню, плавно опускающееся сверху при загрузке страницы:

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Плавное меню</title>
    <style>
        body {
            margin: 0;
            font-family: Arial, sans-serif;
        }
        .menu {
            position: fixed;
            top: -100px; /* Начальная позиция вне экрана */
            left: 0;
            right: 0;
            background-color: #333;
            color: white;
            padding: 10px;
            text-align: center;
            transition: top 0.5s ease; /* Плавный переход */
        }
        .menu.show {
            top: 0; /* Конечная позиция */
        }
    </style>
</head>
<body>
    <div class="menu" id="menu">
        Меню
    </div>
    <script>
        window.onload = function() {
            const menu = document.getElementById('menu');
            menu.classList.add('show'); // Добавляем класс для показа меню
        };
    </script>
</body>
</html>

Объяснение:
HTML: Создается фиксированное меню, которое изначально находится вне экрана.
CSS: Используется свойство transition для плавного изменения позиции меню.
JavaScript: При загрузке страницы добавляется класс show, который изменяет позицию меню, заставляя его плавно опуститься сверху.

Проверка валидности email на PHP 8.2


<?php
function isValidEmail(string $email): bool {
    return filter_var($email, FILTER_VALIDATE_EMAIL) !== false;
}
// Пример использования
$email = "example@example.com";
if (isValidEmail($email)) {
    echo "Email корректен.";
} else {
    echo "Email некорректен.";
}
?>

В этом коде используется функция filter_var с фильтром FILTER_VALIDATE_EMAIL, что позволяет эффективно проверять корректность email-адреса.

Если не работает L2TP/IPSec на Windows 10


Не удалось установить связь по сети между компьютером и VPN-сервером, так как удаленный сервер не отвечает. Возможная причина: одно из сетевых устройств (таких как брандмауэры, NAT, маршрутизаторы и т.п.) между компьютером и удаленным сервером не настроено для разрешения VPN-подключений. Чтобы определить, какое устройство вызывает эту проблему, обратитесь к администратору или поставщику услуг.

Если у вас при подключении отображается такая же ошибка, решение давно известно.

Читать дальше...