2

次のphpがあり、送信ボタンがクリックされたときにスクリプトの下部が新しい入力値で再実行されるようにする方法を知りたいです。

私のスクリプトには最後の仕上げが必要だと思いますが、別のアプローチが望ましいと思われる場合は、提案を差し控えないでください。

ボタンに JavaScript を割り当てる方法は知っていますが、ここでは一番下のコード (soap クライアントの作成、soap Web サービスの呼び出し、結果の XML への xslt の適用) のみを再実行し、それを 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'] (または、post の代わりに get メソッドを使用する場合は $_GET['element']) を使用してアクセスできる要素の値を渡すことです。 .

私が到達した最終結果は次のとおりです。

<!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 に答える