2015-12-12 48 views
1

請原諒我的英文 - 我已經創建了一個_POST表單,用戶可以填寫兩個數字字段,然後乘以一些常量並將其除以一些常數,以在表單提交時輸出結果。我正在使用 ($ _SERVER [「PHP_SELF」])執行同一頁上的表單; 該代碼非常基本,適用於我測試過的服務器(可根據需要複製和粘貼)。在Wordpress頁面上執行PHP表格

現在我想在Wordpress頁面上使用這個小型的「計算器」(我正在運行Avada主題),但我完全喪失瞭如何替換($ _SERVER [「PHP_SELF」))。

我曾嘗試: - 複製和粘貼整個片段,因爲它是在融合生成器的代碼塊>我得到一個錯誤 - 存儲變量和計算在一個單獨的PHP文件被稱爲 - 硬編碼或使用bloginfo()功能 - 創建一個新的模板頁與代碼嵌入

...但是當我提交表單我只重定向到額外的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因爲這是主模板。

如果您想要使用它來使其以編程方式完全工作,但硬編碼的URL應該有效(儘管不是最佳實踐,但REQUEST_URI確實有效),您需要使用<?php echo $_SERVER['REQUEST_URI']; ?>

如果您使用它,您需要使用內置的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

你可以,原則上只留下THA動作空白,將提交給本身action=""但在這裏就是爲什麼它可能不會是這樣一個好主意,做一個很好的討論。雖然它會起作用,但它會打開你,劫持並注入攻擊。 stackoverflow.com/questions/1131781/

雖然你可以在WordPress上運行PHP代碼,你是否應該或不就是一個完全不同的討論......

+0

非常感謝!非常豐富,我查閱了URI的內置WordPress轉義,並且在解決我的問題的過程中學到了新的東西!我在處理時遇到了另一個建議:只需將操作字段留空即可 - 空白的URI引用指向當前資源。它爲我工作 – SusPec

0

讓我們希望我明白你的正確。

您不能在Wordpress文章或頁面中運行PHP。它不是以這種方式建造的。

在您的functions.php內部創建簡碼。這允許您從帖子和頁面中調用函數。你可能看過他們。看起來像[gallery limit="5"] http://www.smashingmagazine.com/2012/05/wordpress-shortcodes-complete-guide/

如果你真的想在你的頁面中運行PHP。退房https://wordpress.org/plugins/insert-php/

+0

非常感謝你您的幫助!我在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 } 
}