• Есть php файл, при вызове которого запускается форма. Нужно эту форму разместить в виджете. Как это можно сделать?

Просмотр 15 ответов — с 1 по 15 (всего 21)
  • Установить плагин для преобразования php, html сниппетов и жаба скриптов в шорткоды, которые можно вставлять куда угодно

    https://ru.wordpress.org/plugins/search/php/

    • Ответ изменён 5 лет, 10 месяцев назад пользователем O.

    правильнее создать форму в чем-то вроде contact form 7 и в виджет ее вставить шорткодом.

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

    Смотри как создаются виджеты в ВордПресс и подключай код формы в контент виджета. Ну и виджет нужно добавить в нужный сайдбар

    вот, мой файл — как его поместить в блок или виджет?
    файл называется «polls.php», лежит в каталоге дочерней темы/
    разместил строку в футере — <?php get_template_part( 'polls' ); ?> — не выводится
    А при создании виджета мой код вызывает множественные ошибки в линиях кода — видимо php и html пересекаются
    Код:

    <?
    header('Content-Type: text/html; charset=utf-8');
    ?>
     
    <script type="text/javascript"
            src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js">
    </script>
     
    <?php
    $db=mysqli_connect("localhost","***","***","***");
    $res=mysqli_query($db,"set names utf8");
     
    $res=mysqli_fetch_array(mysqli_query($db,"SELECT max(id) FROM polls LIMIT 1"));
    $poll_id=$res[0];
     
    if (isset($_GET["poll_id"]) and is_numeric($_GET["poll_id"]) and $_GET["poll_id"]>0){
        $res=mysqli_fetch_array(mysqli_query($db,"SELECT id FROM polls
     WHERE id='".$_GET["poll_id"]."' LIMIT 1"));
        if ($res[0]!='') $poll_id=$res[0];
    }
    $poll=mysqli_fetch_array(mysqli_query($db,"SELECT id,title FROM polls
    WHERE id='".$poll_id."'"));
    ?>
     
    <style type="text/css">
        .polls{padding:10px; text-align:center; border:1px solid #EEEEEE; width:700px;}
        .poll{text-align:left; display:table; width:100%; font-size:14px;}
        .poll label{line-height:2;}
        .votes{text-align:center; background-color:#CCCCFF; border:1px solid #0033FF;
            margin:0 0 10px 0;}
    </style>
     
    <?php
    echo '<div class="polls"><b>'.$poll["title"].'?</b>';
    echo '<div class="poll" id="poll_'.$poll_id.'">';
    $res=mysqli_query($db,"SELECT id,title FROM poll_answer
        WHERE poll_id='".$poll_id."' ORDER BY id");
    while ($answer=mysqli_fetch_array($res)) echo '<label><input type="radio"
        name="item" value="'.$answer["id"].'">'.$answer["title"].'</label><br>';
    echo '<div align="center"><input type="submit" id="view_res"
        value="Посмотреть результат">';
    echo '<input type="submit" id="vote" value="Голосовать">';
    echo '</div></div></div><br>';
    ?>
     
    <script type="text/javascript">
        $(document).ready(function(){
            $(".poll input:first").prop("checked",true);
     
            $("#vote").click(function(){
                jQuery.post("polls_result.php",{poll_id:$(this).parents(".poll").attr("id").
                    split('_')[1], answer_id:$('input:checked').val()},rating_poll);});
     
            $("#view_res").click(function(){
                jQuery.post("polls_result.php",{poll_id:$(this).parents(".poll").attr("id").
                    split('_')[1]},rating_poll);});
     
            function rating_poll(data){
                $(".poll").fadeOut(500, function(){$(this).html(data).fadeIn(500);});
            }
        });
    </script>

    вот, мой файл

    Это кривуля — дыра, дырища.
    Выкиньте его и используйте плагины, если не хотите поиметь неприятностей.

    но ведь этот код работает? что в нем не так?
    и форма моя вышла по команде <?php get_template_part( 'polls' ); ?> после того как убрал header('Content-Type: text/html; charset=utf-8');.
    а этой командой почему не получается в виджете-html вызвать страницу?

    что в нем не так?

    Одного WHERE id='".$_GET["poll_id"]."' достаточно, чтобы выбросить и забыть.

    Внедрение SQL-кода — Википедия

    а этой командой почему не получается в виджете-html вызвать страницу?

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

    что в нем не так?

    Опуская такие «мелочи» как хедер — в нём прописаны данные коннекта к базе, прямые обращения к ней. Это уже.. ужас. А запросы с SQL-инъекциями, отсутствие проверок входных данных, и даже отсутствие <form> в коде говорит о том что Вы где-то нашли этот код, но совершено не понимаете что он делает и как работает.

    Никогда, НИКОГДА не тяните на сайт ничего из «инернетов». Для Вас достаточно решений в оф каталоге.

    прошу проверить и если можно поправить код в самом файле polls.php (теперь у меня форма отображается как надо через созданный виджет)
    WHERE id='".$_GET["poll_id"]."' — у меня может быть несколько опросов, они добавляются через форму, вызываемую админом (и ещё могу и прямо в базу залезть), и вызываются с помощью id (это уникальный номер для конкретного опроса, который привязан к ответам)

    отсутствие проверок входных данных

    — там не будет входных данных — только «радио-кнопки» опроса.

    А запросы с SQL-инъекциями

    — ну так всё записывается в базу
    тестовая версия — http://ipic.su/img/img7/fs/opros-test.1535472250.png

    • Ответ изменён 5 лет, 10 месяцев назад пользователем jurvrn.

    jurvrn, скажите, зачем Вы настойчиво (и регулярно) ищите себе приключений на седалищный нерв? Почему упорно не хотите воспользоваться простыми, правильными, проверенными, безопасными решениями?

    вы спрашиваете почему не хочу зависеть от плагинов и их разработчиков?

    вы спрашиваете почему не хочу зависеть от плагинов и их разработчиков?

    Если Вы боитесь зависеть от правильных решений — пишите свой движдок, пишите свои ОС, да что там — делайте свои сервера, стройте датаценты и электричество вырабатывайте. Ну и что бы уж совсем не зависеть ни от кого — делайте свой интернет.

    [ПОЧТИ ОФТОП]

    jurvrn, скажите, зачем Вы настойчиво (и регулярно) ищите себе приключений на седалищный нерв?

    Господа Sevlad и Yube!
    Не нужно быть соль категоричными в выводах. Есть такая категория людей, которые не только любят изобретать велосипеды, но и стремятся найти более лучшее решение того, что было решено до них. Это положительный процесс — самообучение, поиск, познание. В конце концов у каждого из нас когда-то было желание перевернуть мир. И это всё, в конечном итоге, идет на пользу тем, кто ищет себе проблем, для того чтобы потом их героически преодолевать.

    Но потом им жалко будет только одного — зря потерянного времени.
    [/ПОЧТИ ОФТОП]

    • Ответ изменён 5 лет, 10 месяцев назад пользователем O.
    • Ответ изменён 5 лет, 10 месяцев назад пользователем O.

    Господа Sevlad и Yube!
    Не нужно быть соль категоричными в выводах.

    Господин Spectrum_Admin!
    Если в скрипте имеется уязвимость, то она никуда не денется, независимо от категоричности указания на нее.

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

    p.s. Даже понимая бесполезность действия, стоит попытаться. Это хорошо для кармы.

Просмотр 15 ответов — с 1 по 15 (всего 21)
  • Тема «Вставка php-формы в поле виджета» закрыта для новых ответов.