| TOP | XML & CGI | 目次 |
| XMLでデータベース |
| 編集データの書き込み(プログラム青字部分) | ||
| これで基本のシステムはできた(と思う)。テスト用の要らないプログラムも入ってますが、全ソースをいかに掲載します。エディタではちゃんと段下げができているのですが、コピーすると反映されていませんのであしからず。 test09.cgi |
||
| #!/usr/bin/perl print "Content-type: text/html\n\n"; #要素名の定義 $element_root = "新聞雑誌記事"; $element = "記事"; #===================メイン===================== #フォームから送られてきた内容をデコードする &decode_f; # &datacheck_ante; 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){ $data[$n] = $data[$n]."\n"; #1データの終わりに改行追加 $n++; } $n = $n-1; $data[$n] = $data[$n]."\<\/".$element_root."\>"."\n"; #書き込みをログファイルに書き加える open(OUT,">dtb.xml"); print OUT @data,"\n"; close(OUT); } #ファイルデータを配列に入れる &data; #フォームから送られてきた記事番号を$nに伝達する $n = $FORM{'n'}; #要素属性を配列に入れる/テキストの抽出 &zokusei; #テキストの改行を有効にする $text[$n] =~ s/<\;br\/>\;/\n/g; #入力/編集フォーム &edit; exit; #ゴミ箱 $data[$n] =~ s/<\;/</g; #htmlタグを回復する $data[$n] =~ s/>\;/>/g; #htmlタグを回復する # foreach(@data){ # print "\$data\[$n\]\="."$data[$n]<BR>\n"; # $n++; # } #=================サブルーチン================= #データを配列に入れる 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/\n//g; #改行コードを除く $n++; } } #要素属性を配列に入れる/テキストの抽出 sub zokusei{ @zokusei = split(/" /,$data[$n]); #属性を各配列に納める $zokusei[0] =~ s/<\;$element //g; #タイトルから<$element を取り除く $zokusei[11] =~ s/<\;\/$element>\;//g; #コメントから</$element>を取り除く $l = index($zokusei[11],"\"\>"); # print $zokusei[11]; # print "★".$l; # exit; $text[$n] = substr($zokusei[11],$l+2); #テキストを取り出す $zokusei[11] = substr($zokusei[11],0,$l); #属性の値を取り出す $m = 0; foreach(@zokusei){ $zokusei[$m] =~ s/"//g; #最後に残った " を取り除く $l=index($zokusei[$m],"\="); #属性名を除く $zokusei[$m]=substr($zokusei[$m],$l+1,length($zokusei[$m])-$l); $m++; } } #入力/編集フォーム sub edit { print <<"EOL"; <HTML> <HEAD> <META name="GENERATOR" content="IBM WebSphere Homepage Builder V6.0.1 for Windows"> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE>$element_root編集フォーム</TITLE> </HEAD> <BODY bgcolor="#bbccbb"> <CENTER><B><FONT size="+1">$element_root 編集フォーム<BR> <BR> </FONT></B> <FORM ACTION="test09.cgi" METHOD="POST"> <INPUT TYPE="hidden" NAME="action" VALUE="edit"> <INPUT TYPE="hidden" NAME="n" VALUE=$n> <TABLE border="0"> <TBODY> <TR> <TD colspan="2" align="center"> <FONT size="-1">タイトル</FONT><INPUT size="139" type="text" name="title" value=$zokusei[0]> </TD> </TR> <TR> <TD colspan="2" align="center"> <FONT size="-1">サブタイトル</FONT> <INPUT size="118" type="text" name="subtitle" value=$zokusei[1]> </TD> </TR> <TR> <TD valign="bottom"><FONT size="-1">文献<BR> <INPUT size="20" type="text" name="bunken" value=$zokusei[2]><BR> 人物<BR> <INPUT size="20" type="text" name="jinbutsu" value=$zokusei[3]><BR> 年月日<BR> <INPUT size="20" type="text" name="nengappi" value=$zokusei[4]><BR> <BR> 連続<INPUT size="4" type="text" name="renzoku" value=$zokusei[5]><BR> <BR> 画像<BR> <INPUT size="20" type="text" name="gazou" value=$zokusei[6]><BR> 横<INPUT size="5" type="text" name="yoko" value=$zokusei[7]> 縦<INPUT size="5" type="text" name="tate" value=$zokusei[8]></FONT></TD> <TD valign="top" height="268"> <TEXTAREA rows="19" cols="90" name="text">$text[$n]</TEXTAREA> </TD> </TR> <TR> <TD align="left" colspan="2"><FONT size="-2"> リンク名</FONT><INPUT size="37" type="text" name="linkmei" value=$zokusei[9]><FONT size="-2">リンク</FONT><INPUT size="99" type="text" name="link" value=$zokusei[10]></TD> </TR> <TR> <TD align="right" valign="top"><FONT size="-1">コメント</FONT></TD> <TD> <INPUT size="130" name="comment" value=$zokusei[11]> </TD> </TR> <TR> <TD colspan="2" align="center"> <INPUT type="submit" value="書き込み"> </TD> </TR> </TBODY> </TABLE> </FORM> <FORM ACTION="dtb.xml"> <INPUT TYPE="submit" VALUE="ファイルに戻る"> </FORM> </CENTER> </BODY> </HTML> EOL } #フォームから送られてきた内容をデコードする sub decode_f{ if ($ENV{'REQUEST_METHOD'} eq "POST"){ read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/,$buffer); foreach (@pairs) { ($name, $value) = split(/=/, $_); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-f0-9])/pack("C", hex($1))/eg; $value =~ s/</<\;/g; #htmlタグを禁止する $value =~ s/>/>\;/g; #htmlタグを禁止する $value =~ s/\r//g; #改行コード\rを消去 $value =~ s/\,/,/g; #半角コンマを全角コンマに $FORM{$name} = $value; } } #データ確認用(臨時) sub datacheck_ante{ print <<"EOL"; $data<P> 記事番号: $FORM{'n'}<BR> action : $FORM{'action'}<BR> 要素top: $FORM{'yoso_top'}<BR> タイトル: $FORM{'title'}<BR> サブタイトル:$FORM{'subtitle'}<BR> 文献 : $FORM{'bunken'}<BR> 人物 : $FORM{'jinbutsu'}<BR> 年月日 : $FORM{'nengappi'}<BR> 連続 : $FORM{'renzoku'}<BR> 画像 : $FORM{'gazou'}<BR> 横サイズ: $FORM{'yoko'}<BR> 縦サイズ: $FORM{'tate'}<BR> リンク名: $FORM{'linkmei'}<BR> リンク : $FORM{'link'}<BR> コメント: $FORM{'comment'}<BR> テキスト: $FORM{'text'}<BR> 要素end: $FORM{'yoso_end'}<BR> EOL exit; } sub datacheck_midle{ print <<"EOL"; $data<P> 記事番号: $n<BR> action : $FORM{'action'}<BR> 要素top: $FORM{'yoso_top'}<BR> タイトル: $zokusei[0]<BR> サブタイトル:$zokusei[1]<BR> 文献 : $zokusei[2]<BR> 人物 : $zokusei[3]<BR> 年月日 : $zokusei[4]<BR> 連続 : $zokusei[5]<BR> 画像 : $zokusei[6]<BR> 横サイズ: $zokusei[7]<BR> 縦サイズ: $zokusei[8]<BR> リンク名: $zokusei[9]<BR> リンク : $zokusei[10]<BR> コメント: $zokusei[11]<BR> テキスト: $text[$n]<BR> 要素end: $FORM{'yoso_end'}<BR> EOL exit; } sub datacheck_post{ print <<"EOL"; $data<P> action : $action<BR> 要素top: $yoso_top<BR> タイトル: $title<BR> サブタイトル:$subtitle<BR> 文献 : $bunken<BR> 人物 : $jinbutsu<BR> 年月日 : $nengappi<BR> 連続 : $renzoku<BR> 画像 : $gazou<BR> 横サイズ: $yoko<BR> 縦サイズ: $tate<BR> リンク名: $linkmei<BR> リンク : $link<BR> コメント: $comment<BR> テキスト: $text<BR> 要素end: $yoso_end<BR> EOL exit; } |
||