«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2021/08/18 17:48:20  №2132160 1
Как адекватно работать с MySQL через JS? Я имею в виду, как получать данные из базы в JS и обратно (без Node.js)? Совсем запутался нахуй, помогите устаканить в голове.

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

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

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

Ответы: >>2132239 >>2133308
Аноним 2021/08/18 19:14:07  №2132239 2
>>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/19 12:43:31  №2132968 3
>>2132239

Спасибо. Да, фетчи когда я изучал, то создавал php файл, который как бы выступает мостом между JS и базой данных.

По поводу варианта получать данные сначала в PHP и потом их преобразовывать я тоже понял, но не понял только вот чего: что значит "php скрипт на стороне сервера"? Вот у меня есть на локалхосте условный php-файл. А на реальном сервере при переносе он точно так же и хранится? То есть мне нужен тупо php-файл обработчик?
Ответы: >>2133643
Аноним 2021/08/19 23:26:32  №2133643 4
>>2132968

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

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

"Код на стороне сервера" значит php-скрипт или, например, приложение на Node.JS.

Я написал, что в MySQL нельзя залезть JS-скриптом из браузера. Но есть базы данных, в которые залезть можно из браузера без использования PHP-кода. Это severless базы данных вроде FireBase. Но она может быть платной, и документация к ней на английском и разобраться в ней может быть непросто.
Ответы: >>2133917 >>2133997 >>2134314
Аноним 2021/08/20 10:47:18  №2133997 5
>>2133643

Немного другой вопрос был. Код на стороне сервера - в смысле, это просто php_файл? То есть вот на сервере у меня файлы сайта, и среди них есть файл обработчик.php, который занимается обработкой запросов из JS. Правильно понял?
Ответы: >>2134103 >>2134831
Аноним 2021/08/20 12:00:22  №2134103 6
>>2133997
>Код на стороне сервера - в смысле, это просто php_файл?
В простейшем случае это может быть 1 пхп файл + сервер, который обрабатывает поступающие запросы и перенаправляет к пхп файлу