2015-12-12 2 views
1

пожалуйста, извините мой английский. Я создал форму _POST, где пользователь может заполнить два числовых поля, которые затем умножаются и делятся на некоторые константы для вывода результата при отправке формы. Я выполняю форму на той же странице, используя ($ _SERVER ["PHP_SELF"]); Код очень простой и работает на серверах, где я его тестировал (при необходимости можно скопировать и вставить).выполнить форму PHP на странице Wordpress

Теперь я хотел бы использовать этот маленький «калькулятор» на странице Wordpress (я использую тему Avada), но я полностью потеряю, как заменить ($ _SERVER ["PHP_SELF"]).

Я пробовал: - скопировать и вставить весь фрагмент кода, как это в кодовом блоке слитого строитель> Я получаю сообщение об ошибке - хранение переменных и вычислений в отдельном файле .php будет называться - жёстко или используя bloginfo() funtion - создание новой страницы шаблона со встроенным кодом

... но когда я отправляю форму, я перенаправляюсь только в дополнительный файл php или на домашнюю страницу.

Я пытаюсь сделать что-то совершенно не так?

Любая помощь очень ценится, как я действительно не понимаю, как это может работать ...

Большое спасибо!

+0

Вот хорошее обсуждение того, почему она не может быть такой хорошей идеей, чтобы оставить он пустой, хотя он будет работать. Это открывает вам угон и атаку. http://stackoverflow.com/questions/1131781/is-it-a-good-practice-to-use-an-empty-url-for-a-html-forms-action-attribute-a – Steve

ответ

0

Я только что проверил это на шаблоне страницы WordPress.

Убедитесь, что он не вставлен в петлю!

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

Вы также должны быть в состоянии include свой расчетный листа:

include "calculations.php";

Вот некоторые соображения безопасности, связанные с использованием includeshttp://green-beast.com/blog/?p=144

PHP_SELF пошел в index.php, как это мастер шаблон.

Вам необходимо использовать <?php echo $_SERVER['REQUEST_URI']; ?>, если вы хотите использовать это для действия, чтобы он работал полностью программно, но жесткий URL-адрес должен работать (не самая лучшая практика, хотя и действительно работает).

Если вы используете его, вам необходимо использовать встроенный escape-код WordPress для URI для его дезинфекции, поскольку вы будете «получать» все, что в нем есть.

 <form name="form" action ="<?php echo esc_url($_SERVER['REQUEST_URI']); ?>" method="post"> 

, который эффективно дает вам:

 <form name="form" action ="http://the full url of the page this script is on/" method="post"> 
     <input type="number" name="number_in"> 
     <input type="submit" name="submit"> 
     </form> 

     <?php $result = (int) $_POST['number_in'] * 4; 
     echo $result; 
     ?> 

Если вы хотели, чтобы он последовательно добавить к результату на каждой форме представления, вам может понадобиться, чтобы получить немного Trixy со скрытым входом или переменной сеанса - вы может просто использовать:

$_SESSION['number_in'] = $_SESSION['number_in'] + $result; 
    echo $_SESSION['number_in']; 

, чтобы сохранить текущий результат совокупных результатов, поскольку сеансы уже активны для WordPress.

Использование (int) выполняет преобразование типа - если вы знаете, что это будет целое число, в противном случае должно выполняться float. Это должно исключать необходимость дальнейшей очистки ввода. Может быть удобной ссылкой на php.net. http://php.net/manual/en/language.types.integer.php

Это объясняет основное использование скрытых входов.

Get and echo inputs from textarea repeatedly

Вы могли бы, в принципе, просто оставить тха действие пустым, и он представит себе action="", но здесь хорошая дискуссия о том, почему она не может быть такой хорошей идеей, чтобы сделать это. Хотя он будет работать, он откроет вас для захвата и атаки. stackoverflow.com/questions/1131781/

Хотя вы можете запустить код PHP в WordPress, должны ли вы или нет, это совсем другое обсуждение ...

+0

Спасибо большое! очень информативный, я просмотрел встроенный escape-код WordPress для URI, и я узнал что-то новое поверх решения моей проблемы! Я столкнулся с другим предложением, когда я был на нем: просто оставьте поле действия пустым - ссылки URI, которые пустые указывают на текущий ресурс. Это сработало для меня – SusPec

0

Будем надеяться, что вы правильно поняли.

Вы не можете запустить PHP внутри сообщения Wordpress или страницы. Это не так построено.

Создайте короткий код внутри своего functions.php. Это позволяет вам вызывать функции из сообщений и страниц. Возможно, вы их видели. Похоже, что [gallery limit="5"] http://www.smashingmagazine.com/2012/05/wordpress-shortcodes-complete-guide/

Если ваш ДЕЙСТВИТЕЛЬНО хочет запустить PHP внутри вашей страницы. Отъезд https://wordpress.org/plugins/insert-php/

+0

Большое вам спасибо для вашей помощи! Я создал shortcode в functions.php, так просто, но я вообще об этом не думал! – SusPec

1
It is better to write your php code in functions.php and create shortcode of that and use that shortcode in page. 
Ex. 


add_shortcode('multiple_enquiry_form', 'enquiry_form'); 
function enquiry_form(){ 
    if (is_user_logged_in()) { 
     if(isset($_POST['enquiry_form_submit'])){ 
    } ?>  

    <div class="col-md-4"> 
     <form method="post" name="enquiry_form" action='<?php echo get_permalink(get_page_by_path('enquiry')); ?>'> 
      <div class="form-group"> 
      <label for="">Project</label> 
      <select id='proGroup' name="proGroupForm"> 
      <option value="">- Select Project -</option>     
      </select> 
      </div> 
      <div class="form-group"> 
      <label for="">Message</label> 
      <textarea name="enq_message"></textarea> 

      </div> 
      <div class="form-group"> 
      <label for="">Contact</label> 
      <input type="text" name="contactNumber" placeholder="Contact Number"> 
      </div> 
      <div class="form-group"> 
      <label for="">From</label> 
      <input type="text" name="from_date" class="datepicker" placeholder="From Date"> 
      </div> 
      <div class="form-group"> 
      <label for="">To</label>  
      <input type="text" name="to_date" class="datepicker" placeholder="To Date"> 
      </div> 
      <div class="form-group"> 
      <input type="submit" name="enquiry_form_submit" value="Send" ng-click="submitted=true"> 
      </div> 
     </form> 
    </div> 
    <?php } 
} 
Смежные вопросы