12 subscribers
182 photos
3 videos
212 links
Programmer - Курсы программирования. Канал для тех, кто не хочет остаться на задворках цивилизации.
Download Telegram
👉Видеокурс "Создание движка на PHP и MySQL 2.0"
Я достаточно давно занимаюсь созданием сайтов. И у меня иногда мои знакомые спрашивают, где я всему этому научился. Я решил, что эта информация может быть кому-нибудь полезна и среди моих читателей.

Где-то 90% своих знаний я почерпнул из курсов Михаила Русакова. И вот не так давно у него вышел очень интересный курс по теме создания собственных движков для сайтов. Эта тема очень актуальна, если Вы хотите создавать по-настоящему профессиональные сайты. У готовых движков есть огромное количество минусов (многие о них даже не догадываются). О них Михаил рассказал здесь: https://Hottab.programsite.ru/php2

На той же странице можно заказать курс "Создание движка на PHP и MySQL 2.0", который я уже приобрёл и посмотрел сам. Мне он очень понравился, но отмечу, что курс рассчитан, в первую очередь, на тех, кто уже знаком с HTML+CSS+PHP+MySQL.

Поэтому если Вы хотите создавать качественные сайты и выделиться на фоне сайтов на Joomla всяких школьников, то могу посоветовать курс Михаила Русакова: https://Hottab.programsite.ru/php2 - по крайней мере в Рунете лучше курса по этой теме я ещё точно не видел.
📘 Полное руководство по PHP – Глава 12: Работа с сессиями и куками 🐘

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

---

### 1. Сессии
Сессии позволяют хранить данные на сервере для каждого пользователя. Каждая сессия имеет уникальный идентификатор, который передаётся через куки.

#### Начало сессии
<?php
session_start();
?>


#### Сохранение данных в сессии
<?php
session_start();
$_SESSION['username'] = "Иван";
echo "Данные сохранены в сессии!";
?>


#### Получение данных из сессии
<?php
session_start();
if (isset($_SESSION['username'])) {
echo "Привет, " . $_SESSION['username'] . "!";
} else {
echo "Сессия не найдена!";
}
?>


#### Удаление данных из сессии
<?php
session_start();
unset($_SESSION['username']);
echo "Данные удалены из сессии!";
?>


#### Завершение сессии
<?php
session_start();
session_destroy();
echo "Сессия завершена!";
?>


---

### 2. Куки
Куки позволяют хранить данные на стороне клиента. Они могут быть использованы для персонализации или отслеживания пользователей.

#### Установка куки
<?php
setcookie("username", "Иван", time() + 3600, "/");
echo "Кука установлена!";
?>


#### Получение данных из куки
<?php
if (isset($_COOKIE['username'])) {
echo "Привет, " . $_COOKIE['username'] . "!";
} else {
echo "Кука не найдена!";
}
?>


#### Удаление куки
<?php
setcookie("username", "", time() - 3600, "/");
echo "Кука удалена!";
?>


---

### 3. Пример: Авторизация с использованием сессий
#### Форма входа
<form action="login.php" method="post">
Имя пользователя: <input type="text" name="username">
Пароль: <input type="password" name="password">
<input type="submit" value="Войти">
</form>


#### Обработка входа (login.php)
<?php
session_start();

$username = $_POST['username'];
$password = $_POST['password'];

// Проверка логина и пароля (пример)
if ($username === "Иван" && $password === "12345") {
$_SESSION['username'] = $username;
echo "Вход выполнен!";
} else {
echo "Неверные данные!";
}
?>


#### Проверка авторизации
<?php
session_start();

if (isset($_SESSION['username'])) {
echo "Привет, " . $_SESSION['username'] . "!";
} else {
echo "Пожалуйста, войдите в систему.";
}
?>


#### Выход из системы
<?php
session_start();
session_destroy();
echo "Вы вышли из системы!";
?>


---

### 4. Пример: Запоминание пользователя с использованием кук
#### Установка куки при входе
<?php
$username = $_POST['username'];
$password = $_POST['password'];

if ($username === "Иван" && $password === "12345") {
setcookie("username", $username, time() + 3600, "/");
echo "Вход выполнен!";
} else {
echo "Неверные данные!";
}
?>


#### Проверка куки
<?php
if (isset($_COOKIE['username'])) {
echo "Привет, " . $_COOKIE['username'] . "!";
} else {
echo "Пожалуйста, войдите в систему.";
}
?>


---

### 5. Безопасность
- Сессии: Используйте session_regenerate_id() для предотвращения фиксации сессии.
- Куки: Устанавливайте флаг HttpOnly и Secure для защиты от XSS и перехвата.

  setcookie("username", "Иван", time() + 3600, "/", "", true, true);


---

🎯 Что дальше?
В следующей главе мы изучим работу с базами данных, включая PDO и ORM. Продолжайте изучать PHP, и вы сможете создавать мощные веб-приложения! 🚀

#PHP #Сессии #Куки #Программирование #Телеграм
Изучаем Python: Урок 6 🐍
В этом уроке мы рассмотрим такие важные темы, как работа с API, машинное обучение и создание графических интерфейсов (GUI). Эти навыки помогут вам создавать современные и интерактивные приложения.

---

### 📚 Что вы узнаете:
1. Работа с API: Как взаимодействовать с внешними сервисами через API.
2. Машинное обучение: Как использовать библиотеку scikit-learn для создания моделей машинного обучения.
3. Графические интерфейсы: Как создавать простые GUI с использованием библиотеки Tkinter.

---

### 🛠 Практические примеры:
1. Работа с API:

   import requests

response = requests.get("https://api.github.com")
print(response.json()) # Вывод JSON-данных


2. Машинное обучение с `scikit-learn`:

   from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

data = load_iris()
X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.3)
model = RandomForestClassifier()
model.fit(X_train, y_train)
predictions = model.predict(X_test)
print("Точность модели:", accuracy_score(y_test, predictions))


3. Создание GUI с `Tkinter`:

   import tkinter as tk

def on_button_click():
label.config(text="Привет, мир!")

app = tk.Tk()
app.title("Мое приложение")
label = tk.Label(app, text="Нажмите кнопку")
label.pack()
button = tk.Button(app, text="Нажми меня", command=on_button_click)
button.pack()
app.mainloop()


---

### 🚀 Почему это важно?
- API позволяют взаимодействовать с внешними сервисами, такими как социальные сети, погодные сервисы и многое другое.
- Машинное обучение открывает двери к созданию интеллектуальных систем, способных анализировать данные и делать прогнозы.
- Графические интерфейсы делают ваши приложения более удобными и интерактивными.

---

### 📌 Совет:
Попробуйте создать свое приложение с использованием API, например, для получения данных о погоде. Или создайте простую модель машинного обучения для классификации данных.

---

Подписывайтесь на наш канал, чтобы не пропустить следующие уроки!
👉 [https://t.me/Safety_Y](https://t.me/Safety_Y)

---

Если у вас есть вопросы или вы хотите узнать больше, пишите в комментариях! 🚀
🚀 Изучаем HTML5 | Урок 9: Формы и элементы ввода

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

---

### 📝 Основы форм
Формы создаются с помощью тега <form>. Они могут содержать различные элементы ввода, такие как текстовые поля, кнопки, флажки и многое другое.

#### Пример простой формы:
<form action="/submit" method="post">
<label for="name">Имя:</label>
<input type="text" id="name" name="name" required>

<label for="email">Email:</label>
<input type="email" id="email" name="email" required>

<button type="submit">Отправить</button>
</form>


- `action`: Указывает URL, на который отправляются данные формы.
- `method`: Определяет метод отправки данных (GET или POST).
- `required`: Обязательное поле для заполнения.

---

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

#### Примеры:
<label for="color">Выберите цвет:</label>
<input type="color" id="color" name="color">

<label for="date">Дата:</label>
<input type="date" id="date" name="date">

<label for="range">Уровень удовлетворения:</label>
<input type="range" id="range" name="range" min="0" max="10">

<label for="file">Загрузите файл:</label>
<input type="file" id="file" name="file">


- `type="color"`: Поле для выбора цвета.
- `type="date"`: Поле для выбора даты.
- `type="range"`: Ползунок для выбора значения в диапазоне.
- `type="file"`: Поле для загрузки файлов.

---

### 🔍 Валидация форм
HTML5 упрощает валидацию данных с помощью встроенных атрибутов.

#### Пример:
<label for="phone">Телефон:</label>
<input type="tel" id="phone" name="phone" pattern="[0-9]{10}" required>


- `pattern`: Указывает регулярное выражение для проверки ввода.
- `type="tel"`: Поле для ввода номера телефона.

---

### 🎯 Практическое задание
1. Создайте форму регистрации с полями для имени, email, пароля и даты рождения.
2. Добавьте поле для выбора цвета и ползунок для оценки.
3. Используйте атрибуты валидации, чтобы сделать поля обязательными.

---

💡 Совет: Используйте семантические теги, такие как <fieldset> и <legend>, для группировки элементов формы. Это улучшит читаемость и доступность вашего кода.

---

В следующем уроке мы начнем изучать CSS, чтобы ваши формы и страницы стали стильными и привлекательными! 🎨

Не забывайте задавать вопросы в комментариях, если что-то непонятно. Удачи в изучении HTML5! 🚀

#HTML5 #вебразработка #урокиHTML #программирование

👉 Подписывайтесь на наш канал: [https://t.me/Safety_Y](https://t.me/Safety_Y)

-
Урок 9: Препроцессоры CSS — SASS/SCSS

Привет, друзья! 👋 Сегодня мы познакомимся с препроцессорами CSS, такими как SASS/SCSS. Эти инструменты делают написание стилей проще, удобнее и мощнее. Вы узнаете, как использовать переменные, вложенности, миксины и многое другое. Поехали! 🚀

---

### Что такое SASS/SCSS?
SASS (Syntactically Awesome Style Sheets) — это препроцессор, который расширяет возможности CSS. Он добавляет функции, которых нет в обычном CSS, такие как:
- Переменные.
- Вложенности.
- Миксины (функции).
- Импорт файлов.

SCSS — это синтаксис SASS, который полностью совместим с обычным CSS.

---

### Основные возможности SASS/SCSS

#### 1. Переменные
Переменные позволяют хранить значения (цвета, размеры и т.д.) для повторного использования.

Пример:
$primary-color: #3498db;
$font-size: 16px;

body {
color: $primary-color;
font-size: $font-size;
}



#### 2. Вложенности
Вложенности позволяют писать более читаемый и структурированный код.

Пример:
nav {
ul {
margin: 0;
padding: 0;
list-style: none;
}
li {
display: inline-block;
}
a {
text-decoration: none;
}
}



#### 3. Миксины (Mixins)
Миксины — это функции, которые позволяют повторно использовать блоки кода.

Пример:
@mixin border-radius($radius) {
-webkit-border-radius: $radius;
-moz-border-radius: $radius;
border-radius: $radius;
}

.button {
@include border-radius(10px);
}



#### 4. Импорт файлов
Вы можете разбивать стили на несколько файлов и импортировать их в основной файл.

Пример:
@import 'variables';
@import 'buttons';
@import 'layout';



#### 5. Наследование (`@extend`)
Наследование позволяет повторно использовать стили одного элемента для другого.

Пример:
.message {
padding: 10px;
border: 1px solid #ccc;
}

.success {
@extend .message;
border-color: green;
}



#### 6. Математические операции
SASS поддерживает математические операции прямо в стилях.

Пример:
.container {
width: 100% / 3; /* Ширина будет 33.333% */
}



---

### Как использовать SASS/SCSS?
1. Установите SASS через npm (Node.js):

   npm install -g sass



2. Создайте файл .scss и напишите в нем стили.

3. Скомпилируйте SCSS в CSS:

   sass input.scss output.css



4. Подключите скомпилированный CSS-файл к вашему HTML.

---

### Практика
1. Создайте файл styles.scss.
2. Используйте переменные для цветов и размеров.
3. Добавьте вложенности для структурирования стилей.
4. Создайте миксин для градиентного фона.

---

### Домашнее задание
Создайте проект с использованием SASS/SCSS:
- Разделите стили на несколько файлов (например, variables.scss, buttons.scss, layout.scss).
- Используйте миксины для создания кнопок с разными стилями.
- Подключите скомпилированный CSS к HTML.

Поделитесь результатами в комментариях! 😉

В следующем уроке мы разберем BEM-методологию для написания чистого и поддерживаемого CSS. Оставайтесь с нами! 💪

Подписывайтесь на наш канал: [https://t.me/Safety_Y](https://t.me/Safety_Y)

#CSS #ВебРазработка #УрокиCSS #Программирование
👉HTML5 и CSS3 с Нуля до Гуру
Друзья, у меня иногда спрашивают, а где я учился создавать сайты? Я всегда отвечаю, что у Михаила Русакова. И вот недавно передо мной встала ещё одна задача.

Мне надо было изучить в кратчайшие сроки HTML5 и CSS3. И как раз у Михаила вышел новый курс, который посвящён этим новым технологиям. Они уже развиваются много лет, и вот сейчас они уже вышли на финишную прямую, и мы смело можем их использовать.

Вот как раз ссылка на курс: https://Hottab.programsite.ru/html5

Прошёл я этот курс, всё было очень легко. Материал курса очень подробный, всё детально разбирается, а упражнения позволяют закрепить знания.

Также меня очень порадовал бонусный курс - "Вёрстка под мобильные устройства". Раньше я думал, что это достаточно долгий и сложный процесс. На самом деле, всё оказалось очень и очень просто. И в 11-ти уроках Михаил показывает пример адаптирования реального сайта под самые различные мобильные устройства. Впрочем, и HTML5 с CSS3 применяются при вёрстке всё того же сайта.

Таким образом, курс "HTML5 и CSS3 с Нуля до Гуру" превзошёл все мои ожидания, и я его рекомендую всем тем, кто занимается созданием сайтов и пока не знаком с этими мега-полезными Web-технологиями: https://Hottab.programsite.ru/html5
📘 Полное руководство по PHP – Глава 13: Работа с базами данных (PDO и ORM) 🐘

В этой главе мы углубимся в работу с базами данных в PHP. Вы узнаете, как использовать PDO (PHP Data Objects) для безопасного взаимодействия с базами данных, а также познакомитесь с основами ORM (Object-Relational Mapping).

---

### 1. PDO: Подключение к базе данных
PDO — это универсальный интерфейс для работы с различными СУБД (MySQL, PostgreSQL, SQLite и др.).

#### Подключение к MySQL
<?php
$host = 'localhost';
$dbname = 'my_database';
$username = 'root';
$password = '';

try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Подключение успешно!";
} catch (PDOException $e) {
echo "Ошибка подключения: " . $e->getMessage();
}
?>


---

### 2. Выполнение запросов
#### SELECT
<?php
$stmt = $pdo->query("SELECT * FROM users");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo "Имя: " . $row['name'] . ", Возраст: " . $row['age'] . "<br>";
}
?>


#### INSERT
<?php
$name = "Иван";
$age = 25;

$stmt = $pdo->prepare("INSERT INTO users (name, age) VALUES (:name, :age)");
$stmt->execute(['name' => $name, 'age' => $age]);
echo "Запись добавлена!";
?>


#### UPDATE
<?php
$id = 1;
$newAge = 30;

$stmt = $pdo->prepare("UPDATE users SET age = :age WHERE id = :id");
$stmt->execute(['age' => $newAge, 'id' => $id]);
echo "Запись обновлена!";
?>


#### DELETE
<?php
$id = 1;

$stmt = $pdo->prepare("DELETE FROM users WHERE id = :id");
$stmt->execute(['id' => $id]);
echo "Запись удалена!";
?>


---

### 3. Транзакции
Транзакции позволяют выполнять несколько запросов как единое целое. Если один запрос завершится ошибкой, все изменения откатываются.

Пример:
<?php
try {
$pdo->beginTransaction();

$stmt1 = $pdo->prepare("INSERT INTO users (name, age) VALUES (:name, :age)");
$stmt1->execute(['name' => 'Иван', 'age' => 25]);

$stmt2 = $pdo->prepare("INSERT INTO users (name, age) VALUES (:name, :age)");
$stmt2->execute(['name' => 'Мария', 'age' => 30]);

$pdo->commit();
echo "Транзакция успешно завершена!";
} catch (Exception $e) {
$pdo->rollBack();
echo "Ошибка: " . $e->getMessage();
}
?>


---

### 4. ORM: Введение
ORM (Object-Relational Mapping) — это технология, которая позволяет работать с базой данных как с объектами в коде. Популярные ORM для PHP: Eloquent (Laravel), Doctrine.

#### Пример с Eloquent
1. Установите Eloquent через Composer:

   composer require illuminate/database

2. Настройка:

   <?php
require 'vendor/autoload.php';

use Illuminate\Database\Capsule\Manager as Capsule;

$capsule = new Capsule;

$capsule->addConnection([
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'my_database',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
]);

$capsule->setAsGlobal();
$capsule->bootEloquent();
?>

3. Создание модели:

   <?php
class User extends Illuminate\Database\Eloquent\Model {
protected $table = 'users';
}

$users = User::all();
foreach ($users as $user) {
echo "Имя: " . $user->name . ", Возраст: " . $user->age . "<br>";
}
?>


---

### 5. Миграции
Миграции позволяют управлять структурой базы данных через код.

#### Пример с Eloquent
1. Создайте миграцию:

   <?php
use Illuminate\Database\Capsule\Manager as Capsule;

Capsule::schema()->create('users', function ($table) {
$table->increments('id');
$table->string('name');
$table->integer('age');
$table->timestamps();
});
?>

2. Примените миграцию:

   <?php
Capsule::schema()->create('users', function ($table) {
$table->increments('id');
$table->string('name');
$table->integer('age');
$table->timestamps();
});
?>




🎯 Что дальше?
В следующей главе мы изучим работу с API, включая создание и использование RESTful API. Продолжайте изучать PHP, и вы сможете создавать мощные
Урок 7: Работа с функциями в Python 🐍

Привет, друзья! Сегодня мы продолжаем изучать Python и поговорим о функциях — одном из самых важных инструментов в программировании. 🚀

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

### Как создать функцию?
В Python функции создаются с помощью ключевого слова def. Вот пример простой функции:

def greet(name):
print(f"Привет, {name}! Добро пожаловать в наш канал!")


### Как вызвать функцию?
После создания функции её можно вызвать в любом месте программы:

greet("Анна")


Вывод:
Привет, Анна! Добро пожаловать в наш канал!


### Возвращение значений
Функции могут возвращать значения с помощью ключевого слова return. Например:

def add(a, b):
return a + b

result = add(5, 3)
print(result) # Вывод: 8


### Параметры по умолчанию
Вы можете задать значения по умолчанию для параметров функции:

def greet(name="Гость"):
print(f"Привет, {name}!")

greet() # Вывод: Привет, Гость!
greet("Иван") # Вывод: Привет, Иван!


### Зачем нужны функции?
- Повторное использование кода: Один раз написал — много раз использовал.
- Упрощение кода: Разбиваем сложные задачи на маленькие части.
- Удобство отладки: Легче находить ошибки в небольших блоках кода.

### Практика
Попробуйте создать свою функцию, которая принимает два числа и возвращает их произведение. 🧩

---

Если вам понравился урок, ставьте ❤️ и делитесь с друзьями!
Все вопросы и решения задачек можно обсудить в комментариях. 😉

👉 Подписывайтесь на наш канал: [Safety_Y](https://t.me/Safety_Y)
#Python #Программирование #УрокиPython #Функции
🚀 Изучаем HTML5 | Урок 10: Мультимедиа и графика

Привет, друзья! В этом уроке мы продолжим изучать возможности HTML5, сосредоточившись на мультимедиа и графике. Мы узнаем, как добавлять аудио и видео на страницы, а также как создавать графику с помощью <canvas> и <svg>. Поехали! 🎉

---

### 🎧 Аудио и видео в HTML5
HTML5 предоставляет встроенную поддержку для добавления аудио и видео на веб-страницы без необходимости использования сторонних плагинов.

#### Пример аудио:
<audio controls>
<source src="audio.mp3" type="audio/mpeg">
Ваш браузер не поддерживает аудио элемент.
</audio>


#### Пример видео:
<video controls width="600">
<source src="video.mp4" type="video/mp4">
Ваш браузер не поддерживает видео элемент.
</video>


- `controls`: Добавляет элементы управления (воспроизведение, пауза, громкость).
- `<source>`: Указывает источник файла и его тип.

---

### 🎨 Графика с помощью `<canvas>`
Элемент <canvas> используется для создания графики на лету с помощью JavaScript. Это мощный инструмент для рисования графиков, анимаций и даже игр.

#### Пример:
<canvas id="myCanvas" width="200" height="100" style="border:1px solid #000000;">
</canvas>
<script>
var canvas = document.getElementById('myCanvas');
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#FF0000';
ctx.fillRect(10, 10, 50, 50);
</script>


- `getContext('2d')`: Получает контекст для рисования 2D графики.
- `fillRect(x, y, width, height)`: Рисует прямоугольник.

---

### 🖼 Графика с помощью `<svg>`
SVG (Scalable Vector Graphics) — это формат векторной графики, который позволяет создавать масштабируемые изображения. SVG можно использовать для создания сложных графических элементов, таких как иконки, диаграммы и анимации.

#### Пример:
<svg width="100" height="100">
<circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="red" />
</svg>


- `<circle>`: Создает круг с заданными параметрами.
- `cx`, `cy`: Координаты центра круга.
- `r`: Радиус круга.

---

### 🎯 Практическое задание
1. Добавьте на свою страницу аудиоплеер и видеоплеер.
2. Создайте простой рисунок на элементе <canvas> с использованием JavaScript.
3. Используйте SVG для создания графического элемента, например, иконки или диаграммы.

---

💡 Совет: Используйте семантические теги (<header>, <main>, <footer>) для улучшения структуры вашей страницы. Это не только сделает код чище, но и поможет поисковым системам лучше понять ваш контент.

---

В следующем уроке мы начнем изучать CSS, чтобы ваши страницы стали стильными и красивыми! 🎨

Не забывайте задавать вопросы в комментариях, если что-то непонятно. Удачи в изучении HTML5! 🚀

#HTML5 #вебразработка #урокиHTML #программирование

👉 Подписывайтесь на наш канал: [https://t.me/Safety_Y](https://t.me/Safety_Y)
Урок 10: Методология BEM — Пишем чистый и поддерживаемый CSS

Привет, друзья! 👋 Сегодня мы изучим BEM (Block, Element, Modifier) — методологию, которая помогает писать чистый, понятный и легко поддерживаемый CSS-код. BEM особенно полезен в больших проектах, где важно избегать конфликтов стилей и упрощать работу в команде. Поехали! 🚀

---

### Что такое BEM?
BEM — это подход к организации CSS-кода, который делит интерфейс на независимые блоки. Это делает код более модульным и предсказуемым.

Основные понятия:
1. Блок (Block)
Независимый компонент, который имеет смысл сам по себе (например, кнопка, меню, карточка).

2. Элемент (Element)
Часть блока, которая не имеет смысла вне его (например, заголовок или иконка внутри карточки).

3. Модификатор (Modifier)
Свойство, которое изменяет внешний вид или поведение блока/элемента (например, кнопка может быть большой или красной).

---

### Синтаксис BEM
BEM использует строгую нотацию для именования классов:

1. Блок
Название блока пишется одним словом (например, .menu, .button).

2. Элемент
Название элемента отделяется от блока двойным подчеркиванием __ (например, .menu__item, .button__icon).

3. Модификатор
Название модификатора отделяется от блока или элемента двойным дефисом -- (например, .button--large, .menu__item--active).

---

### Пример использования BEM

#### HTML:
<div class="card">
<img class="card__image" src="image.jpg" alt="Image">
<h2 class="card__title">Заголовок</h2>
<p class="card__description">Описание карточки.</p>
<button class="card__button card__button--primary">Кнопка</button>
</div>



#### CSS:
/* Блок */
.card {
border: 1px solid #ccc;
padding: 20px;
}

/* Элементы */
.card__image {
width: 100%;
height: auto;
}

.card__title {
font-size: 24px;
margin-bottom: 10px;
}

.card__description {
font-size: 16px;
color: #666;
}

/* Модификатор */
.card__button--primary {
background-color: blue;
color: white;
}



---

### Преимущества BEM
1. Модульность
Каждый блок независим, что позволяет легко переиспользовать код.

2. Понятность
Имена классов четко описывают структуру и назначение элементов.

3. Отсутствие конфликтов
Уникальные имена классов предотвращают случайные переопределения стилей.

4. Масштабируемость
BEM отлично подходит для больших проектов и командной работы.

---

### Практика
1. Создайте блок header с элементами logo, menu и search.
2. Добавьте модификатор для активного пункта меню.
3. Напишите стили, используя BEM-нотацию.

---

### Домашнее задание
Создайте страницу с использованием BEM:
- Блок header с логотипом и навигацией.
- Блок card с изображением, заголовком и кнопкой.
- Добавьте модификаторы для кнопок (например, primary и secondary).

Поделитесь результатами в комментариях! 😉

На этом наш курс по CSS подходит к концу. Мы изучили основы, Flexbox, Grid, анимации, адаптивный дизайн, препроцессоры и методологию BEM. Теперь вы готовы создавать современные и красивые веб-страницы! 🎉

Подписывайтесь на наш канал: [https://t.me/Safety_Y](https://t.me/Safety_Y)

#CSS #ВебРазработка #УрокиCSS #Программирование
👉Основы JavaScript, jQuery и Ajax
Недавно мне надо было в кратчайшие сроки освоить JavaScript. Я начал искать информацию в Интернете. Вначале мне попадались толстенные, да и ещё, как правило, устаревшие книги, пока я не наткнулся на один интересный курс.

Это курс достаточно известного в своих кругах специалиста в области создания сайтов - Михаил Русакова.

Сразу даю ссылку на курс: https://Hottab.programsite.ru/freejs

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

А самое удивительное, что этот курс абсолютно бесплатный!

В общем, если Вы хотите изучить JavaScript, то могу смело Вам рекомендовать курс, который и Ваш покорный слуга прошёл на одном дыхании: https://Hottab.programsite.ru/freejs
This media is not supported in your browser
VIEW IN TELEGRAM
📘 Полное руководство по PHP – Глава 14: Работа с API (RESTful API) 🐘

В этой главе мы изучим, как создавать и использовать RESTful API на PHP. API (Application Programming Interface) позволяет приложениям взаимодействовать друг с другом. Мы рассмотрим создание API, обработку запросов и работу с JSON.

---

### 1. Что такое RESTful API?
REST (Representational State Transfer) — это архитектурный стиль для создания веб-сервисов. RESTful API использует HTTP-методы (GET, POST, PUT, DELETE) для выполнения операций с ресурсами.

---

### 2. Создание простого RESTful API
#### Шаг 1: Настройка маршрутов
Создайте файл index.php и настройте маршруты:
<?php
header("Content-Type: application/json");

$request_method = $_SERVER['REQUEST_METHOD'];
$request_uri = $_SERVER['REQUEST_URI'];

switch ($request_method) {
case 'GET':
if ($request_uri == '/users') {
getUsers();
} elseif (preg_match('/\/users\/(\d+)/', $request_uri, $matches)) {
getUser($matches[1]);
}
break;
case 'POST':
if ($request_uri == '/users') {
createUser();
}
break;
default:
http_response_code(405);
echo json_encode(["message" => "Метод не поддерживается"]);
}
?>


#### Шаг 2: Функции для обработки запросов
<?php
function getUsers() {
$users = [
["id" => 1, "name" => "Иван"],
["id" => 2, "name" => "Мария"]
];
echo json_encode($users);
}

function getUser($id) {
$users = [
1 => ["id" => 1, "name" => "Иван"],
2 => ["id" => 2, "name" => "Мария"]
];
if (isset($users[$id])) {
echo json_encode($users[$id]);
} else {
http_response_code(404);
echo json_encode(["message" => "Пользователь не найден"]);
}
}

function createUser() {
$data = json_decode(file_get_contents("php://input"), true);
if (isset($data['name'])) {
echo json_encode(["message" => "Пользователь создан", "name" => $data['name']]);
} else {
http_response_code(400);
echo json_encode(["message" => "Неверные данные"]);
}
}
?>


---

### 3. Использование API
#### GET-запрос (получение списка пользователей)
curl -X GET http://localhost/users

Ответ:
[
{"id": 1, "name": "Иван"},
{"id": 2, "name": "Мария"}
]


#### GET-запрос (получение одного пользователя)
curl -X GET http://localhost/users/1

Ответ:
{"id": 1, "name": "Иван"}


#### POST-запрос (создание пользователя)
curl -X POST -H "Content-Type: application/json" -d '{"name": "Алексей"}' http://localhost/users

Ответ:
{"message": "Пользователь создан", "name": "Алексей"}


---

### 4. Обработка ошибок
- 404 Not Found: Ресурс не найден.
- 400 Bad Request: Неверные данные.
- 405 Method Not Allowed: Метод не поддерживается.

Пример:
<?php
http_response_code(404);
echo json_encode(["message" => "Ресурс не найден"]);
?>


---

### 5. Работа с JSON
PHP предоставляет функции для работы с JSON:
- json_encode(): Преобразует массив в JSON.
- json_decode(): Преобразует JSON в массив.

Пример:
<?php
$data = ["name" => "Иван", "age" => 25];
$json = json_encode($data);
echo $json; // {"name":"Иван","age":25}

$array = json_decode($json, true);
print_r($array); // Array ( [name] => Иван [age] => 25 )
?>


---

### 6. Авторизация и токены
Для защиты API часто используются токены (например, JWT).

#### Пример с JWT
1. Установите библиотеку для работы с JWT:

   composer require firebase/php-jwt

2. Создайте токен:

   <?php
use Firebase\JWT\JWT;

$key = "your_secret_key";
$payload = [
"user_id" => 1,
"username" => "Иван"
];
$jwt = JWT::encode($payload, $key);
echo $jwt;
?>

3. Проверка токена:

   <?php
try {
$decoded = JWT::decode($jwt, $key, array('HS256'));
print_r($decoded);
} catch (Exception $e) {
http_response_code(401);
echo json_encode(["message" => "Ошибка авторизации"]);
}
?>




🎯 Что дальше?
В следующей главе мы изучим работу с файлами и загрузкой данных на сервер. Продолжайте изучать PHP, и вы сможете создавать мощные веб-приложения!
Урок 8: Работа со списками в Python 🐍

Привет, друзья! Сегодня мы продолжаем изучать Python и переходим к одной из самых мощных структур данных — спискам. Списки позволяют хранить и обрабатывать множество элементов в одной переменной. Давайте разбираться! 🚀

---

### Что такое список?
Список — это упорядоченная коллекция элементов, которые могут быть разных типов (числа, строки, другие списки и т.д.). Списки изменяемы, то есть вы можете добавлять, удалять и изменять элементы.

### Как создать список?
Списки создаются с помощью квадратных скобок []. Например:

fruits = ["яблоко", "банан", "вишня"]
numbers = [1, 2, 3, 4, 5]


### Основные операции со списками

1. Доступ к элементам
Элементы списка индексируются, начиная с 0.

   print(fruits[0])  # Вывод: яблоко
print(numbers[2]) # Вывод: 3


2. Изменение элементов
Списки можно изменять:

   fruits[1] = "апельсин"
print(fruits) # Вывод: ["яблоко", "апельсин", "вишня"]


3. Добавление элементов
Используйте метод append() для добавления элемента в конец списка:

   fruits.append("киви")
print(fruits) # Вывод: ["яблоко", "апельсин", "вишня", "киви"]


4. Удаление элементов
Удалить элемент можно с помощью метода remove():

   fruits.remove("вишня")
print(fruits) # Вывод: ["яблоко", "апельсин", "киви"]


5. Длина списка
Узнать количество элементов в списке можно с помощью функции len():

   print(len(fruits))  # Вывод: 3


6. Срезы
Срезы позволяют получить часть списка:

   print(numbers[1:3])  # Вывод: [2, 3]


---

### Пример использования списков
Допустим, мы хотим посчитать сумму всех элементов в списке:

numbers = [1, 2, 3, 4, 5]
total = sum(numbers)
print(total) # Вывод: 15


---

### Практика
Создайте список из 5 любимых фильмов и выведите:
1. Первый фильм.
2. Последний фильм.
3. Добавьте новый фильм в конец списка.
4. Удалите второй фильм из списка.

---

Если вам понравился урок, ставьте ❤️ и делитесь с друзьями!
Все вопросы и решения задачек можно обсудить в комментариях. 😉

👉 Подписывайтесь на наш канал: [Safety_Y](https://t.me/Safety_Y)
#Python #Программирование #УрокиPython #Списки
🚀 Изучаем HTML5 | Урок 11: Формы и элементы ввода

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

---

### 📝 Основы форм
Формы создаются с помощью тега <form>. Они могут содержать различные элементы ввода, такие как текстовые поля, кнопки, флажки и многое другое.

#### Пример простой формы:
<form action="/submit" method="post">
<label for="name">Имя:</label>
<input type="text" id="name" name="name" required>

<label for="email">Email:</label>
<input type="email" id="email" name="email" required>

<button type="submit">Отправить</button>
</form>


- `action`: Указывает URL, на который отправляются данные формы.
- `method`: Определяет метод отправки данных (GET или POST).
- `required`: Обязательное поле для заполнения.

---

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

#### Примеры:
<label for="color">Выберите цвет:</label>
<input type="color" id="color" name="color">

<label for="date">Дата:</label>
<input type="date" id="date" name="date">

<label for="range">Уровень удовлетворения:</label>
<input type="range" id="range" name="range" min="0" max="10">

<label for="file">Загрузите файл:</label>
<input type="file" id="file" name="file">


- `type="color"`: Поле для выбора цвета.
- `type="date"`: Поле для выбора даты.
- `type="range"`: Ползунок для выбора значения в диапазоне.
- `type="file"`: Поле для загрузки файлов.

---

### 🔍 Валидация форм
HTML5 упрощает валидацию данных с помощью встроенных атрибутов.

#### Пример:
<label for="phone">Телефон:</label>
<input type="tel" id="phone" name="phone" pattern="[0-9]{10}" required>


- `pattern`: Указывает регулярное выражение для проверки ввода.
- `type="tel"`: Поле для ввода номера телефона.

---

### 🎯 Практическое задание
1. Создайте форму регистрации с полями для имени, email, пароля и даты рождения.
2. Добавьте поле для выбора цвета и ползунок для оценки.
3. Используйте атрибуты валидации, чтобы сделать поля обязательными.

---

💡 Совет: Используйте семантические теги, такие как <fieldset> и <legend>, для группировки элементов формы. Это улучшит читаемость и доступность вашего кода.

---

В следующем уроке мы начнем изучать CSS, чтобы ваши формы и страницы стали стильными и привлекательными! 🎨

Не забывайте задавать вопросы в комментариях, если что-то непонятно. Удачи в изучении HTML5! 🚀

#HTML5 #вебразработка #урокиHTML #программирование

👉 Подписывайтесь на наш канал: [https://t.me/Safety_Y](https://t.me/Safety_Y)
👉Создание сайта от начала и до конца
Вы много видели книг по созданию сайтов? Я думаю, что да, по крайней мере, я их видел, как минимум, сотню. Но чем они плохи? Вот некоторые недостатки, которые встречаются в большинстве книг:

Устаревшая. Смысл читать книгу по созданию сайта, написанную 10 лет назад? По этой причине, от зарубежных авторов можно читать только в оригинале, так как пока её издадут в России пройдёт года 3, а это уже много.
Автор пишет непонятно для кого. Вроде пишет о простых вещах, но при этом он делает это так трудно, что понять нереально. Такое ощущение, что задача автора показать себя, а не помочь читателю.
Большинство книг по созданию сайта разбирает какой-то отдельный аспект, например, вёрстку, или, например, программную часть. Вроде хорошо, но новичок-то, откуда должен знать, какие темы нужно проходить? У него есть простая цель - научиться создавать сайты, а то, что при этом нужно найти дизайн, сделать вёрстку, написать программную часть, купить домен, хостинг - он изначально никак не знает. Поэтому для начинающих подобные книги вообще не подходят.
И вот недавно я нашёл книгу, которая лишена этих недостатков: https://Hottab.programsite.ru/book

Эта книга рассчитана на начинающих, и вот там создаётся сайт ОТ и ДО. То есть готовится дизайн, затем верстаются страницы, пишется программная часть, а после сайт размещается в Интернете. Автор тщательно всё комментирует, а в книге очень много скриншотов и иллюстраций. Причём особенностью книги является то, что создаётся не какой-то абстрактный сайт, а вполне реальный и существующий в Интернете.

Подводя итог, мне эта книга очень понравилась, поэтому я её Вам рекомендую, тем более, что она бесплатная: https://Hottab.programsite.ru/book
This media is not supported in your browser
VIEW IN TELEGRAM
📘 Полное руководство по PHP – Глава 15: Работа с файлами и загрузка данных на сервер 🐘

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

---

### 1. Загрузка файлов на сервер
PHP позволяет загружать файлы на сервер через HTML-форму.

#### HTML-форма
<form action="upload.php" method="post" enctype="multipart/form-data">
Выберите файл: <input type="file" name="file">
<input type="submit" value="Загрузить">
</form>


#### Обработка загрузки (upload.php)
<?php
if ($_FILES['file']['error'] === UPLOAD_ERR_OK) {
$upload_dir = 'uploads/';
$upload_file = $upload_dir . basename($_FILES['file']['name']);

if (move_uploaded_file($_FILES['file']['tmp_name'], $upload_file)) {
echo "Файл успешно загружен!";
} else {
echo "Ошибка при загрузке файла!";
}
} else {
echo "Ошибка: " . $_FILES['file']['error'];
}
?>


---

### 2. Чтение и запись файлов
PHP предоставляет функции для работы с файлами.

#### Чтение файла
<?php
$file = fopen("example.txt", "r") or die("Не удалось открыть файл!");
echo fread($file, filesize("example.txt"));
fclose($file);
?>


#### Запись в файл
<?php
$file = fopen("example.txt", "w") or die("Не удалось открыть файл!");
$text = "Привет, мир!";
fwrite($file, $text);
fclose($file);
?>


---

### 3. Работа с директориями
PHP позволяет создавать, удалять и переименовывать директории.

#### Создание директории
<?php
if (!file_exists("new_dir")) {
mkdir("new_dir");
echo "Директория создана!";
} else {
echo "Директория уже существует!";
}
?>


#### Удаление директории
<?php
if (file_exists("new_dir")) {
rmdir("new_dir");
echo "Директория удалена!";
} else {
echo "Директория не существует!";
}
?>


#### Переименование директории
<?php
if (file_exists("old_dir")) {
rename("old_dir", "new_dir");
echo "Директория переименована!";
} else {
echo "Директория не существует!";
}
?>


---

### 4. Работа с CSV
CSV (Comma-Separated Values) — это формат для хранения табличных данных.

#### Чтение CSV
<?php
$file = fopen("data.csv", "r");
while (($data = fgetcsv($file, 1000, ",")) !== FALSE) {
print_r($data);
}
fclose($file);
?>


#### Запись в CSV
<?php
$file = fopen("data.csv", "w");
$data = [
["Иван", 25],
["Мария", 30]
];
foreach ($data as $row) {
fputcsv($file, $row);
}
fclose($file);
?>


---

### 5. Работа с JSON
JSON (JavaScript Object Notation) — это популярный формат для обмена данными.

#### Чтение JSON
<?php
$json = '{"name": "Иван", "age": 25}';
$array = json_decode($json, true);
print_r($array);
?>


#### Запись JSON
<?php
$array = ["name" => "Иван", "age" => 25];
$json = json_encode($array);
echo $json;
?>


---

### 6. Управление файловой системой
PHP предоставляет функции для работы с файловой системой.

#### Проверка существования файла
<?php
if (file_exists("example.txt")) {
echo "Файл существует!";
} else {
echo "Файл не существует!";
}
?>


#### Получение размера файла
<?php
echo "Размер файла: " . filesize("example.txt") . " байт";
?>


#### Удаление файла
<?php
if (unlink("example.txt")) {
echo "Файл удалён!";
} else {
echo "Ошибка при удалении файла!";
}
?>


---

🎯 Что дальше?
В следующей главе мы изучим работу с сессиями и куками, а также управление состоянием пользователя. Продолжайте изучать PHP, и вы сможете создавать мощные веб-приложения! 🚀

#PHP #Файлы #Загрузка #Программирование #Телеграм
Урок 9: Циклы в Python 🐍

Привет, друзья! Сегодня мы продолжаем изучать Python и переходим к одной из самых важных тем — циклам. Циклы позволяют выполнять один и тот же блок кода несколько раз, что делает их незаменимыми для обработки данных, перебора элементов и автоматизации задач. Поехали! 🚀

---

### Что такое цикл?
Цикл — это конструкция, которая повторяет выполнение блока кода, пока выполняется определенное условие. В Python есть два основных типа циклов:
1. Цикл `for` — используется для перебора элементов.
2. Цикл `while` — выполняется, пока условие истинно.

---

### Цикл for
Цикл for идеально подходит для перебора элементов списка, строки или любого другого итерируемого объекта.

#### Пример:
fruits = ["яблоко", "банан", "вишня"]
for fruit in fruits:
print(fruit)


Вывод:
яблоко
банан
вишня


#### Функция range()
Часто цикл for используется вместе с функцией range(), которая генерирует последовательность чисел:

for i in range(5):  # Перебор чисел от 0 до 4
print(i)


Вывод:
0
1
2
3
4


---

### Цикл while
Цикл while выполняется, пока условие истинно. Например:

count = 0
while count < 5:
print(f"Счетчик: {count}")
count += 1


Вывод:
Счетчик: 0
Счетчик: 1
Счетчик: 2
Счетчик: 3
Счетчик: 4


---

### Управление циклами
Иногда нужно прервать цикл или пропустить итерацию. Для этого используются:
- break — завершает цикл.
- continue — пропускает текущую итерацию.

#### Пример с break:
for i in range(10):
if i == 5:
break # Выход из цикла, когда i равно 5
print(i)


Вывод:
0
1
2
3
4


#### Пример с continue:
for i in range(5):
if i == 2:
continue # Пропустить итерацию, когда i равно 2
print(i)


Вывод:
0
1
3
4


---

### Практика
1. Создайте список чисел от 1 до 10 и выведите только четные числа с помощью цикла for.
2. Используя цикл while, напишите программу, которая выводит числа от 10 до 1 в обратном порядке.

---

Если вам понравился урок, ставьте ❤️ и делитесь с друзьями!
Все вопросы и решения задачек можно обсудить в комментариях. 😉

👉 Подписывайтесь на наш канал: [Safety_Y](https://t.me/Safety_Y)
#Python #Программирование #УрокиPython #Циклы
🚀 Изучаем HTML5 | Урок 12: Мультимедиа и графика

Привет, друзья! В этом уроке мы продолжим изучать возможности HTML5, сосредоточившись на мультимедиа и графике. Мы узнаем, как добавлять аудио и видео на страницы, а также как создавать графику с помощью <canvas> и <svg>. Поехали! 🎉

---

### 🎧 Аудио и видео в HTML5
HTML5 предоставляет встроенную поддержку для добавления аудио и видео на веб-страницы без необходимости использования сторонних плагинов.

#### Пример аудио:
<audio controls>
<source src="audio.mp3" type="audio/mpeg">
Ваш браузер не поддерживает аудио элемент.
</audio>


#### Пример видео:
<video controls width="600">
<source src="video.mp4" type="video/mp4">
Ваш браузер не поддерживает видео элемент.
</video>


- `controls`: Добавляет элементы управления (воспроизведение, пауза, громкость).
- `<source>`: Указывает источник файла и его тип.

---

### 🎨 Графика с помощью `<canvas>`
Элемент <canvas> используется для создания графики на лету с помощью JavaScript. Это мощный инструмент для рисования графиков, анимаций и даже игр.

#### Пример:
<canvas id="myCanvas" width="200" height="100" style="border:1px solid #000000;">
</canvas>
<script>
var canvas = document.getElementById('myCanvas');
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#FF0000';
ctx.fillRect(10, 10, 50, 50);
</script>


- `getContext('2d')`: Получает контекст для рисования 2D графики.
- `fillRect(x, y, width, height)`: Рисует прямоугольник.

---

### 🖼 Графика с помощью `<svg>`
SVG (Scalable Vector Graphics) — это формат векторной графики, который позволяет создавать масштабируемые изображения. SVG можно использовать для создания сложных графических элементов, таких как иконки, диаграммы и анимации.

#### Пример:
<svg width="100" height="100">
<circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="red" />
</svg>


- `<circle>`: Создает круг с заданными параметрами.
- `cx`, `cy`: Координаты центра круга.
- `r`: Радиус круга.

---

### 🎯 Практическое задание
1. Добавьте на свою страницу аудиоплеер и видеоплеер.
2. Создайте простой рисунок на элементе <canvas> с использованием JavaScript.
3. Используйте SVG для создания графического элемента, например, иконки или диаграммы.

---

💡 Совет: Используйте семантические теги (<header>, <main>, <footer>) для улучшения структуры вашей страницы. Это не только сделает код чище, но и поможет поисковым системам лучше понять ваш контент.

---

В следующем уроке мы начнем изучать CSS, чтобы ваши страницы стали стильными и красивыми! 🎨

Не забывайте задавать вопросы в комментариях, если что-то непонятно. Удачи в изучении HTML5! 🚀

#HTML5 #вебразработка #урокиHTML #программирование

👉 Подписывайтесь на наш канал: [https://t.me/Safety_Y](https://t.me/Safety_Y)
This media is not supported in your browser
VIEW IN TELEGRAM
📘 Полное руководство по PHP – Глава 16: Работа с сессиями и куками 🐘

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

---

### 1. Сессии
Сессии позволяют хранить данные на сервере для каждого пользователя. Каждая сессия имеет уникальный идентификатор, который передаётся через куки.

#### Начало сессии
<?php
session_start();
?>


#### Сохранение данных в сессии
<?php
session_start();
$_SESSION['username'] = "Иван";
echo "Данные сохранены в сессии!";
?>


#### Получение данных из сессии
<?php
session_start();
if (isset($_SESSION['username'])) {
echo "Привет, " . $_SESSION['username'] . "!";
} else {
echo "Сессия не найдена!";
}
?>


#### Удаление данных из сессии
<?php
session_start();
unset($_SESSION['username']);
echo "Данные удалены из сессии!";
?>


#### Завершение сессии
<?php
session_start();
session_destroy();
echo "Сессия завершена!";
?>


---

### 2. Куки
Куки позволяют хранить данные на стороне клиента. Они могут быть использованы для персонализации или отслеживания пользователей.

#### Установка куки
<?php
setcookie("username", "Иван", time() + 3600, "/");
echo "Кука установлена!";
?>


#### Получение данных из куки
<?php
if (isset($_COOKIE['username'])) {
echo "Привет, " . $_COOKIE['username'] . "!";
} else {
echo "Кука не найдена!";
}
?>


#### Удаление куки
<?php
setcookie("username", "", time() - 3600, "/");
echo "Кука удалена!";
?>


---

### 3. Пример: Авторизация с использованием сессий
#### Форма входа
<form action="login.php" method="post">
Имя пользователя: <input type="text" name="username">
Пароль: <input type="password" name="password">
<input type="submit" value="Войти">
</form>


#### Обработка входа (login.php)
<?php
session_start();

$username = $_POST['username'];
$password = $_POST['password'];

// Проверка логина и пароля (пример)
if ($username === "Иван" && $password === "12345") {
$_SESSION['username'] = $username;
echo "Вход выполнен!";
} else {
echo "Неверные данные!";
}
?>


#### Проверка авторизации
<?php
session_start();

if (isset($_SESSION['username'])) {
echo "Привет, " . $_SESSION['username'] . "!";
} else {
echo "Пожалуйста, войдите в систему.";
}
?>


#### Выход из системы
<?php
session_start();
session_destroy();
echo "Вы вышли из системы!";
?>


---

### 4. Пример: Запоминание пользователя с использованием кук
#### Установка куки при входе
<?php
$username = $_POST['username'];
$password = $_POST['password'];

if ($username === "Иван" && $password === "12345") {
setcookie("username", $username, time() + 3600, "/");
echo "Вход выполнен!";
} else {
echo "Неверные данные!";
}
?>


#### Проверка куки
<?php
if (isset($_COOKIE['username'])) {
echo "Привет, " . $_COOKIE['username'] . "!";
} else {
echo "Пожалуйста, войдите в систему.";
}
?>


---

### 5. Безопасность
- Сессии: Используйте session_regenerate_id() для предотвращения фиксации сессии.
- Куки: Устанавливайте флаг HttpOnly и Secure для защиты от XSS и перехвата.

  setcookie("username", "Иван", time() + 3600, "/", "", true, true);


---

🎯 Что дальше?
В следующей главе мы изучим работу с базами данных, включая PDO и ORM. Продолжайте изучать PHP, и вы сможете создавать мощные веб-приложения! 🚀

#PHP #Сессии #Куки #Программирование #Телеграм