2008-10-29 16:33:27

三回目です。
今回はようやくブログっぽい動作になりますので、前回まででよく意味がわからなかった場合でも一度作ってみてもらえると嬉しいです。
と言ってもフォームがあれば何でもいいです。
とりあえずtext.htmlというファイルを作り、前回作ったadd.phpと同階層にアップします。ソースの中身はこんな感じに。
<body>
<form action="add.php" method="post">
<dl>
<dt>タイトル</dt>
<dd><input type="text" name="subject" size="20" value="" /></dd>
<dt>本文</dt>
<dd><textarea name="text" cols="20" rows="2"></textarea></dd>
</dl>
<button type="submit">送信</button>
</form>
</body>htmlは理解しているという前提なのでここでは割愛します。
そして、add.phpを一部だけ修正します。
<?php
//DomDocumentを呼び出す
$dom = new DomDocument('1.0','UTF-8');
//xmlをloadする前にこれを呼ばないとうまくインデントされない
$dom->preserveWhiteSpace = false;
//保存済みのxmlを読み込む
$dom->load('test.xml');
//字下げや空白を考慮してきれいに整形した出力を行う
$dom->formatOutput = true;
//読み込んだxmlのルート要素を$rootとする
$root = $dom->documentElement;
//新しい要素をルート要素の子要素のとして新規挿入する
$posts = $root->appendChild(new domElement("posts"));
//XSS対策
$subject = htmlspecialchars($_POST['subject'], ENT_QUOTES);
$text = htmlspecialchars($_POST['text'], ENT_QUOTES);
//新しい要素をposts要素の子要素として新規挿入する
$posts->appendChild(new domElement("subject", $subject));
$posts->appendChild(new domElement("text", $text));
//xmlを保存する
$dom->save('test.xml');
//出力(なくても可)
echo $dom->saveXML();
?>前半は前回のものと全く同じです。
16、17行目は省略してもよかったのですが、一応WEB上の不特定多数に公開している以上最低限のXSS対策はしました。
以上で完成です。
今回作成したtest.htmlにアクセスし、例えば参考画像(一番上の画像)のようにテキストを入力し、送信するとxmlは以下のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<document>
<posts>
<subject>タイトルです。</subject>
<text>テキストです。</text>
</posts>
<posts>
<subject>タイトルを書いて</subject>
<text>本文を入力してください</text>
</posts>
</document>
もちろん何度でも出来ますし、表示部分をしっかり作れば簡易掲示板くらいにはなるかもしれません。
ただし、最低限のセキュリティ対策しかしておらず、入力部分も空で通ってしまうし、保存先のxmlも丸見えです。
これらの対策がしっかりとできて、自分でも満足ができる状態になったらパッケージにして配布しようかとも思っています。
なので勝手ではありますが、現段階で使用する場合には自己責任でお願いします。
次はどうしよう?表示部分かな?
コメント投稿