Perl ブログ等の記事の編集方法と注意点|ブログ投稿後に記事を編集・修正する方法

このQ&Aのポイント
  • Perl ブログ等の記事の編集について教えてください。ブログ等の記事を書き込むまではできました。記事を編集・修正したい場合の方法や注意点を教えてください。
  • ブログや記事を書き込む際はできるけれど、書いた後の編集や修正の方法がわからない場合、どうすればいいのか迷いますよね。本記事では、Perl を使用して書かれたブログや記事の編集方法と注意点について、詳しく解説します。
  • Perl を使用して書かれたブログや記事を編集・修正する方法を教えてください。具体的なソースコードや手順を教えていただけると助かります。
回答を見る
  • ベストアンサー

Perl ブログ等の記事の編集

記事の編集について教えてください。 ブログ等の記事を書き込むまではできました。 そこで、書き込んだ後に、記事を編集・修正をしたいと思い ソースを考えているのですが、 わからなくなりました。 お力添えをお願い致します。 #log.txt 1,test1,name1,text1 2,test2,name2,text2 3,test3,name3,text3 4,test4,name4,text4 5,test5,name5,text5 open(FILE, "<$FILE") or die("error :$!"); eval{ flock(FILE, 1) }; @DATA = <FILE>; close FILE; #記事表示 for ($i=0;$i<5;$i++){ last if ($i > @DATA); $data = $DATA[$i]; if ($data ne ""){ my ($category,$title,$name,$text) = split(/,/, $data); print qq(<input type="radio" name="no" value="%02d">$category - $title - $name - $text\n), $i; print qq(<input type="submit" name="edit" value="編集">\n); print qq(<input type="submit" name="delete" value="削除">\n); } } そこで、radioボタンを選択し、 submit「編集」をクリックすると radioボタンで選択されている行のデータを取り出し 修正をするということをしたいのですが、どのようにすればいいでしょうか? 今回の求めている結果ですと log.txtの3行目を取り出し 3,test3,name3,text3 ↓ 3,hen3,kou3,henkou3 にして 最終的なlog.txtは 1,test1,name1,text1 2,test2,name2,text2 3,hen3,kou3,henkou3 4,test4,name4,text4 5,test5,name5,text5 というふうにしたいです。 よろしくお願いいたします。

  • Perl
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • hok212
  • ベストアンサー率66% (100/150)
回答No.3

いつものクセで、先の回答で $_ を使ってしまいました。 $_ のところは $data に置き換えてください。

Cells231
質問者

お礼

ありがとうございました。 またわからないことがありましたら、よろしくお願いいたします。

その他の回答 (2)

  • hok212
  • ベストアンサー率66% (100/150)
回答No.2

削除・編集は次のようにやれば出来るはずです。 ※動作確認をせず、頭の中で組んだスクリプトですので、間違っている場合はご容赦を 【削除】 foreach $data (@DATA) { ($category,$title,$name,$text) = split(/,/, $data); if ($category == $no) { next; } else { push(@newArray,$_); } } 【編集】 foreach $data (@DATA) { ($category,$title,$name,$text) = split(/,/, $data); if ($category == $no) { push(@newArray,"$no,$revTitle,$revName,$revText\n"): # 編集後の値を$revXXXXとしています。ここは自由に使い分けてください。 } else { push(@newArray,$_); } } あとは@newArrayを元のファイルに戻してやればOKです。 ※ $no がフォームから渡ってきた削除対象の番号です。

Cells231
質問者

お礼

ありがとうございました。 編集及び削除することができました。

  • hok212
  • ベストアンサー率66% (100/150)
回答No.1

カテゴリー値(log.txtの一番左のフィールド)が一意の値であるのなら、次の手法でいけます。 なお、編集/削除ボタンは一組あれば十分です。 ※テキストベースのファイルを編集するには、一意の値をもつフィールドを用意したほうがやりやすいです。 #/usr/bin/perl use CGI; $myscript = 'test.cgi'; $FILE = 'log.txt'; $query = new CGI; $no = $query->param('no'); $mode = $query->param('mode'); if ($mode eq "編集") { &editForm; } elsif ($mode eq "削除") { &delForm; } else { &init; } sub init { open(FILE, "<$FILE") or die("error :$!"); eval{ flock(FILE, 1) }; @DATA = <FILE>; close FILE; print "<form action=\"$myscript\" method=\"POST\">\n"; for ($i=0;$i<5;$i++){ last if ($i > @DATA); $data = $DATA[$i]; if ($data ne ""){ my ($category,$title,$name,$text) = split(/,/, $data); print qq(<input type="radio" name="no" value="$category">$category - $title - $name - $text<br />\n); } } if ($i > 0) { print qq(<input type="submit" name="mode" value="編集">\n); print qq(<input type="submit" name="mode" value="削除">\n); } print "</form>\n"; } #編集フォーム sub editForm { } #削除確認フォーム sub delForm { } これでラジオボタン「no」の値にカテゴリー値が入り、編集(または削除)フォームに渡すことが出来ます。 ※値渡しをするときはCGI.pm を使ったほうが圧倒的に楽です。 編集(または削除)フォーム内で、該当のカテゴリー値のレコードのみを抜き出すには、次のようにします。 open(FILE, "<$FILE") or die("error :$!"); eval{ flock(FILE, 1) }; @DATA = <FILE>; close FILE; foreach (@DATA) { ($category,$title,$name,$text) = split(/,/, $_); if ($category == $no) { last; } } これで $category,$title,$name,$text が、先のフォームのラジオボタンで選択した値のみ抽出されます。

Cells231
質問者

お礼

radioタイプ選択後、ボタンをクリックし、値を抽出するとこまで ご掲示して頂いたソースで実行確認できました。 しかしこの先の編集、削除する場合 どのような処理をするのでしょうか? 削除は「splice」・・・? 編集は「unshift」・・・? 現在、削除はspliceでradioタイプのNoを抽出し splice @DATA, $NO, 1; このような感じで削除させているのですが、これは同じ要領なのでしょうか? 編集は、抽出した値を <input type="text" name="各名前" value="受け取った値"> のようにして一度textに放り込んでから、 それを変更する形になるのでしょうか・・・?

Cells231
質問者

補足

コメントありがとうございます!

関連するQ&A

  • UWSCでブログへ自動投稿したいのですが、記事本文が入力できません。

    UWSCを使ってブログへ自動入力したいのですが、記事を入力する欄に内容が入力できません。 通常であれば、 IE.document.forms[0].article_text.value = "テスト内容" とすれば、入力できると思うのですが、できません。 入力したい記事本文の欄は、テキストエリアで、以下のようなHTMLになっています。 <input type="hidden" name="user_article_text_editor_flag" value=""> <input type="button" value="エディタON" disabled onClick="document.editform.user_article_text_editor_flag.value=1;document.editform.mode.value='update_user_article_text_editor_flag';document.editform.submit();"><input type="button" value="エディタOFF/改行を反映する" onClick="document.editform.user_article_text_editor_flag.value=0;document.editform.mode.value='update_user_article_text_editor_flag';document.editform.submit();"><input type="button" value="エディタOFF/改行を反映しない" onClick="document.editform.user_article_text_editor_flag.value=-1;document.editform.mode.value='update_user_article_text_editor_flag';document.editform.submit();"></div> <textarea id="article_text" name="article_text" class="article-input"></textarea> 自動投稿したいブログは、MARUTAブログです。 http://maruta.be/ どうぞよろしくお願い致します。

  • javascript form送信後の動作

    以下のスクリプトでiframeにデータは送信できているんですが、<input type="text">に入力したテキストが残ってしまいます。どのように記述したらうまくいくでしょうか? <script type="text/javascript"> function send(){ var frm=document.txt_submit; frm.submit(); frm.reset(); } </script> <form name="txt_submit" action="log.cgi" method="post" target="log" autocomplete="off"> <input type="text" name="ctxt" size="20" value=""> <input type="button" value="送信" onclick="return send();"> </form>

  • submitについて

    <script type="text/javascript"> <!-- function go() { document.getElementsByTagName("input")[3].value+="text"; } //--> </script> <form name="NAME1" action="#" method="get" onSubmit="go()"> <input type="submit" name="submit1" value="送信1" > <input type="submit" name="submit2" value="送信2"> <input type="button" name="submit3" value="送信3" onClick="go()"> <input type="text" name="text1" size="10"> </form> なのですが、送信2のsubmitを4回クリックすると以下のように表示されるのですが、どういう感じで実行されているのかわかりませんので教えていただけないでしょうか? 一応一回目はtext1=textとなるのですがテキストボックスには空になります。 2回目はtext1=textとなりテキストボックスにはtextが入ります。 3回目はtext1=texttextとなりテキストボックスには空になります。 4回目はtext1=textとなりテキストボックスは空になります。 以上よろしくお願いします。

  • 【PHP】 記事の削除について(ログの一部を削除)

    log.txt ファイル の中身が下の様になっていた場合、削除したい記事番号を選び削除キーを押したら 選んだ記事番号の記事を削除するにはどうしたらよいでしょうか? ◆ log.txtファイルの中身 1 あああ君 おはよう ・ 3 かかか君 良い天気ですね ・ ・ 6 そそそ君 明日は晴れるでしょ ※ 記事番号($no) 名前($name) 内容($body)と配列がなっています。(全角の空白で区切ってます) ◆ 削除したい記事番号を選ぶ所のファイル名は 「file01.php」 としています。   「file01.php」では次ぎの様に削除キーを設定しています。 <table><tr><td> <form name="form" action="file02.php" method="POST"> <input type="text" name="delkey" size="8"> <input name="Submits" type="submit" value="削除"></form> </td></tr></table> ◆ 「file01.php」からのデーターの受け取りファイル名は 「file02.php」としています。   「file02.php」では次ぎの様にしてデーターを受け取る様にしています。 <?php $delkey = $_REQUEST["delkey"]; $data = file("log.txt"); for($i=0; $i<sizeof($data); $i++){ list($no,$name,$body) = explode( " " , $data[$i]); if($no == $delkey){ //・・・記事削除処理 } } ・ ・ ・ ?> ◆ 書込みは次ぎの様にしています。 $fp = fopen("log.txt","w"); $ndata = implode( " " , array($no,$name,$body."\n") ); fputs($fp,$ndata); fclose($fp); ここまではやってみましたが、ここから、どのような仕組みで選んだ記事番号の記事を削除したらよいのか分らないので教えて下さい? また、記事削除の処理をした場合、ログファイルを元のと書きかえるいはどうしたらよいのでしょうか教えて下さい? 例えば、選んだ削除番号が「3」だった場合など・・・記事削除処理のところはどうしたらよいのでしょうか? if の所では、記事番号($no)が選んだ削除したい記事番号($delkey)と等しいなら、・・・記事削除処理 と言う様にしています。 記事削除処理のところは、記事削除の仕組み仕方が分らないので空白となっています。 以上、出来れば詳しく教えて頂けると助かります。宜しくお願い致します。

    • ベストアンサー
    • PHP
  • formタグ

    HTMLで、formを使用し、CGIへテキストエリアのデータをpostしたいと 考えております。 テキストエリアを3つ、ボタンを1つ設けるならば 通常以下のようにすると思います。(必要部分の抜粋) <form action="foo1.cgi" method="post" ENCTYPE="multipart/form-data"> <input type="text" name="text1" value="text1" size=50 maxlength=100> <input type="text" name="text2" value="text2" size=50 maxlength=100> <input type="text" name="text3" value="text3" size=50 maxlength=100> <input type="submit" name="aaa" value="実行"> </form> こうすると、実行ボタンをクリックすると、text1、text2、text3のテキストエリアに 記述されているテキストが送信されますが、ここにボタンをもう一つ設け、 上記3つのデータを別のCGIに送信したいのですが、 この場合どのようにHTMLを記述したらよいでしょうか? 新たに下記のようにformタグを設けると、テキストエリアは6つになってしまいますし。。。 <form action="foo2.cgi" method="post" ENCTYPE="multipart/form-data"> <input type="text" name="text1" value="text1" size=50 maxlength=100> <input type="text" name="text2" value="text2" size=50 maxlength=100> <input type="text" name="text3" value="text3" size=50 maxlength=100> <input type="submit" name="aaa" value="実行2"> </form> どなたか分かる方情報頂けますか。

    • ベストアンサー
    • HTML
  • 配列に値を入れたいのですが・・

    Perlは超初心者です。 既存テキストデータファイルを編集して、上書き保存できるようしたくて、次のようなテキストデータを ===== 山田 田中 加藤  ・  ・ ===== 読込んで、次のようなHTMLを作成する様にしました。 <input type='text' name='name[0]' value='山田'> <input type='text' name='name[1]' value='田中'> <input type='text' name='name[2]' value='加藤'>             ・             ・ ここから、テキストボックスの値を編集して、Submitで別Perlプログラムにデータを送信し、次のようなプログラムでデータを読込めば ======================================================================== $count = $in{'count'}; #データのレコード件数です。ここは問題ありません。 for($x=0;$x<=$count;$x++){ $simei[x]=$in{'name[x]'}; } ======================================================================== $simei[0]=山田、$simei[1]=田中、$simei[2]=加藤、・・・と配列変数に入って、それをファイルに上書きするつもりだったのですが、変数には何も代入されないようです。 どうすれば、私の思うようになるでしょうか?

    • ベストアンサー
    • Perl
  • 入力に関して。

    以下のソースのようにテキストボックスを4つくらい並べて、最大入力文字数になったら、自動的に右のテキストボックスに入力できるようにすることはできるのでしょうか? <html> <head> <title></title> </head> <body> <form name="form1"> <input type="text" name="txt1" size="7" maxlength="3">. <input type="text" name="txt2" size="7" maxlength="3">. <input type="text" name="txt3" size="7" maxlength="3">. <input type="text" name="txt4" size="7" maxlength="3"> </form> </body> </html>

  • disabledのフィールドパラメータについて

    以下のようなフォームでdisabledになったテキストフィールドは、 値として渡されるのでしょうか? <form> <input type="text" name="test1" value="a" disabled> <input type="submit"> </form>

    • ベストアンサー
    • HTML
  • 特定のデータだけををソートしたい

    POSTで渡されたデータの中から特定のデータだけを取り出しソートしたい。 例えばNo・名前・年齢のtextを数個表示してNoだけを抽出し、ソートして昇順にしたいのですが? print '<form name="form1" action="eee.php" method="POST">' . "\r\n"; for($i=0;$i<5;$i++){ print '<input type="text" name="N0'.$i.'">' . "\r\n"; print '<input type="text" name="Name'.$i.'">' . "\r\n"; print '<input type="text" name="Age'.$i.'">' . "\r\n"; } print '<input type="submit" value="送信">' . "\r\n"; print '</form>' . "\r\n";

    • 締切済み
    • PHP
  • Perlについてご教示お願い致します。

    Perl初心者です。ご教示お願い致します;; ~text.txt~ 3,name,text 2,あ,あ 1,あ,あ 上記のようなテキストファイルがあり、 my $NAME = $form->param('name'); my $TEXT = $form->param('text'); unshift(@DATA,"$NO,$NAME,$TEXT\n"); と、略してますが、 NAMEとTEXTは、ページフォーム内のテキストを入力で CGI.pmを使用し、入力することはできました。 そこで、NOなのですが、次回入力する際、「4」と テキストファイルの1行目の1列目に+1した数字を 書き込むようにしたいのですが、 どのようにすればいいでしょうか? my $NO = $ここに1行目の1列目の数字 + 1; これを,unshiftの前に入れるまではわかるのですが、 「$ここに1行目の1列目の数字」 これがどう求めるのかわりません;;

    • ベストアンサー
    • Perl

専門家に質問してみよう