2015-12-12 49 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 } 
}