| TOP | XML & CGI | 目次 |
| XMLでデータベース |
| 編集フォーム | |||
| 要素の属性とテキストがすべて配列に格納できたので「入力フォーム」から「編集フォーム」を作ってみる。フォームプログラムをサブルーチンにしてみる。$n=1として、第一番目のデータを表示する。 test05a.cgi初期 |
|||
| #!/usr/bin/perl print "Content-type: text/html\n\n"; #データを配列に入れる &data; $n = 1; #要素属性を配列に入れる/テキストの抽出 &zokusei; #入力/編集フォーム &edit; exit; #==========サブルーチン========== #データを配列に入れる sub data{ open (IN,"dtb.xml"); @data=<IN>; close(IN); $n=0; foreach(@data){ $data[$n] =~ s/\<新聞雑誌記事\>//g; #ルート要素を除く $data[$n] =~ s/</<\;/g; #htmlタグを禁止する $data[$n] =~ s/>/>\;/g; #htmlタグを禁止する chop($data[$n]); #行末の改行コードを除く $n++; } } #要素属性を配列に入れる/テキストの抽出 sub zokusei{ @zokusei = split(/" /,$data[$n]); #属性を各配列に納める $zokusei[0] =~ s/<\;記事 //; #タイトルから<記事 を取り除く $zokusei[11] =~ s/<\;\/記事>\;//g; #コメントから</記事>を取り除く $l = index($zokusei[11],"\">\;"); $text[$n] = substr($zokusei[11],$l+5); #テキストを取り出す $zokusei[11] = substr($zokusei[11],0,$l-1); #属性の値を取り出す $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>新聞雑誌記事編集フォーム</TITLE> </HEAD> <BODY bgcolor="#bbccbb"> <CENTER><B><FONT size="+1">新聞雑誌記事 編集フォーム<BR> <BR> </FONT></B> <FORM ACTION="test05a.cgi" METHOD="POST"> <INPUT TYPE="hidden" NAME="action" VALUE="edit"> <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]></INPUT> </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 } |
|||
![]() |
|||
| テキストのデータをフォームに送る前に本当の改行コードに戻してやります。 test05a.cgi改 |
|||
| #データを配列に入れる &data; $n = 1; #要素属性を配列に入れる/テキストの抽出 &zokusei; $text[$n] =~ s/<\;br\/>\;/\n/g; #テキストの改行を有効にする #入力/編集フォーム &edit; exit; |
|||
![]() |
|||
| XML画面に編集ボタンを付けます。(以下プログラムの説明) <xsl:number level="any"/>は記事番号(読み込み順)を取得する関数です。 <form action="test06.cgi" method="POST">で編集ボタンが押された時にtest06.cgiプログラムを呼び出します。(プログラム名は作成中にどんどん変化します。現時点のプログラムです) INPUT(type=hidden)で記事番号$nをデータ名「no」でプログラムに引き渡します。 <input type="submit" value="編集" />編集ボタンを設置します。 kiji.xsl |
|||
| (前略) <td width="77%" align="center"> <b><xsl:value-of select="@サブタイトル"/></b></td> <form action="test06.cgi" method="POST"> <td width="10%" align="center"> <input> <xsl:attribute name="type">hidden</xsl:attribute> <xsl:attribute name="name">n</xsl:attribute> <xsl:attribute name="value"><xsl:number level="any"/></xsl:attribute> </input> <input type="submit" value="編集" /> </td> </form> (後略) |
|||
![]() |
|||