单击按钮时通过运行php脚本刷新表内容

时间:2012-08-20 13:19:33

标签: php soap

我有以下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>

结果页面应该类似于

result

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

1 个答案:

答案 0 :(得分: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并单击按钮时,这会给出

result2

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