Cooking PHP. Программирование с Екатериной
172 subscribers
12 photos
3 videos
1 file
25 links
Учим php на кухне с нуля 🙄

Сложно ли девушке работать программистом?
Офисные заметки, размышления о работе и о жизни.

Более 20 лет в ИТ, более 15 в php
Download Telegram
Переименовала группу, не теряйте.
Все-таки придется нам заняться php 😃
Всем, кому интересно ИТ, но сложно выбрать направление или язык программирования, говорю: больше никаких мук выбора, я выбрала за вас 😃

Вопрос только один, в этом канале займемся или новый сделать?
❤‍🔥8🔥7😁51
Я пока еще не поняла, зачем в это ввязалась, но попробую.

Попробую максимально понятно дать основы программирования на php.

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

И все же я попробую🙄

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

Напрягаться сильно не придется, просто читайте посты, которые я пишу, и пишите, понятно было или нет.

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

Но у меня к вам просьба.

Вспомните своих подруг, сестер, коллег. Есть ли из них кто-то, то ищет себя или хочет сменить деятельность? Или мамы в декрете, кто хочет провести время с пользой, мозг потренировать и на новую профессию выйти?

Отправьте им ссылку на этот канал - https://t.me/cookingphp

Мне будет приятно, а им, возможно, полезно❤️
👍156
А сейчас о том, чем мы займемся.

Вот есть сайт (любой, но для примера): https://www.mywishbook.ru

Дизайн - картинку в посте выше вы видели.

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

Сейчас этим сильно не заморачивайтесь, но пример покажу. Упрощенный.

<!DOCTYPE html>
<html lang="ru">
<head>
<title>Книга Желаний и онлайн дневник. Исполнение желаний силой мысли</title>
</head>
<body>
<h1>Книга Желаний</h1>
<p><strong>Этот сайт помогает в сложных жизненных ситуациях и исполняет желания. Книга Желаний исполнила уже 123119 желаний! </strong></p>
<p><a href="/mydiary/top">Читайте воодушевляющие истории</a>, если вам грустно, скучно или не верится в исполнение желаний ;-)</p>
</body>
</html>

Вот и вся страница, она будет работать.
Просто текст, размеченный тегами, открывающий и закрывающий.

В этом примере:

<title></title> Заголовок страницы, который вы видите в заголовке окна браузера
<body></body> тело страницы
<h1></h1> - основной заголовок страницы
<p></p> - параграфы (внутри текст обычно)
<strong></strong> - выделение жирным
<a href="урл страницы, куда отправляем">текст ссылки</a> ссылки

И вот теперь, если вы скопируете этот код в текстовый редактор и сохраните его с расширением .html (например, test.html) и откроете в любом браузере, то увидите веб-страницу.

Очень быстро и просто.
👍101
Но html нас сейчас особо не беспокоит.

Мне он нужен был для более понятного объяснения, что такое php и какова его роль.

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

Вот заходите вы на страницу исполнившихся желаний https://www.mywishbook.ru/mydiary/realized

Откуда там берутся отзывы?

Внизу есть форма.

Пользователь пишут туда что-то и нажимает кнопку "Отправить". Данные улетают на сервер, и тут уже php код, заботливо написанный вами, смотрит, что прилетело, какие поля, и кладет их в базу данных в отдельную таблицу типа realized. Делается это очень просто, если знать немного синтаксис, а это мы узнаем.

А вот когда вы заходите на страницу https://www.mywishbook.ru/mydiary/realized, то php скрипт обращается к базе данных с запросом к таблице realized, чтобы она отдала все отзывы, которые у нее там есть.
И потом этот скрипт отдает уже готовые отзывы на страницу, а мы их читаем.

И точно так же php занимается всем остальным: складывает в базу новых пользователей, новые статьи, новые желания и т.д., а потом, по запросу, возвращает их обратно.

Вы, как пользователь, добавили данные (любые, комментарий, желание, лайк наконец), php это в базу занес.

Вы, как пользователь, хотите прочитать статью, php из базы ее достал и вам показал.

Понятно в самых общих чертах, чем на сайтах занимается php?
11👌3🔥2
Чем занимается php на сайтах мы приблизительно в общих чертах поняли, теперь на сцену выходит другой важнейший участник событий - база данных.

Как вы понимаете, опять же на примере mywishbook.ru, если проект не чисто информативный, вроде одной странички с адресом, то есть много неких данных, которые нужно где-то хранить.

Когда mywishbook.ru только появился на свет, какие данные нужно было сохранять?

Прежде всего, вас, пользователей.

Чтобы человек мог воспользоваться Книгой Желаний или сделать запись в личном дневнике, нужно зарегистрироваться на сайте, то есть, ввести в форму логин, емейл, имя и пароль.

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

Сайт должен эти данные куда-то сохранить. Можно просто в файл, но это крайне неудобно, поэтому для хранения используют базы данных.

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

Создать базу данных можно легко в специальной программе или sql-запросом вида:
CREATE DATABASE mywishbook;

Все, база для проекта есть, можно создавать таблицы.

Какие таблицы нам понадобятся? Зависит от того, что будет на проекте, но их всегда можно будет добавить или изменить.

Но продумать все равно архитектуру важно на начальном этапе.

Вишбук 2010 года предполагал две возможности: ведение личного дневника и ведение Книги Желаний.
Значит, нам нужны таблицы типа diary и wishbook.
Кто будет вести записи? Пользователи. Нам нужна еще таблица users.

Какая таблица тут должна быть первой, с чего все начинается? Думаю, вы догадались, что с пользователей. Нет пользователей, нет и никаких дневников и желаний.

Запросы для нашей базы пишутся на sql, особо сложного ничего нет в этом языке, по крайней мере, поначалу. Нам актуальны в 90% случаев будут запросы вида создать таблицу, вставить в нее запись, выбрать запись (или несколько), удалить запись. И все.

Создаем таблицу.
CREATE TABLE table_name
(
column_name_1 column_type_1,
column_name_2 column_type_2,
...,
column_name_N column_type_N,
);
column_name_1 название колонки
column_type_1 тип колонки

Я предположила, что мне нужны будут следующие данные:

id - уникальный идентификатор пользователя
login - логин
psswd - пароль, всегда в зашифрованном виде, поэтому я ваши пароли тоже не знаю
name - имя по желанию
email - емейл, раньше был необязательный, я думала, что не все захотят оставлять емейл, желания и дневники все же очень личное, но со временем оказалось, что нельзя без этого поля
inserted - дата добавления записи

Заведем таблицу с пользователями (это все можно не писать руками, а делать в программе, но понимать нужно):

CREATE TABLE users (
id bigint(20) NOT NULL,
login varchar(256) NOT NULL,
psswd varchar(256) NOT NULL,
name varchar(256) DEFAULT NULL,
email varchar(256) DEFAULT NULL,
inserted timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP);

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

Заполнить таблицу данными тоже можно через программу, или таким запросом руками:

INSERT INTO users`(`id, login, psswd, name, email, `inserted`)
VALUES (1,'testoviy login','y6fgf6gc#d','тестовое имя','xxx@yandex.ru','2010-09-01 06:35');

Понятно, что в запросе происходит, или расшифровать?


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

Вот вы зарегились https://www.mywishbook.ru/users/register, т.е. ввели данные в форму, они улетели на сервер, php проверил (с моей помощью, конечно, я определаю правила), все ли там правильно и сделал запрос в базу на вставку новой записи. Т.е. это php отправит запрос вида INSERT INTO users ...

На скриншоте пример, как выглядит таблица users (упрощенная, сейчас там побольше всего).
В программе я ее вижу точно так же,
👍12
как вы сейчас в экселе. Просто таблица. Ну с фейковыми данными, конечно.

До этого момента понятно?

#урокиphp #sql #базаданных
👍11
Ну и табличка users наша, я ее экспортировала в эксель, никаких ABC колонок нет, это экселевское, просто для наглядности
👍11
Продолжаем. Еще немного про базы и данные, и перейдем к php.

Вот у нас есть табличка users. Я ее переделала, спасибо за вопрос в комментах, будет запись, которую мы вставляли с testoviy login, и логины с емейлами должны быть уникальными

Вот пользователь приходит снова на сайт, хочет добавить желания.

Он вводит логин и пароль, php обратится к базе с запростом:

отдай мне пользователя, у которого логин = 'testoviy login' и пароль = 'пароль'

на sql это выглядит как

SELECT * FROM users WHERE login='testoviy login' AND psswd='пароль'

Вернее, поскольку пароли зашифрованы, то php зашифрует ваш пароль, он превратится в некие 7436a45e3b818216c98ba73577850d3c
и запрос будет выглядеть как

SELECT * FROM users WHERE login='testoviy login' AND psswd='7436a45e3b818216c98ba73577850d3c'

Если запись такая есть, то происходит авторизация, и пользователь заходит в свой личный раздел. Если нет, то ему выведется ошибка.

Табличка с желаниями выглядит так:

CREATE TABLE wishbook (
id bigint(20) NOT NULL,
userid bigint(20) NOT NULL,
inserted timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
itemtext longtext CHARACTER SET utf8mb4,
result varchar(20) NOT NULL DEFAULT 'new',
)

Здесь все понятно?

userid - это id пользователя из таблицы users. По нему мы сможем понять, какие желания выводить пользователю. Чтобы именно его были, а не чьи-то)
itemtext - собственно, само желание.
CHARACTER SET utf8mb4 - эта опция необязательна, я ее добавила не так давно, чтобы можно было добавлять смайлики, и база их не резала.
result - лучше, конечно, цифровые коды тут зашить, быстрее будет работать, но написано давно, поэтому так. Тут статусы - новое желание, исполнилось, не исполнилось.

А дальше - все тоже самое. Пользователь добавляет желание, оно записывается в базу, когда он переходит на страницу "Все мои желания" (или как она там), то php дергает базу с запросом:

SELECT * FROM wishbook WHERE userid=1;

Вопросы?
Продолжаем, или это уже слишком?))))

#урокиphp #sql #базаданных
👍11
Для мотивации.

Девушка-программист – какие плюсы?

Я вообще не понимаю, если честно, почему в программировании так мало девушек. Я на своем длинном рабочем пути встречала только двух девушек, которые программировали на php, одна из них даже не в счет, студенка, которая работала у нас три недели. И еще пара фронтендщиц. Все!

Об остальных девушках только слышала, как бы они есть, но где? На десятки коллег-мужчин за 20 лет – одна девушка, кроме меня.

Но почему? Мужчины часто меня спрашивают: “А что, ты реально программистом работаешь?”
И я всегда недоумеваю. Ну да, а что в этом такого? Это не аццкий физический труд, который женщине не под силу.

И в силу дефицита у девушек-программистов есть свои бонусы.

Лично я особенно ценю следующие:

1. Если вы девушка, то став программистом, получите невероятное количество внимания. В этой профессии 99% программистов – мужчины. Они будут относиться к вам настороженно, скептически, но как только убедятся, что вы чего-то в самом деле понимаете и можете, будут вам бесконечно помогать, подтягивать, подсказывать, даже настраивать вам компьютер)
2. На собраниях, скорее всего, вы тоже будете единственной девушкой, зато никаких женских интриг и сплетен не встретите. А технари бывают очень веселыми ребятами.
3. Вас будут уважать не только коллеги, но и другие люди. Потому что “программист” во многих вызывает подсознательное равенство со словом “умный”. Эта профессия кажется сложной, а значит, вы сразу получите +100 очков.
4. Если вам актуальны изменения в личной жизни, то именно в этой работе вы встретите много умных, перспективных, неплохо зарабатывающих ребят. И минимум конкуренции.
5. Да хотя бы придите на форум по программированию и задайте вопрос по какой-то проблеме. Сразу увидите, что желающих помочь много. Мой бывший начальник женился на девушке, которая что-то спросила на таком форуме)

А прочее, удаленка, востребованность, доход - это уже само собой.
Но плюс еще, можно в декрете этим заниматься. И мозги тренируются заодно, и нескучно.

#мотивация
11👍1👏1😁1
Что только для вас не сделаешь. Даже на hh.ru сходила, чтобы заставить вас читать 😁
🔥7👍1👏1
300тыс до вычета налогов подойдет, или нафиг их, пусть сами налоги платят? 😃
🔥8🤣5❤‍🔥1
Вопрос. Что будет, если логины у нас в базе не уникальные? А если емейлы? А если имя?
👍5
Программист должен заранее предусмотреть, как будет использоваться приложение.
На вишбуке пользователи входят, используя логин. Значит, он должен быть уникальным. Иначе, как вы верно заметили, он может получить чужие данные.
Для этого еще на этапе регистрации нужна проверка, что такого логина еще не было. Ну и для подстраховки на уровне базы мы повесим unique уникальный ключ на поле login, чтобы база сама нас развернула, если мы ей одинаковый логин предложим.
Что касается емейла, на вишбуке и почти везде он уникальный тоже, чтобы упростить задачу по восстановлению пароля и просто идентифицировать пользователя. У нас сейчас марафоны автоматом по емейлу активируются.
А имя. В нашем случае мы по нему не ищем пользователя, никакой особой нагрузки у поля нет, чисто для юзабилити используем, чтобы написать приветствие или типа того ⤵️

Но! Уникальность полей определяется приложением. По-разному бывает.
👍10
Такой проект, как Книга Желаний 2010го года, с двумя разделами, регистрацией пользователей, при наличии верстки можно запрограммировать за несколько дней.
Собственно, я сейчас и более сложные (но типовые, админка, вывод новостей по категориям с тегами) проекты делаю за несколько дней. А вот с крупными проектами приходится возиться годами) вернее, это уже не столько разработка, сколько поддержка и новые разделы.

Как разрабатываются проекты?

Если у вас есть заказчик, то он должен предоставить техническое задание. То есть, максимально подробно описать, что он хочет видеть, т.е. что должен уметь делать сайт.
А вы, исходя из этого, продумать архитектуру проекта, какие таблицы будут и т.д., а потом разбить на несколько основных задач, которые позже раздробить на много маленьких задач. Их будет выполнять просто и понятно. И прогресс виден, и научитесь видеть, сколько времени какие задачи у вас занимают.
Но важно не жалеть времени на изначальное планирование.

Если заказчика нет, все равно желательно для себя расписать последовательность шагов.
Я уже не помню, что и как писала 15 лет назад, когда вишбук пришел мне в голову, но могу предположить общую схему.

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

Дальше что может делать пользователь? Восстанавливать пароль, если забыл, менять свои данные (кроме логина, это тоже можно разрешить, но я не стала), вести дневник и Книгу Желаний.
Пока больше ничего не может, но нам этого достаточно для начала.

Значит, список задач и подзадач выглядит приблизительно так:
1. Пользователь
1.1 Страница регистрации пользователя.
1.2 Авторизация пользователя.
1.3 Восстановление пароля.
1.4 Страница личного кабинета, где можно поменять свои данные.

2. Раздел "Он-лайн дневник"
2.1 Страница добавления записи (на ней же можно удалить запись)
2.2 Страница со списком всех записей (с постраничной навигацией) и фильтрами (например, показать записи с 2.06.2022 по 4.09.2023)
2.3 Страница редактирования записи

3. Раздел Книга Желаний
3.1 Страница добавления записи (на ней же можно удалить запись)
3.2 Страница со списком всех записей (с постраничной навигацией) и фильтрами (например, показать только неисполненное)
3.3 Страница редактирования записи

Каждую задачу желательно расписать подробнее, какие поля должны быть в форме, какие проверки этой формы (это важный этап, об этом отдельно поговорим), вплоть до текстов.
Если заказчик подробно не расписал, это остается на усмотрение разработчика, но все же здравый смысл и безопасность в его ответственности.

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

Как база будет готова, можно начинать создавать страницы.
Как я уже писала, php у нас занимается в основном перекладыванием данных. Принял форму, проверил, положил в базу, достал обратно.

#архитектурапроекта #проектирование
👍6🔥41
Что касается php, то у любого php-программиста есть верный друг, русскоговорящий, что немаловажно.

Это https://www.php.net

А точнее, https://www.php.net/manual/ru/

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

Документация начинается с основ синтаксиса, и я частично ее использую, частично от себя вам наболтаю.

Весь основной код мы пишем в файлах .php.

Когда PHP обрабатывает файл, он ищет открывающие и закрывающие теги, такие как <?php и ?>, которые указывают PHP, когда начинать и заканчивать обработку кода между ними.

Классический пример:

<?php

echo "Hello world";

?>
На экране выведется строка Hello world

Пока понятно?

#урокиphp #синтаксис
👍13🔥4
Ну что, продолжим знакомиться с синтаксисом php.

Как сравнили в комментариях, изучение языка программирования в чем-то схоже с изучением иностранного языка. Но на мой вкус проще.

PHP-скрипт - это перечень инструкций. Кстати, отделяются инструкции точкой запятой. Напомню, как это выглядит:

<?php echo "Какой-то текст"; ?>

Эта инструкция означает: выведи текст "Какой-то текст"

При разработке часто приходится комментировать код. Что такое комментарии?
Это текст, который не будет обрабатываться и выводиться.

Комментарии помечаются двойным слешом // или #
Многострочные отделяются так:
/* здесь комментарий */

Это нужно, чтобы пояснить, что делает определенный код, либо когда вы не хотите удалить кусок кода, но пока не хотите, чтобы он работал.

<?php
echo "Это тест"; // Это однострочный комментарий в стиле C++
/* Это многострочный комментарий
ещё одна строка комментария */
echo "Это ещё один тест";
echo "Последний тест"; # Это комментарий в стиле оболочки Unix
?>

Здесь все понятно? Я каждый раз спрашиваю, чтобы самой понимать, насколько подробно расписывать, ну и чтобы еще раз объяснить, если непонятно, чем потом латать дыры)

Напишите в комментариях, что выведется на экран пользователю?

#урокиphp #синтаксисphp
5