Ответы пользователя по тегу JavaScript
  • Почему в консоли вылетатет ошибка unexpected character at line 1 column 1 of the JSON data, когда поля формы не заполнены?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    1. Ошибки взаимодействия с сервером надо смотреть не в консольке, а во вкладке Сеть. Там в подвкладке Response или как она там в переводе называется, вы увидите ответ сервера.

    2. Как правильно написал в комментариях ProjectSoft, проблема в том, что вы определяете переменные только при успешном прохождении проверки. Но если данных нет, то ни переменной $name, ни $phone, ни $message в коде не существует. И в итоге РНР вам законно выводит ошибку при попытке обратиться к этим переменным.
    По итогам проверки переменная должна быть объявлена в любом случае. Это можно сделать либо с помощью конструкции else, либо как показано в примере ProjectSoft, с помощью тернарного оператора.
    Переменную $OK можно определить как результат логического выражения, без всяких условий
    $OK = $name and $phon and $message;
    Но сама по себе она не имеет смысла. У вас результатом кода $name and $phon and $message УЖЕ является логическое выражение, которое вы УЖЕ можете подставить в условие. И зачем это делать с пересадкой - непонятно.

    3. При этом надо понимать, что и isset, и empty в данном случае это подавление ошибок. И без нужды их лучше не применять. А просто написать
    $name = $_POST['name'];
    $phone = $_POST['phone'];
    $message = $_POST['message'];

    Тогда РНР сможет сообщить и об ошибках при составлении формы.

    Но чтобы эти ошибки зря не лезли при запросе файла, лучше весь код целиком заключить в проверку типа
    if ($_SERVER['REQUEST_METHOD'] === 'POST')

    Как вариант - проверять каждую переменную на существование и пустоту отдельно, и выдавать соответствующие ошибки, типа "Поле name не отправлено", "Поле name не заполнено", и т.д.
    Ответ написан
  • Как с помощью php отдать react?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Как я уже не раз говорил, чтобы получить ответ на свой вопрос, надо сначала разобраться с кашей у себя голове.
    Вас же на первом же шаге унесло не туда.

    jQuery уже в прошлом

    это правда

    его теснят фреймворки типа react

    а это уже чушь собачья
    jQuery - это был костыль, позволявший выполнять определенные задачи, которые было невозможно или слишком сложно выполнить на чистом JavaScript. Но уже больше 10 лет нужда в этом костыле полностью отпала
    К фреймворкам типа React этот костыль не имеет никакого отношения вообще.
    Для замены jQuery вам нужно просто выучить Яваскрипт.

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

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

    Но повторюсь, это только если вам действительно нужен реакт. А для замены jquery он не нужен.

    404й редирект

    для начала, такой вещи, как "404й редирект" в природе не существует.
    Бывает либо редирект (коды ответа 3хх), либо 404. Два НТТР статуса вы никогда не отдадите.

    при этом сама по себе дурацкая задача "если пользователь пришёл с определенного ip и ему нужно отдать 404" вообще никакого отношения к обсуждаемому вопросу не имеет. И решать ее по-хорошему надо на уровне веб-сервера. Если вообще надо, в чем есть большие сомнения.
    Ответ написан
    4 комментария
  • Как решить ошибку отправки почты, с использованием PHPMailer?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Чтобы исправить ошибку, надо прочитать, что в ней написано.
    Для этого надо найти на сервере лог ошибок.
    Если вы не знаете, что такое сервер или лог ошибок, то попробуйте поискать в панели управления хостингом.
    На худой конец обратитесь в службу поддержки хостинга, чтобы они вам прочитали текст ошибки
    Ответ написан
  • Как передать параметр объекта класса PHP в js?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    1. РНР теги пишутся не так
    2. Если вы хотите что-то передать, то передаваемое значение надо вывести, а не просто написать.
    3. Данные из РНР в JS всегда передаются через json_encode
    if(<?= json_encode($boris->step) ?> == true)
    Ответ написан
  • Отправка вложений через php mailer. Почему не отправляются изображения?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    При решении любых задач необходимо применять логику. Желательно не женскую, а формальную. Булеву.
    Если вам "очень нужна форма", то она у вас уже есть. Задача решена.

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

    Эту задачу тоже надо решать с помощью логики.
    Разбивая её на отдельные элементы, приступая к следующему только после того, как выполнили предыдущий.
    При отправке файлов из формы у вас несколько этапов
    1. Отправка отправка одного файла из формы в РНР скрипт.
    2. Отправка файла, гарантированно имеющегося на сервере, на почту.
    3. Если отправка одного файла работает, а нужно больше, то добавить нужное количество и вернуться к п.1

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

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

    Плюс я в принципе не понимаю, зачем вам такая архаичная форма общения с клиентами.
    Все нормальные сайты давно завели себе Телеграм, или на худой конец вотсап, куда клиентам куда проще закинуть любые изображения прямо с телефончика, чем колупаться в браузере
    Ответ написан
  • Что быстрее SQL или Javascript?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    В общем, чтобы не издеваться над девушкой, объясним на пальцах.

    Во-первых, заголовок у вопроса чудовищно некорректный. Это все равно что спросить, "что быстрее - пылесос или стиральная машина?"
    Во-вторых, ответ на вопрос "производить ли обработку данных в БД или же запросить все данные в клиентское приложение и обрабатывать там" совершенно очевиден: обработку данных следует производить в общем случае только в БД. Она для этого и придумана. Чтобы обрабатывать значительные объемы данных.

    Да, js тоже "может" обрабатывать большие объемы данных.
    Но чтобы значительный объем данных обработать, его сначала надо передать, полностью забив канал между сайтом и базой
    Чтобы значительный объем данных обработать, его надо сначала проиндексировать. Причем делать это каждый раз, а не использовать уже имеющийся набор индексов
    Чтобы значительный объем данных обработать, надо иметь значительный объем памяти или упасть из-за её недостатка
    Чтобы значительный объем данных обработать в многопоточном режиме (а сайт как раз является многопоточной системой), все вышеперечисленное надо умножить на количество посетителей сайта - при каждом запросе перегонять весь массив данных, выделять память, индексировать, считать. Если же вы оставляете все данные в памяти приложения, то их тогда надо как-то синхронизировать с БД. То есть вы себе собираете кучу проблем на пустом месте.

    Несомненно, из любого правила есть исключения. И бывают ситуации, когда приходится считать в приложении.
    Но на вопрос в общем виде ответ будет совершенно однозначный. Не "может так, может сяк", а только в БД.
    Ответ написан
    9 комментариев
  • Ошибка при JSON.parse как исправить?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    А вы можете объяснить, зачем вам здесь вообще JSON.parse?
    И почему нельзя написать просто
    var dataJSONArray = <?= json_encode($u,JSON_UNESCAPED_UNICODE) ?>;
    Ответ написан
    1 комментарий
  • Как сохранить старое значение для input type file?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Никак.

    Причем в данном конкретном случае это еще и бессмысленно.
    Админу не нужна картинка, чтобы отредактировать пост. Она уже загружена, и заново ее загружать просто не имеет смысла.
    Ответ написан
    6 комментариев
  • Как сохранить функцию php при срабатывании скрипта js?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Ответ написан
    Комментировать
  • Разделение ответственности или производительность?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Мне кажется, что все прочитали только заголовок, а на текст поста никто не обратил внимания. Как обычно
    А там-то и лоснится самый ЖЫР:

    Но в этом случае мне придется выполнить 2 запроса к базе данных

    То есть вся "проблема" тут из-за каши в голове клиента, который откуда-то взял, что во втором варианте у него будет не два запроса, а один. Ну то есть понятно откуда - очередной разрабончик баз данных, который SQL видел только в кино, а база данных для него - это вот это вот prisma create.

    И только из-за этих нелепых страхов он ломает всю логику и сервис юзеров у него начинает лазить в БД постов. Что и является здесь проблемой. А не какие-то, опять же, дурацкие страхи про дублирование вызова нотификации.
    Ответ написан
    6 комментариев
  • Как лучше сделать добавление корзины/избранного?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Все очень просто.
    Надо всего лишь различать зарегистрированных и незарегистрированных пользователей.
    Для первых ничего не пишется на клиента, а только в базу.
    Для вторых ровно наоборот - в базу писать нечего, поэтому все сохраняется локально.
    Плюс нужна процедура мержа с клиента в базу, когда в момент авторизации что-то есть локальное. По уму надо у пользователя спросить, "вот такие-то товары были в корзине, добавить их к вашей?" Но многие магазины не заморочиваются и просто сливают локальную корзину с той что лежит в базе.
    Ответ написан
    9 комментариев
  • Как удалять файлы с сервера по условию, что они не используются в текущий момент?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    В таких условиях надо делать вытесняющий кэш.
    Если при запросе нового файла выясняется, что для него нет места, то удаляется самый старый файл.

    Хотя конечно непонятно, как это всё поможет в ситуации, когда заходят посмотреть сразу 20 разных событий.
    Ответ написан
    1 комментарий
  • Как правильно написать regex?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Если я правильно понял вопрос, то тут не нужна никакая регулярка.
    разбить по запятым, потом взять первый символ каждого элемента - это будет либо плюс, либо минус, либо ошибка
    оставшиеся элементы пробить по заранее прописанному массиву.

    А чтобы получить помощь с регуляркой, надо запрашивать именно помощь: то есть делать что-то самому, и просить чтобы тебе помогли. А не просить, чтобы все сделали за тебя. Тогда это называется не помощь, а благотворительность.
    Ответ написан
  • Почему не срабатывает php файл?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Ответ написан
    Комментировать
  • Как сохранить токен в php-файле и его получать через js?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Делать запрос не напрямую из js, а обращаться к php скрипту на сервере. В РНР делать запрос курлом и возвращать ответ обратно в js.
    Примеров что в сети, что конкретно на этом сайте - миллионы. Вот свежий
    Если не знаете РНР и не готовы учиться, то за готовым кодом на https://freelance.habr.com/
    Ответ написан
  • Как сделать файл авто перескачиваемым после его обновления?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    самое тупое решение
    <script src="/path/file.js?t=<?= filemtime($_SERVER['DOCUMENT_ROOT'].'/path/file.js') ?>">
    Ответ написан
    9 комментариев
  • Что лучще использовать для api call JS или PHP?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    если для вызова не нужна никакая авторизация или токены, то разумеется на JS
    во всех остальных случаях разумеется на РНР
    Ответ написан
    Комментировать
  • Как правильно отправить данные из формы POST-запросом и записать их в бд?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Главная беда задавателей вопросов на форуме в том, что они всегда задают совершенно не тот вопрос, который их интересует.
    Судя по коду, автор прекрасно знает, как "отправить данные из формы POST-запросом и записать их в бд". Спрашивается - зачем задавать этот вопрос? Загадка.

    Ведь настоящий вопрос звучит "Я написал код, который отправить данные из формы POST-запросом и записать их в бд, но он не работает. Как понять, по какой причине он не работает, чтобы я мог это исправить?" - ну разве не так?

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

    Для mysqli это делается командой
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

    Которая пишется перед коннектом.
    Для РНР всё стандартно - error_reporting всегда в E_ALL плюс display_errors в 1 на домашнем компьютере.

    И после этого РНР сам всё расскажет и покажет. И где опечатка в запросе, и любые другие ошибки.
    Ответ написан
    Комментировать
  • Что нужно отправить на сервер, чтобы php понял это, как null?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Вопрос неверный. В стиле анекдота "у таракана уши в ногах".
    Разумеется, сервер всё прекрасно видит.
    чтобы РНР принял null, надо отправить на сервер null. Удивительно, но факт.
    var_dump(json_decode('{ 
        "name": ["i", "b"], 
        "val": [null]
    }',1));


    А вот что там делает код на этом сервере - никто не знает.
    И обращаться надо к автору кода. А не в Спортлото

    Скорее всего там либо array_filter, либо isset/empty($array['val']);
    Ответ написан
    4 комментария
  • Почему не выполняется условие в JavaScript?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Не понимаю, что сложного в том, чтобы зайти в документацию. И увидеть там
    dataType
    Type: String
    The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html).

    То есть мало того что у нас древнее и никому не нужное жквери, так оно ещё и играет в угадайку.

    Вместо которой надо явно написать, в каком формате мы данные ожидаем.

    Плюс из пхп лучше не плеваться непонятными словами, а отправлять в нормальном формате, например json.

    Ну и PHP код - это конечно, ужас.
    Ответ написан
    Комментировать