| TOP | XML & CGI | 目次 |
| XMLでデータベース |
| 編集データを既存データと置き換える/いろいろな問題 | ||
| すべてのデータを配列に読み込み(赤字)、データファイルに一気に書き出します。 編集データの順位$FORM{'n'}にあたる配列($data[$n])を編集データ($data)に置き換えます(青字ボールド)。 さらに記事番号1番の頭にはルート要素名をつけます。記事番号最後の末尾にもルート要素名の終了タグをつけます。 test08b.cgi |
||
| #!/usr/bin/perl print "Content-type: text/html\n\n"; #要素名の定義 $element_root = "新聞雑誌記事"; $element = "記事"; #フォームから送られてきた内容をデコードする &decode_f; if($FORM{'action'} eq "edit"){ #フォームデータを統合する $data = "タイトル\=\"" . $FORM{'title'} . "\" "; $data = $data . "サブタイトル\=\"" . $FORM{'subtitle'} . "\" "; $data = $data . "文献\=\"" . $FORM{'bunken'} . "\" "; $data = $data . "人物\=\"" . $FORM{'jinbutsu'} . "\" "; $data = $data . "年月日\=\"" . $FORM{'nengappi'} . "\" "; $data = $data . "連続\=\"" . $FORM{'renzoku'} . "\" "; $data = $data . "画像\=\"" . $FORM{'gazou'} . "\" "; $data = $data . "横サイズ\=\"" . $FORM{'yoko'} . "\" "; $data = $data . "縦サイズ\=\"" . $FORM{'tate'} . "\" "; $data = $data . "リンク名\=\"" . $FORM{'linkmei'} . "\" "; $data = $data . "リンク\=\"" . $FORM{'link'} . "\" "; $data = $data . "コメント\=\"" . $FORM{'comment'} . "\""; $FORM{'text'} =~ s/\n/<\;br\/>\;/g; #テキストの改行を無効にする $data = "\<".$element." ".$data."\>".$FORM{'text'}."\<\/".$element."\>"; #ファイルデータを配列に入れる &data; #編集データの該当配列を置き換える $data[$FORM{'n'}] = $data; $data[1] = "\<".$element_root."\>".$data[1]; $n = 0; foreach(@data){ $n++; } $data[$n-1] = $data[$n-1]."\<\/".$element_root."\>"; (以下省略) |
||
その他いろいろな問題 |
||
| 上記プログラムで編集・保存をするとデータファイルの要素名が欠けるという問題。 これは以前、chop命令で行っていましたが、大切な終了タグまで消してしまうので以下のように直しました。 #データを配列に入れる sub data{ open (IN,"dtb.xml"); @data=<IN>; close(IN); $n=0; foreach(@data){ $data[$n] =~ s/\<$element_root\>//g; #ルート要素始めを除く $data[$n] =~ s/\<\/$element_root\>//g; #ルート要素終わりを除く # $data[$n] =~ s/</<\;/g; #htmlタグを禁止する # $data[$n] =~ s/>/>\;/g; #htmlタグを禁止する $data[$n] =~ s/\n//g; #改行コードを除く $n++; } } |
||
![]() |
||
| 編集後、改行が取れてしまう問題。 これは単純なミスでした。以下のように{ }とすべき所を[ ]で囲ってました。 $FORM['text'] =~ s/\n/<\;br\/>\;/g; #テキストの改行を無効にする |
||
![]() |
||