• Почему не работает форма php?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    maks843: не будет так шаблон работать, WordPress не понимает, что это за шаблон. Почитайте Template Hierarchy. У вас форма принудительно уходит на mail.php и передает ей данные полей через $_POST. Именно в этом файле нужно проводить обработку формы. Или же, правильнее, для самой формы action указать пустой - тогда форма будет отправлять данные на ту же страницу, где она размещена (перезагрузка страницы по сути). Далее определите, какой шаблон эта страница использует и в нем уже добавляйте обработчик, только обязательно через проверку if( isset($_POST['name']) && isset($_POST['email']) && isset($_POST['message']) ). Кстати, у вас textarea в коде формы стоит без атрибута name, каким образом вы надеетесь эти данные получать? Также, у вас поле для Subject имеет тип type="subject" - такого не существует.

    Кроме того, ряд ваших IFов лучше переписать как тернарные операторы или if/else, unset делать не нужно. Ну и сами данные $_POST еще надо валидировать и фильтровать, у вас сейчас нет никакой защиты от передачи вредоносных данных.

    <div class="window-container fadeInDown animated">
    <button class="close">Закрыть</button>
        <h1>Напишите мне письмо</h1>
                <form action="" method="post">
                    <input class="first" type="text" name="name" placeholder="Имя" required><br>
                    <input class="first" type="email" name="email" placeholder="Email" required><br>
                    <input class="first" type="text" name="subject" placeholder="Тема"><br>
                    <textarea class="input textarea" name="message" placeholder="Сообщение" required></textarea><br>
                    <input type="submit" class="button" value="Отправить">
                </form>
    </div>


    if( isset($_POST['name']) && isset($_POST['email']) && isset($_POST['message']) ) {
    
        $name = sanitize_text_field( $_POST['name'] );
        $email = sanitize_email( $_POST['email'] );
        $subject = ( !empty($_POST['subject']) ) ? sanitize_text_field( $_POST['subject'] ) : 'Default subject';
        $message = sanitize_text_field( $_POST['message'] );
    
        $to = 'your@email.com';
        $headers = 'From: ' . $name . ' <' . $email . '>' . "\r\n";
        $send = wp_mail( $to, $subject, $message, $headers ); // returns true/false
    
        echo ( true == $send ) ? 'Success message' : 'Error message';
    
    }


    Проверку, заполнены ли все обязательные поля, надо делать javascript'ом, плюс у вас есть атрибут required, тут уже браузер убедится, что поля заполнены. Также, не мешало бы валидировать формат email еще до отправки данных на сервер (или использовать HTML5 тип input type="email").

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

    Stalker_RED
    @Stalker_RED
    Мне кажется, вам нужен шаблонизатор. Или дополните ваш вопрос, объясните что вы пытаетесь сделать с этим куском, а еще лучше - что вы хотите в итоге получить.
    Ответ написан
    1 комментарий
  • Скрипт для разгадывания капчи?

    @Beltoev
    Живу в своё удовольствие
    Если бы были готовые решения, то упомянутые выше сервисы давно бы прекратили свою работу.
    Что вы подразумеваете под простой? Примеры? И чем не нравятся платные, учитывая низкую стоимость?
    Ответ написан
    6 комментариев
  • Как узнать alias страницы, и чтобы потом передавать её как параметр?

    DevMan
    @DevMan
    получаем URL из $_SERVER[ 'REQUEST_URI' ]
    дальше или парсим сами или, например, pathinfo( $url, PATHINFO_FILENAME )
    Ответ написан
    4 комментария
  • Как избежать прописывания полных путей?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    ничего никуда не пишет

    Пишет, еще как, просто вы не знаете в какую директорию :)

    Абсолютный путь все равно нужен, но его легко получить через __DIR__:
    file_put_contents(__DIR__.DIRECTORY_SEPARATOR."t.txt","test\r\n");

    Теперь файл будет сохраняться в ту же директорию, где лежит скрипт.
    Ответ написан
    7 комментариев
  • Как сохранить картинку на сервер из base64?

    BuriK666
    @BuriK666
    Компьютерный псих
    У вас указан асболютный путь.
    $FPPath = '/img/'.$FPName;
    Либо пишите полный от корня сервера, либо относительный
    $FPPath = './img/'.$FPName;
    Ответ написан
    1 комментарий
  • Должен ли знать php-разработчик популярные CMS?

    @kirill-93
    Невозможно все знать, и всегда найдется работодатель/заказчик, которому понадобиться, чтобы вы знали что-то еще. Не должен, я считаю, все подряд знать. Но уметь быстро вникнуть и внести правки нужно
    Ответ написан
    Комментировать
  • Как убрать ограничения с браузера?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Chrome тут ни при чем - www.xdebug.org/docs/display
    Ответ написан
    Комментировать
  • $$$ что значит в php?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Это называется переменная с переменным именем (variable variable).

    class Foo {
      public $deepest = 'Limbo';
      
      public function __toString()
      {
        return 'deep';
      }
    }
    
    $deeper = 'deepest';
    $deep = 'deeper';
    $b = new Foo();
    
    echo $b->$$$b;


    Выражение выполняется справа налево:
    1. $b->$$($b) превращается в $b->$$($b->__toString()), поскольку именно так ведут себя объекты, когда на них пытаются натравить echo;
    2. $b->$$($b->__toString()) превращается в $b->$(${'deep'}), именно это значение возвращает метод __toString класса Foo, инстансом которого является $b;
    3. $b->$(${'deep'}) превращается в $b->$($deep), это как раз вызов переменной при помощи значения из другой переменной;
    4. $b->$($deep) превращается в $b->${'deeper'}, поскольку именно такое значение находится в переменной $deep;
    5. $b->${'deeper'} превращается в $b->($deeper);
    6. $b->($deeper) превращается в $b->deepest;
    7. наконец, получается значение свойства 'deepest' из $b, а там как раз хранится 'Limbo', оно и выводится в echo.

    dd178a12658f41679b71884846669132.jpg
    Ответ написан
    8 комментариев
  • Как реализовать рекурсивный запуск PHP на хостинге?

    UAPEER
    @UAPEER
    UAPEER Hosting Solutions Англия
    Куда проще будет сменить хостинг или купить VDS, что сейчас есть наиболее популярным. Иначе после решения проблемы с 30 сек, вас начнут "трясти" за нагрузку.
    Предлагаю свои услуги в Англии: UAPEER Hosting Solutions
    Ответ написан
    Комментировать
  • Есть ли аналог Curl на PHP который не требует установки?

    PQR
    @PQR
    Лучшая библиотека для http запросов на PHP на сегодняшний день - это Guzzle. Работает без curl, если тот не доступен: guzzle.readthedocs.org/en/latest/overview.html#req...

    Но она с ООП интерфейсом.
    Ответ написан
    Комментировать
  • Bitrix, изменение компонента catalog.section.list?

    @qlr Автор вопроса
    А ведь надо было всего лишь почистить кэш...
    Ответ написан
    1 комментарий
  • Как полностью выйти из функции с рекурсией и циклом бесконечной вложенности?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    как погружался в рекурсию - так и вылезай.
    по цепочку запускал - по цепочке и выходи.
    return search($whatever);
    Ответ написан
    2 комментария
  • Что лучше табы или пробелы?

    Один таб, определенно. Лаконичнее, красивее и четче, чем засорять пространство пробельными символами (да и поставить 3 пробела вместо 4х гораздо легче, чем один таб вместо ни одного таба).
    Табы - для отступов, пробелы - для пробелов между словами. Семантика-с.

    А если табы воспринимаются не так, как кому-то хочется - вэлкам в настройки.

    P.S. А для соблюдения чьих-то стандартов достаточно установить правило замены таба на 4 пробела в сборщике проектов, и будет счастье.

    P.P.S. Сейчас, в 2к20, радикально изменил свое мнение - пробелы выигрывают по всем показателям. Скажу так, джуны любят табы, а сеньоры отдают должное пробелам.
    Ответ написан
    2 комментария
  • Frontend или Backend?

    north_leshiy
    @north_leshiy
    Руководитель направления разработки
    1. Back-end с опытом фронтенда - это хорошо
    2. Back-end оплачивается больше, сама сфера напорядок больше. У нас в компании разница в senior back/front правда небольшая - в 15-20%
    3. Все таки это разные вещи, и творчество проявляешь по разному =)
    Back-end это более хардкорная разработка) Для серьезных бородатых дядей) Например результат труда ты своего визуально не подкрепишь) Какая нибудь нетривиально анимированная SVGшка не будет радовать твой взор)
    Но зато ты имеешь шанс получить кайф от того что написал какую нибудь автоматизированную интеграцию двух больших баз данных, или запилил нереально крутую архитектуру проекта =)

    В общем на ЗП и условия не смотри - попытайся понять что тебе больше нравится =)
    И если нет вариантов работать в текущей компании по интересному тебе направлению, если живешь в достаточно большом городе и выбор есть - то лучше смени место работы)
    Ответ написан
    6 комментариев
  • Как поставить высоту блока div в зависимость от ширины?

    Зачем скрипты? Можно ведь обычным css'ом обойтись:
    jsfiddle.net/qso14y3k

    Один минус - 2 дополнительные обёртки для каждого блока. Но это не смертельно. Фокус этот работает по стандартам, так что работать должен везде.
    Также эта техника входит в toolkit, который написан ребятами, которые написали Singularity.
    Ответ написан
    2 комментария
  • Книги по php с описанием работы с PDO и SQLite на русском языке?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    По SQLite не нужна книга, если планируется использовать PDO. Там, где есть PHP, всегда есть и нормальная база данных, и нет смысла пользоваться игрушечной.

    По PDO не нужна книга, поскольку это очень маленький API, буквально из 5 функций.
    Всё что нужно знать про PDO:

    1. Любые переменные должны попадать в запрос только через плейсхолдер. Поэтому все запросы, в которых участвуют переменные, должны выполняться через prepare/execute: сначала запрос подготавливается через prepare(), причем вместо переменных должны стоять плейсхолдеры, такие ? или такие :name. А переменные потом передаются через execute.
    $pdo  = new PDO ( ... );
    $stmt = $pdo->prepare("SELECT * FROM users WHERE id=?");
    $stmt->execute([$_GET['id']]);
    $user = $stmt->fetch();

    2. Для получения данных есть три функции
    - fetch() получает строку. аналог mysql_fetch_array()
    - fetchAll() получает массив строк. Синтаксический сахар для while ($row = mysql_fetch_array()) (эта функция, кстати - единственная, по которой стоит почитать мануал. у неё есть несколько интересных кунштюков)
    - fetchColumn() - синтаксический сахар для $row = mysql_fetch_row(); $flag = $row[0]

    3. Все остальные тонкости и нюансы описаны по-русски здесь: www.phpfaq.ru/pdo

    4. Особые надстройки над PDO не нужны, но иногда хочется исправить пару неудобных вещей. Например, с помощью www.phpfaq.ru/pdo_wrapper код из п.1 сократится до одной строчки (причем код будет работать отовсюду и сразу):
    $user = DB::run("SELECT * FROM users WHERE id=?", [$_GET['id']])->fetch();

    5. По любым другим вопросам можно спрашивать меня
    Ответ написан
    Комментировать