«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2021/08/14 16:49:04  №2127927 1
Как писать в ООП стиле?
Допустим регистрация на сайте
Ответы: >>2128001 >>2132017
Аноним 2021/08/17 11:54:54  №2130597 2
screen.jpg (161, 616x712)
712x616
Кликал на все подряд но не запустился терминал sql, что я делаю не так?
Ответы: >>2130605 >>2131978
Аноним 2021/08/17 19:00:36  №2131115 3
Как кликом кнопки на фронте запустить процесс на сервере?
Ответы: >>2131285 >>2131989
Аноним 2021/08/18 14:29:38  №2131978 4
>>2130597

Клиент mysql - это консольная программа. У нее нет окошек или кнопок. Его надо запускать не кликом мышкой, а из консоли.

Консоль это такое черное окно куда ты вводишь команды и компьютер их выполняет. Чтобы узнать, как ей пользоваться, прочти короткий урок https://github.com/codedokode/pasta/blob/master/soft/cli.md

Сначала тебе надо открыть консоль. Это удобнее всего сделать, если открыть папку на твоем скриншоте и ввести в адресную строку cmd и нажать Enter. Тогда консоль откроется с уже выбранной папкой. Если запускать ее другим способом, то тогда придется вручную перейти в папку с mysql.

Появится черное окно с мелкими буквами. Настрой более удобный размер шрифта. Затем набери mysql и должен либо запустится клиент mysql, либо вывестись сообщение об ошибке. Если все ок, то ты можешь набирать запрос к базе данных и тебе будет выведен его результат.
Ответы: >>2131996 >>2132388
Аноним 2021/08/18 14:37:11  №2131989 5
>>2131115

Тебе надо добавить на страницу яваскрипт-код. Этот код должен ждать события нажатия кнопки, и при нажатии кнопки отправлять аякс-запрос, например на URL /start-process.php

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

Если ты ориентируешься только на самые современные браузеры, то для отправки запроса можно использовать функцию fetch(). Если хочешь поддерживать любой браузер за последние лет 15, то используй объект XMLHttpRequest.

Тогда при нажатии кнопки отправится запрос на сервер и сервер запустит скрипт start-process.php. А этот скрипт уже может делать что угодно.
Ответы: >>2132388
Аноним 2021/08/18 14:58:59  №2132017 6
>>2127927

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

Для удобной работы с такими сущностями и придуманы объекты. Ты сначала создаешь класс, описывая, какие есть у сущности свойства (поля) и действия (методы). А потом создаешь объекты этого класса.

Например, если ты хочешь добавить в магазине новый товар, ты создаешь объект класса Товар. Затем вызываешь у него методы задатьНазвание, задатьЦену, и заполняешь все его свойства. Затем ты обращаешься к объекту СохранятельТоваров и с его помощью сохраняешь товар в базу данных.

А когда тебе надо вывести информацию о товаре, ты с помощью СохранятеляТоваров загружаешь объект товара из БД, и вызывая его методы вроде узнатьЦену, узнатьНазвание выводишь информацию о нем на странице.

Но классы годятся не только для представления сущностей. Можно создавать объекты, у которых нет каких-то особых свойства, а есть только действия. Например: РегистраторПользователей. У него нет свойств, а есть только метод "создать нового пользователя".

Думаю, ты уже видишь, как ООП можно использовать для регистрации пользователей. Мы можем создать такие классы:

- Пользователь (User) со свойствами: email, хеш пароля, дата регистрации, имя итд. И методами: задать Email, узнать Email, задать пароль, проверить пароль итд.
- СохранятельПользователей (UserTableGateway) - это класс, который умеет сохранять объекты пользователя в БД или извлекать из нее. У него будут методы вроде вставитьПользователяВБазу, обновитьПользователяВБазе, найтиПользователяПоEmail.
- ВалидаторПользователя (UserValidator) - это класс, который получает данные из формы регистрации пользователя и проверяет их на правильность: что все поля заполнены, что email похож на настоящий email итд.

Заметь, что мы не пихаем все в один класс, а для каждой задачи используем отдельный класс. У каждого класса своя зона ответственности.

В принципе, это достаточный минимум, но можно при желании добавить еще другие классы. Например, класс ДанныеФормыРегистрации, объект которого хранит данные, которые введены в форму. В некоторых фреймворках Форма и ПолеФормы тоже сделаны в виде объектов (то есть, форма регистрации это объект и каждое поле в ней тоже объект).

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

Далее я тебе советую посмотреть задачу про студентов из шапки. К ней есть подробные комментарии, и она научит тебя, как использовать ООП для работы с формами регистрации, базой данных: https://github.com/codedokode/pasta/blob/master/student-list.md

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

Ответы: >>2132168 >>2132168 >>2132388
Аноним 2021/08/18 17:48:20  №2132160 7
Как адекватно работать с MySQL через JS? Я имею в виду, как получать данные из базы в JS и обратно (без Node.js)? Совсем запутался нахуй, помогите устаканить в голове.

Есть данные в БД, как до них достучаться и, скажем, засунуть их в квиз? Квиз написан на JS, и я хочу при вводе данных в поля в WordPress передавать вопросы в вопросник JS. Я сделал так - непосредственно на странице сайта, которую я натягиваю на WP, объявил переменную в JS и засунул в нее переменную php, которая содержит массив данных полей. Получилась строка. Строку я превратил в массив и далее вычленил элементы уже в вопросник. Но сука, я чувствую, что так не должно быть. То, как я это сделал, это блять неправильно и вообще неадекватно.

Думаю что есть вариант через fetch, но как через него достучаться до БД?

Подскажите плз нормальный человеческий способ, как в реальной практике происходит взаимодействие JS с базой данных (скажем, на WP).

Ответы: >>2132239 >>2133308
Аноним 2021/08/18 18:04:52  №2132168 8
>>2132017
>>2132017
>Пользователь (User) со свойствами: email, хеш пароля, дата регистрации, имя итд. И методами: задать Email, узнать Email, задать пароль, проверить пароль итд.
- СохранятельПользователей (UserTableGateway) - это класс, который умеет сохранять объекты пользователя в БД или извлекать из нее. У него будут методы вроде вставитьПользователяВБазу, обновитьПользователяВБазе, найтиПользователяПоEmail.
Я так понимаю класс Save это отдельный файл и тут нужны будут намспейсы и use ?
Ответы: >>2132243
Аноним 2021/08/18 19:14:07  №2132239 9
>>2132160

Давай разобьем вопрос на несколько частей:

1) как передать в JS начальные данные при загрузке страницы. Тут правильным способом будет получить эти данные в PHP при загрузке страницы, преобразовать их в JSON и явно передать в нужную функцию:

<script>
initQuiz(<?= json_encode($data); ?>);
</script>

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

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

Иногда этот подход не подходит, так как у нас скрипт загружается асинхронно и функцию initQuiz мы вызвать не можем (так как скрипт еще не загрузился). В таком случае мы можем создать внутри страницы "остров" с JSON-данными. Скрипт при загрузке находит в теле страницы этот остров и берет данные из него:

<script id="quizData" type="application/json">
<?= json_encode($data); ?>
</script>

Обрати внимание на атрибут type: он говорит, что это не яваскрипт, а JSON и браузер не будет пытаться его выполнить.

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

2) Как в процессе работы скрипта получать или отправлять данные без перезагрузки страницы? Тут нужны аякс-запросы. Ты отправляешь запрос на сервер, а там PHP-скрипт его обрабатывает как нужно. Логично отправлять данные на сервер как данные формы, а принимать с сервера ответ в формате JSON.

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

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

Ответы: >>2132388 >>2132968
Аноним 2021/08/18 19:17:46  №2132243 10
>>2132168

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

Почитай рекомендации и следуй им.

Что касается неймспейсов - выбор за тобой. Если у тебя весь проект состоит из 5 файлов, ты можешь просто сложить их в одну папку и не использовать неймспейсы. Если проект больше, то стоит добавлять подпапки и неймспейсы.
Ответы: >>2132388
Аноним 2021/08/19 00:17:45  №2132388 11
>>2131978
>>2131989
>>2132017
>>2132239
>>2132243

Анончик, я хоть и мимо проходил, но хочу сказать тебе спасибо за такие развёрнутые ответы, они очень контрастируют с ответами-смехуёчками других ананасов. Множество тебе чаёв!