在Wordpress页面上执行PHP表单

时间:2015-12-12 02:19:04

标签: php wordpress forms

请原谅我的英语 - 我创建了一个_POST表单,用户可以在其中填写两个数字字段,然后乘以并除以一些常量,以在提交表单时输出结果。我正在使用相同的页面执行表单     ($ _SERVER [ “PHP_SELF”]); 代码非常基础,适用于我测试它的服务器(如果需要可以复制和粘贴)。

现在我想在Wordpress页面上使用这个小“计算器”(我正在运行Avada主题),但我完全不知道如何替换($ _SERVER [“PHP_SELF”])。 / p>

我试过了: - 复制和粘贴整个片段,就像它在融合构建器的代码块中一样>我收到一个错误 - 将变量和计算存储在要调用的单独.php文件中 - 硬编码或使用bloginfo()函数 - 使用嵌入的代码创建新模板页面

...但是当我提交表单时,我只被重定向到附加的php文件或主页。

我是否想做一些完全错误的事情?

我非常感谢任何帮助,因为我真的不明白这是如何起作用的......

非常感谢!

3 个答案:

答案 0 :(得分:1)

最好在functions.php中编写php代码并创建其短代码并在页面中使用该短代码。例如:

I/AmazonHttpClient: Unable to execute HTTP request: Unable to resolve host "cognito-identity.us-east-1.amazonaws.com": No address associated with hostname
                                                                  java.net.UnknownHostException: Unable to resolve host "cognito-identity.us-east-1.amazonaws.com": No address associated with hostname
                                                                      at java.net.InetAddress.lookupHostByName(InetAddress.java:400)
                                                                      at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)
                                                                      at java.net.InetAddress.getAllByName(InetAddress.java:220)
                                                                      at libcore.net.http.HttpConnection.<init>(HttpConnection.java:71)
                                                                      at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
                                                                      at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:351)
                                                                      at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:86)
                                                                      at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
                                                                      at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308)
                                                                      at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:460)
                                                                      at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:441)
                                                                      at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282)
                                                                      at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232)
                                                                      at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80)
                                                                      at libcore.net.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:188)
                                                                      at libcore.net.http.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:280)
                                                                      at com.amazonaws.http.UrlHttpClient.writeContentToConnection(UrlHttpClient.java:128)
                                                                      at com.amazonaws.http.UrlHttpClient.execute(UrlHttpClient.java:65)
                                                                      at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:353)
                                                                      at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:196)
                                                                      at com.amazonaws.services.cognitoidentity.AmazonCognitoIdentityClient.invoke(AmazonCognitoIdentityClient.java:533)
                                                                      at com.amazonaws.services.cognitoidentity.AmazonCognitoIdentityClient.getId(AmazonCognitoIdentityClient.java:344)
                                                                      at com.amazonaws.auth.AWSAbstractCognitoIdentityProvider.getIdentityId(AWSAbstractCognitoIdentityProvider.java:170)
                                                                      at com.amazonaws.auth.AWSEnhancedCognitoIdentityProvider.refresh(AWSEnhancedCognitoIdentityProvider.java:76)
                                                                      at com.amazonaws.auth.CognitoCredentialsProvider.startSession(CognitoCredentialsProvider.java:537)
                                                                      at com.amazonaws.auth.CognitoCredentialsProvider.getCredentials(CognitoCredentialsProvider.java:370)
                                                                      at com.amazonaws.auth.CognitoCachingCredentialsProvider.getCredentials(CognitoCachingCredentialsProvider.java:440)
                                                                      at com.amazonaws.auth.CognitoCachingCredentialsProvider.getCredentials(CognitoCachingCredentialsProvider.java:76)
                                                                      at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4198)
                                                                      at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1618)
                                                                      at com.amazonaws.mobileconnectors.s3.transferutility.UploadTask.uploadSinglePartAndWaitForCompletion(UploadTask.java:174)
                                                                      at com.amazonaws.mobileconnectors.s3.transferutility.UploadTask.call(UploadTask.java:74)
                                                                      at com.amazonaws.mobileconnectors.s3.transferutility.UploadTask.call(UploadTask.java:40)
                                                                      at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
                                                                      at java.util.concurrent.FutureTask.run(FutureTask.java:137)
                                                                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
                                                                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
                                                                      at java.lang.Thread.run(Thread.java:856)

答案 1 :(得分: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/

答案 2 :(得分:0)

我刚在WordPress页面模板上测试了这个。

确保它没有放入循环内!

我已经进行了一个简单的计算,当您向其提交数字输入时,结果会被回显 - 显然可能会有一个跨度或者它需要的任何东西。计算可以包含你想要的任何东西。

您还应该能够include计算表:

include "calculations.php";

这些是围绕使用includes http://green-beast.com/blog/?p=144

的一些安全注意事项

PHP_SELF转到index.php,因为那是主模板。

如果您想使用<?php echo $_SERVER['REQUEST_URI']; ?>进行操作以使其以编程方式完全正常工作,则需要使用REQUEST_URI,但硬编码的网址应该有效(尽管不是最佳做法且 <form name="form" action ="<?php echo esc_url($_SERVER['REQUEST_URI']); ?>" method="post"> 确实有效)

如果您使用它,您需要使用内置的WordPress转义符来对URI进行清理,因为您将“获取”其中的任何内容。

      <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;
      ?>

有效地为您提供:

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

如果您希望它在每个表单提交中连续添加到结果中,您可能需要使用隐藏的输入或会话变量获得一些trixy - 您可以使用:

action=""

保持累积结果的运行记录,因为会话已经为WordPress激活。

使用(int)执行类型转换 - 如果你知道它将是一个整数 - 否则float应该这样做。这应该避免需要进一步清理输入。可能是php.net http://php.net/manual/en/language.types.integer.php

上的一个方便参考

这解释了隐藏输入的基本用法。

Get and echo inputs from textarea repeatedly

原则上,您可以将该行动留空并将其提交给自己{{1}},但这里有一个很好的讨论,为什么这样做可能不是一个好主意。虽然它会起作用,但它会让你劫持并注入攻击。 stackoverflow.com/questions/1131781/

虽然你可以在WordPress中运行php代码,但无论你是否应该进行完全不同的讨论......