0

フォーム入力を XML データとしてデータベースに送信する Wordpress で formbuilder プラグインを使用しています。次に、そのデータを取得して、別のページに表示したいと思います。これを達成するために simpleXML を試し始めましたが、今は道のりにぶつかっています。

データベースの各行に表示される XML データは、次の形式に従います。

<form>
    <FormSubject>Report</FormSubject>
    <FormRecipient>****@***.com</FormRecipient>
    <Name>admin</Name>
    <Department>test</Department>
    <Value>1000</Value>
    <Comments>test</Comments>
    <Page>http://***.com</Page>
    <Referrer>http://****.com</Referrer>
</form>

以前は、データベースにある同じマークアップの XML 文字列から simpleXML を使用して必要なデータを取得できましたが、データベースの各行のループでこれを行うにはどうすればよいですか?

次のコードを実行すると、wordpress はエラーがあることを意味する空白のページを表示します。

<?php
global $wpdb;
$statistics = $wpdb->get_results("SELECT * FROM wpformbuilder_results WHERE form_id = '00000000000000000001';");
echo "<table>";
foreach($statistics as $statistic){
$string = $statistic->xmldata
$xml = simplexml_load_string($string);
$Name = (string) $xml->Name;
$Department = (string) $xml->Department;
$Value = (string) $xml->Value;
$Comments = (string) $xml->Comments;

echo "<tr>";
echo "<td>".$statistic->timestamp."</td>";
echo "<td>".$Name."</td>";
echo "<td>".$Department."</td>";
echo "<td>".$Value."</td>";
echo "<td>".$Comments."</td>";
echo "</tr>";
}
echo "</table>";

?>
4

2 に答える 2

2

あなたが行方不明です; 5行目

$string = $statistic->xmldata

する必要があります

$string = $statistic->xmldata;

wp-config.php ファイルで WP_DEBUG 定数を有効にすることを検討する必要があります。次のコードを wp-config.php の /* の直前に挿入します。ハッピーブログ。*/

define('WP_DEBUG', true);

/* That's all, stop editing! Happy blogging. */

デバッグに関するその他のヒントについては、コーデックスをお読みください

Formbuilder ユーザー カスタム関数を使用して、formbuilder_xml_db_results クラスで XML データを抽出します。

function xmltoarray($xml)
    {
        $xml = trim($xml);

        $match = "#<([a-z0-9_]+)([ \"']*[a-z0-9_ \"']*)>(.*)(</\\1>)#si";
        $offset = 0;

        if(!preg_match($match, $xml, $regs, false, $offset)) {
            return($xml);
        }

        while(preg_match($match, $xml, $regs, false, $offset))
        {
            list($data, $element, $attribs, $content, $closing) = $regs;
            $offset = strpos($xml, $data) + strlen($data);

            $tmp = $this->xmltoarray($content);
            $result[$element] = $tmp;

        }

        return($result);
    }

コードでその関数を定義し (global $wpdb の前; その関数がクラスで定義されているのと同じ名前を恐れる必要はありません)、次のようにコードを変更します。

<?php
global $wpdb;
$statistics = $wpdb->get_results("SELECT * FROM wpformbuilder_results WHERE form_id = '00000000000000000001';");
echo "<table>";
foreach($statistics as $statistic){
$xml = xmltoarray( $statistic->xmldata );
$Name = (string) $xml['form']['Name'];
$Department = (string) $xml['form']['Department'];
$Value = (string) $xml['form']['Value'];
$Comments = (string) $xml['form']['Comments'];

echo "<tr>";
echo "<td>".$statistic->timestamp."</td>";
echo "<td>".$Name."</td>";
echo "<td>".$Department."</td>";
echo "<td>".$Value."</td>";
echo "<td>".$Comments."</td>";
echo "</tr>";
}
echo "</table>";

?>

編集: $xml['Comments'] を $xml['form']['Comments'] に編集し、類似のものにしました

于 2013-01-27T09:25:22.657 に答える
0

を使用してXML文字列からバックスラッシュを削除することで修正しましたstripslashes()

于 2013-01-27T10:59:45.197 に答える