Ответы пользователя по тегу PHP
  • Что за проблема с кодировкой?

    gscraft
    @gscraft
    Программист, философ
    А зачем Вы открываете такой URL? В этом есть необходимость? Символы похожи на эстонский алфавит. Если у Вас прямая необходимость работать именно с эстонским алфавитом, то, конечно, так и прописывайте в регулярном выражении. Должно сработать и [a-ü]+, [A-Ü]+ при модификаторе //u, если же это строки, хранимые в базе данных, то просто пользуйтесь юникодом и ищите наряду с обычными (зависит от базы данных, конечно). Но, лучше использовать латинские символы в ссылках.
    Ответ написан
  • Как вставить php в js?

    gscraft
    @gscraft
    Программист, философ
    Браузер не может видеть PHP-код. В общем случае механизм работает так: браузер отправляет запрос серверу, сервер передает PHP на обработку интерпретатору языка (могут быть и иные ситуации, языки, платформы и способы общения сервера с обработчиком), интерпретатор в свою очередь возвращает в поток вывода сервера результат в том или ином формате (HTML, text, JSON, двоичные файлы, не важно), результат отправляется в двух "порциях": заголовки и тело. JavaScript выполняется непосредственно в браузере, и может обращаться к серверу, например, вызывая PHP-сценарии. Браузер ничего не знает о PHP коде, JavaScript ничего не знает о PHP коде, и наоборот, сервер ничего не знает о работе страницы в браузере. Обмен идет запросами браузера к серверу.

    Таким образом, Вам нужно убрать PHP код из JavaScript тела, вывести этот код в отдельный сценарий, и обратиться к нему с помощью Ajax. У вас уже есть обращение к серверу с fetch('send.php') вот тут Вы передаете на сервер данные формы. Код, который Вы хотите выполнить в index.php, Вам нужно выполнять в send.php , этот код должен вернуть JSON, который получится в этот блок: .then(result => {

    Как вернуть JSON из send.php — отдельная задача, у вас же PHP код возвращает переадресацию, и будет ли она принята и выполнена Вашим движком запросов к серверу — библиотекой fetch. Возможно, Вам нужно вручную выполнить переадресацию, получив заголовок в response.headers.get('Location') или найдя другое решение;
    Ответ написан
    Комментировать
  • Как настроить отправку через phpmailer?

    gscraft
    @gscraft
    Программист, философ
    Илья Филонов, давайте разберемся.

    # Тут Вы говорите Apache, следующее (RewriteRule) правило при условии, если адрес не равен /maintenance.html :
    RewriteCond %{REQUEST_URI} !/maintenance.html$
    # Тут говорите, следующее правило при условии, если адрес не равен 171.33.255.61:
    RewriteCond %{REMOTE_ADDR} !^171.33.255.61
    # Тут обязываете Apache ВСЁ, что не подпадает под правила выше, переадресовать на /maintenance.html
    RewriteRule $ /maintenance.html [R=302,L]


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

    Вам нужно перенаправить все, кроме mail.php на заглушку, так?

    1 вариант, это с помощью фронт-контроллера PHP, адресуя все на скрипт index.php стандартным для движка способом, в начале которого определять наличие $_POST / mail, и все, что кроме, отдавать на mainstance.html: header('Content-Type: text/html'); die(file_get_contents(__DIR__ . '/mainstance.html')); При этом, в htaccess у вас остаются стандартные правила (WP так и так адресует на index.php).

    2 вариант, это оставить Вашу версию .htaccess, но добавить правило RewriteCond %{REMOTE_URI} !/mail.php$ (или RewriteCond %{REQUEST_FILENAME} !mail.php, тут уж пробуйте сами в Вашем контексте)

    3 вариант, найти плагин для WordPress для заглушки mainstance, поверьте, такие решения там есть, как есть плагины для оправки формы контактов.
    Ответ написан
    5 комментариев
  • Как получить id из ключа массива?

    gscraft
    @gscraft
    Программист, философ
    Вопрос наверное в том, как получить ключ? Т.к. в Вашем случае получить идентификатор из подобной строки можно любым удобным способом:
    $id = null;
    reset($array); // надежнее обнаружить нужный ключ перебором и последующей проверкой
    $key = key($array);
    $match = null;
    if ( preg_match('/^id:(\d+)/', $key, $match) ) $id = (int) $match[1];
    Ответ написан
    1 комментарий
  • Ответ в REST API?

    gscraft
    @gscraft
    Программист, философ
    Если речь про RESTful, нет, указывать status=false/true необязательно. Вы можете возвращать сразу же тело результата. Статуса требует JSON API, но оно ориентировано как раз на передачу всей информации в теле результата, то есть, не использует статусы HTTP (или используются гибридные способы).
    Ответ написан
    Комментировать
  • Изучения Larvel без ооп?

    gscraft
    @gscraft
    Программист, философ
    А что за боязнь ООП? Это же не черт в табакерке, и не сложнее, чем функциональное программирование, например. Хотя сложность во многом зависит от инструмента (конкретного API, языка), в чистом виде научиться мыслить объектами, имеющими действия-методы и данные-свойства не составит труда, и это не сложнее чем, например, мыслить передачей структур данных в глобальном порядке или по цепочке. А понять, как в общих чертах работают классы и начать использовать их с Laravel — хорошая практика для изучения. Тем более у Laravel (почти) все в порядке со следованием хорошим практикам и паттернам разработки. Ну и надо понимать, что без ООП в наше время осталось совсем немного прикладных инструментов, т.е. знания пригодятся.
    Ответ написан
    4 комментария
  • Как лучше реализовать?

    gscraft
    @gscraft
    Программист, философ
    Судя по всему Вам ни к чему полиморфная связь, ведь уже есть отдел => сотрудник, этого достаточно. Тип (или уникальность отдела) принадлежат самому отделу. Если сотрудник может быть дополнительно связан с другими отделами, то связь можно вынести в отдельную таблицу department_employee: department_id, employee_id, которая сможет хранить несколько связей. Если некий отдел является первичным, то в эту таблицу может быть добавлено поле, с ограничением unique department_employee: employee_id, is_primary (при возможности null), ну или в таблице employee — primary_department_id.
    Ответ написан
    3 комментария
  • Как добавить текст из HTML страницы в базу данных?

    gscraft
    @gscraft
    Программист, философ
    Если в счетчике количество символов, то на сервере это количество лучше посчитать снова: https://www.php.net/manual/ru/function.mb-strlen.php , если речь об иных данных вне формы, то тут два пути: если форма передается без AJAX, с помощью JS дублировать эти данные в input type="hidden" value="...", если передаете с помощью AJAX, то напрямую передать на этапе сбора данных формы в FormData / JSON-тело.

    Вам нужно осваивать PHP с азов. Это может и решите, но дальше двигаться все равно придется и будет непросто. А осваивать есть смысл, это пригодится в жизни технаря в любом случае: https://www.php.net/manual/ru/tutorial.forms.php

    PS https://jsfiddle.net/GennadyS/rmdnjtLu/3/
    Ответ написан
    Комментировать
  • Принято ли пропускать роуты верхним регистром?

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

    Полезной может оказаться информация от поисковиков (остальное — вопрос эстетики). Например, https://yandex.ru/support/webmaster/search-results...

    С технической стороны важно лишь одно: получится ли найти ресурс в зависимости от регистра? Например, если часть параметров адреса ищется в базе, переходят поссылке /user/personalname , а в базе хранится "PersonalName".
    Ответ написан
    1 комментарий
  • Как взять первых пять чисел из массива и вывести пять записей соответствующих id?

    gscraft
    @gscraft
    Программист, философ
    $numbers = array_slice(explode('|', trim($q, '|')), 0, 5);
    $ids = implode(', ', $numbers);
    $sql = ' ... WHERE id IN(?);'; // подставьте $ids , зависимо от вашего SQL-драйвера

    Как выполнить привязку значения, отдельный вопрос, например, если используете PDO, то PDOStatement::bindValue или PDOStatement::bindParam
    Ответ написан
    8 комментариев
  • Нужно ли защищать обработчик формы (PHP файл) от прямого доступа?

    gscraft
    @gscraft
    Программист, философ
    Нет, файл-PHP защищать не нужно, если веб-сервер передает его на обработку PHP-интерпретатору. То есть, если сценарии вообще работают, а не выдается содержимое PHP-файла при запросе по адресу ваш-сайт/action_page.php. Большинство PHP-движков спокойно хранят настройки в PHP-скриптах.

    Однако, если данные очень критичны и есть боязнь сбоя сервера (например, администратор допустит случайную и временную ошибку, открыв доступ к содержимому скриптов, исключив интерпретацию), можете вынести все приватные данные за пределы action_page.php, например, в action_page_handler.php , в свою очередь находящийся за пределами публичной директории, и подключаемый, скажем, как require __DIR__ . '../../scripts/action_page_handler.php'; (и это будет единственная строчка в action_page.php, которую кто-либо когда-либо сможет увидеть).
    Ответ написан
    Комментировать
  • Таймаут при отправке сообщения через SMTP с помощью PHPMailer?

    gscraft
    @gscraft
    Программист, философ
    Попробуйте настройку безопасного соединения:
    $mail->SMTPSecure = 'tls';
    Ответ написан
    5 комментариев
  • Почему файл не отправляется php?

    gscraft
    @gscraft
    Программист, философ
    Причин может быть несколько, от неработающей в силу настроек хостинга mail(...), до ошибки в заголовках или в теле запроса, при этом Вы не приводите ошибки, и нет возможности воспроизвести Ваш опыт в целом. Проще всего избежать ошибки, и это правильный путь, воспользоваться одной из библиотек, как автоматизирующей построение тела/заголовков запроса, так и позволяющей работать с SMTP напрямую. Посмотрите на packagist.org , например, пакеты nette/mail , zendframework/zend-mail , swiftmailer/swiftmailer . Если не работали с composer, непременно стоит с ним разобраться: getcomposer.org
    Ответ написан
    Комментировать
  • Как убрать повторное изображение?

    gscraft
    @gscraft
    Программист, философ
    В коде попросту дважды ссылка на одно и тоже изображение, на самой картинке и на заголовке "Фото галерея", подпадающая под фильтр движка: $("a[rel^='prettyPhoto']") , prettyPhoto подбирает в галерею все изображения по данному критерию. Либо задайте иное изображение на заголовке, либо уберите rel="prettyPhoto[images]" , вручную открыв галерею ($.prettyPhoto.open , полагаю).
    Ответ написан
    Комментировать