2

我有以下 php 并希望知道如何在单击提交按钮时使用新的输入值重新运行脚本的底部。

我觉得我的脚本只需要最后润色,但是当您认为另一种方法更可取时,请不要不提建议。

我确实知道如何将 javascript 分配给按钮,但在这里我希望只重新运行底部代码(创建soap客户端,调用soap Web服务并将xslt应用于生成的XML)并希望在php中拥有它(主要是因为我不'不知道 ECMA 脚本中的等价物,但也因为脚本负责将结果表放在我希望拥有它的地方)。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
    <title>Get element details</title>
    <style type="text/css">
        @import url("Swift.css");
    </style>
</head>
<body>
    <br/>
<?php # httpCallExample2.php

    echo '<form action="httpCallExample2.php" method="post">
        <fieldset>
            <legend>Get element details</legend>
            <p>
                Element: <input name="element" type="text" size="12" maxlength="12" />&nbsp; &nbsp; <button type="submit" name="submit" value="update">Get details</button>
            </p>
        </fieldset>
    </form>
    ';
    echo '<br/>';

    $soapReq = new SoapClient('http://www.webservicex.net/periodictable.asmx?WSDL');
    $input = array ("ElementName" => $element);

    $result = $soapReq ->
        __soapCall("GetAtomicNumber",
            array(
                'parameters' => $input
            )
        );

    $XML = new DOMDocument();
    $XML -> loadXML ( $result -> GetAtomicNumberResult );

    $xslt = new XSLTProcessor();
    $XSL = new DOMDocument();
    $XSL -> load('showResults.xslt');
    $xslt -> importStylesheet( $XSL );

    echo $xslt -> transformToXML( $XML );

?>
</body>
</html>

不要介意css文件(只包含一些表格布局的东西),但这是我使用的xslt:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
    <xsl:template match="/">
        <table>
            <thead>
                <tr>
                    <th colspan="2">SOAP results</th>
                </tr>
            </thead>
            <tbody>
                <xsl:for-each select="//NewDataSet/Table/*">
                    <tr>
                        <td><xsl:value-of select="name()"/></td>
                        <td><xsl:value-of select="."/></td>
                    </tr>
                </xsl:for-each>
            </tbody>
        </table>
    </xsl:template>
</xsl:stylesheet>

结果页面应该类似于

结果

Carbon我希望在输入元素被赋予值并单击提交按钮后填充底部。

4

1 回答 1

0

我曾希望有人能帮助我,但我总是不能不管它,继续尝试寻找解决方案。我做到了:诀窍是重新打​​开 php 文件并将元素值传递给它,可以使用表达式 $_POST['element'](或 $_GET['element'],当使用 get 方法而不是 post 时)访问它.

我达到的最终结果如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
    <title>Get element details</title>
    <style type="text/css">
        @import url("Swift.css");
    </style>
</head>
<body>
    <br/>
<?php
    echo '<form action="httpCallExample2.php" method="post">
        <fieldset>
            <legend>Get element details</legend>
            <p>
                Element: <input name="element" type="text" size="12" maxlength="12" />&nbsp; &nbsp; <input type="submit" value="Get details"/>
            </p>
        </fieldset>
    </form>
    ';
?>
    <br/>

<?php
    if (!empty($_POST['element'])) {
        $soapReq = new SoapClient('http://www.webservicex.net/periodictable.asmx?WSDL');
        $input = array ("ElementName" => $_POST['element'];

        $result = $soapReq ->
            __soapCall("GetAtomicNumber",
                array(
                    'parameters' => $input
                )
            );

        $XML = new DOMDocument();
        $XML -> loadXML ( $result -> GetAtomicNumberResult );

        $xslt = new XSLTProcessor();
        $XSL = new DOMDocument();
        $XSL -> load('showResults.xslt');
        $xslt -> importStylesheet( $XSL );

        echo $xslt -> transformToXML( $XML );
    }
?>
</body>
</html>

首先只产生输入表单,当输入(例如)potassium并单击按钮时,这给出

结果2

当然,可以再次将发布的值输入到输入元素中。

于 2012-08-20T21:11:50.320 回答