CSVのデータをテーブルに書き出し、修正箇所を表示するプログラムを作成しています

このQ&Aのポイント
  • CSVのデータを読み込みテーブルに書き出し、修正箇所を表示するプログラムを作成しています。初心者なのでお恥ずかしいソースですが、ご教授いただけると幸いです。
  • CSVのデータを一行ずつ読み込み、テーブルに書き出すプログラムを作成しています。修正した箇所を表示する方法が思いつかないので、ご教授いただけると助かります。
  • 現在、CSVのデータを読み込んでテーブルに書き出すプログラムを作成中です。ただ、修正箇所を確認画面に表示する方法がわからず困っています。初心者なので、ご教授いただければ幸いです。
回答を見る
  • ベストアンサー

CSVの一行ずつの処理

CSVから、4データ一行のデータを読み込みテーブルに書き出し、 チェックボックスなどで編集後、 確認画面において、どこを修正したかを表示するプログラムを作っています。 とりあえず、表示はできたのですが、 編集した箇所がどこかというのを、 確認画面に渡す部分がどうしても思いつきません。 現段階でのソースは以下のとおりです。 初心者なのでお恥ずかしいソースですが、 ご教授いただけると幸いです。 my $colline; foreach (@td){ chomp; my @cols = split(/,/); print "<tr>\n"; for ($colline=0;$colline<=$max;$colline++){ if ($cols[$colline] eq ''){$cols[$colline] = "&nbsp;"} if ($colline eq 0){ #日付表示部 print "<td><div align'center'><input name='day' value='$cols[$colline]' size='15'></div></td>\n"; #修正ボタン部 print "<td><div align='center'><input type='button' value='修正' onclick='location.href=\"\"'></div></td>\n"; } elsif ($colline eq 1){ #表示部 print "<td><div align='center'><input type='checkbox' name='checkshow' value='S' $show ></div></td>\n"; } elsif ($colline eq 2){ #削除部 print "<td><div align='center'><input type='checkbox' name='checkdel' value='D' $del ></div></td>\n"; } } print "</tr>\n"; }

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

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

  • ベストアンサー
  • pipipi523
  • ベストアンサー率40% (148/365)
回答No.1

perlでcgiを作っているということでしょうか? <form method="POST" action="xxx.cgi"> ~省略~ <input type="submit" value="確認画面へデータを渡す"> </form> のような感じで修正したデータを丸ごとxxx.cgiに送って元データと比較し表示すれば良いと思いますが・・

関連するQ&A

  • 掲示板スパム対策(改造)1行追加でエラー

    書き込み文字が変換されるタイプの掲示板です。 1行追加、アップした後に、サーバーのエラーが出るのですが、 どこが悪いのかわかりません。 #HTMLドキュメントのヘッダー宣言 ~省略~ #投稿フォームを作成 ~省略~ print "<td align=center>名前</td>\n"; print "<td><input type=text size=34 name=name value=" . $COOKIE{'name'} . "></td>\n"; print "</tr>\n"; print "<tr>\n"; print "<td align=center>E-mail</td>\n"; print "<td><input type=text size=34 name=email value=" . $COOKIE{'email'} . "></td>\n"; print "</tr>\n"; print "<tr>\n"; print "<td align=center>見出し</td>\n"; #返信の場合は、見出しを挿入 if ($FORM{'flags'} eq 'return') { print "<td><input type=text size=34 name=subject value=RE:" . $FORM{'subject'} . "></td>\n"; } else { print "<td><input type=text size=34 name=subject></td>\n"; } print "</tr>\n"; print "<tr>\n"; print "<td align=center>内容</td>\n"; print "<td align=center><textarea name=comment rows=3 cols=34></textarea><br>\n"; if ($FORM{'flags'} eq 'return') { print "<input type=submit value=$FORM{'subject'}へ返信>\n"; print "<input type=hidden name=ress value=$FORM{'code'}>\n"; } else { print "<input type=submit value=新規投稿>\n"; } print "ガードコード<input type=text name="guard" size=8>\n"; #スパム対策用で追加●●●●●●●●●● print "</form>\n"; (TっT)

    • ベストアンサー
    • CGI
  • 「○○○@××.△△: HTTPリクエストにRefererがありません。」?

    メールフォームを作成したいのですが、試しに送信すると「○○@××.△△: HTTPリクエストにRefererがありません。」と表示されます。どこがおかしいのか教えて下さい。 以下にHTMLを記述します。 「」内にはHPアドレス(Infoseek)とメールアドレス(Infoseekメール)を記述済みです。 <FORM METHOD="POST"ACTION="http://www.altoworld.com/*****/post.cgi"> <INPUT TYPE="hidden" NAME="_location" VALUE="「送信後戻るページ」 "><INPUT TYPE="hidden" NAME="_subject" VALUE="メールフォーム"><INPUT TYPE="hidden" NAME="_mailto" VALUE="「メールアドレス」"><div align="center"><center><table border="1" bordercolor="#000000"><tr><td align="center">ハンドルネーム</td><td align="center" bordercolor="#FFFFFF"><INPUT TYPE="text" NAME="名前" SIZE="20"></td></tr><tr><td align="center">メールアドレス</td><td align="center" bordercolor="#FFFFFF"><INPUT TYPE="text" NAME="MAIL" SIZE="20"></td></tr><tr><td align="center">ホームページ</td><td align="center" bordercolor="#FFFFFF"><INPUT TYPE="text" NAME="URL" SIZE="20" VALUE="http://"></td> </tr><tr><td align="center">ご感想をどうぞ</td><td align="center" bordercolor="#FFFFFF"><p align="center"><TEXTAREA NAME="感想" COLS="22" ROWS="2"></TEXTAREA><br><INPUT TYPE="submit" VALUE="送信"><INPUT TYPE="reset" VALUE="リセット"></td></tr></table></center></div></FORM>

    • ベストアンサー
    • HTML
  • チェックボックスを使用してのAND検索

    宜しくお願いします。 検索データベース2という、CGI-GARAGE さんのCGIを使って、データベースの検索プログラムを作ってみているのですが、初期の仕様でチェックボックスでの検索が、or検索になっています。 これを、AND検索できるように変えたいのですが、どなたかお力を貸していただけませんでしょうか? チェックボックスに関係ありそうな部分は2箇所あったのですが 補足が必要であれば言ってください。宜しくお願いします。 $print .= "<TD><input type=checkbox name=\"$count\" value=\"$sobicount\">$p[1]</TD>\n"; if($tcount >= 5 && ($tcount % 5) eq 0){ $print .= "</TR>\n"; ---------------------------------------------------- my $pp = $tcount - 1; $print .= "<TD><input type=checkbox name=\"$count\" value=\"$pp\">$p  </TD>\n"; if($tcount >= 5 && ($tcount % 5) eq 0){ $print .= "</TR>\n"; }

    • 締切済み
    • CGI
  • チェックボックスやラジオボタンでの計算

    チェックボックスや、ラジオボタンで、選択した項目の金額を、最後にテキストフォームに表示させる…というやり方を探しております ソース途中からですが…↓ <tr> <Td Valign="middle" Width="80">部数選択</td> <Td Align="center" Valign="middle"><必須></td> <Td> <Input Type="radio" Name="pay" Value="100部 10000円">100部 ¥10,000円<Br> <Input Type="radio" Name="pay" Value="150部 20000円">150部 ¥20,000円<Br> <Input Type="radio" Name="pay" Value="200部 30000円">200部 ¥30,000円<Br> <Input Type="radio" Name="pay" Value="300部 40000円">300部 ¥40,000円<Br> <Input Type="radio" Name="pay" Value="300部以上 ※お見積もりいたします">300部以上 ※お見積もりいたします<Br> </td> </tr> <tr> <Td Valign="middle" Width="80">オプション選択<Br>(複数選択可)</td> <Td Align="center" Valign="middle"><必須></td> <Td> <Input Type="checkbox" Name="op[]" value="地図を入れる">地図を入れる<Br> <Input Type="checkbox" Name="op[]" value="先生のプロフィールを入れ">先生のプロフィールを入れる<Br> <Input Type="checkbox" Name="op[]" value="ごあいさつを入れる">ごあいさつを入れる<Br> <Input Type="checkbox" Name="op[]" value="生徒募集中を入れ">生徒募集中を入れる<Br> <Input Type="checkbox" Name="op[]" value="写真を入れる">写真を入れる<Br> <Input Type="checkbox" Name="op[]" value="ゲスト紹介">ゲスト紹介<Br> <Input Type="checkbox" Name="op[]" value="QRコード">QRコード<Br> </td> </tr> といった感じです。 value はすでに、他のところで使用しています 単純に計算だけを目的とさせているんですが、どうしたら良いでしょうか?

  • 掲示板に投稿編集機能付けたい

    掲示板に投稿編集機能付けたい http://okwave.jp/qa2963467.html 追加質問をどうやってすればいいのか分からないので、また質問させて頂きます。 前回教えて頂いたのを四苦八苦して何度もやり直ししたあげく、 なんとか修正画面を出せるようになりましたが、、 修正画面から戻るボタンを押すと記事が見当たらないと表示されてします。 どうやら、edit機能が効いてなく、飛んだ瞬間に削除が働いている気がします。 #--修正対象データが見つかるまでループ--# $flag1 = 0; $flag2 = 0; foreach $line (@DATA) { ($no,$name,$mail,$age,$state,$comment,$hoop,$risou,$max,$date,$H_A,$m_pass,$looks) = split(/\,/, $line); if ($in{'number'} eq "$no") { $flag1 = 1; chomp $m_pass; if ($crypted eq "$m_pass" || $in{'pass'} eq "$master_key") { $flag2 = 1; $line =~ s/.*\n//; last; } else { &lock2; &error("パスワードが一致しません"); } } } #--修正対象Noが見つからなかった場合のエラー処理ー--# unless ($flag1) { &lock2; &error("記事No$in{'number'}が見つかりません"); } if ($flag2) { if ($in{'sex'} eq "0") { if (!open(OUT,">$mensfile")) { &lock2; &error("$mensfile ファイルオープンエラー"); } print OUT @DATA; close(OUT); } elsif ($in{'sex'} eq "1") { if (!open(OUT,">$ladysfile")) { &lock2; &error("$ladysfile ファイルオープンエラー"); } print OUT @DATA; close(OUT); } &lock2; しかも、修正画面にそれぞれの箇所が反映されません。 print <<"HERE"; <TR><TD nowrap align="right">会員ID/</TD><TD nowrap> <INPUT type="text" name="id" size="10" value="$id"></TD></TR><BR> HERE print <<"HERE"; <TR><TD nowrap align="right">お名前/</TD> <TD nowrap><INPUT type="text" size="24" name="name" value="$name"> <INPUT type="radio" name="sex" value="0">男性 <INPUT type="radio" name="sex" value="1">女性</TD></TR><BR> HERE print <<"HERE"; <TR><TD nowrap align="right">E-mail/</TD> <TD nowrap><INPUT type="text" size="48" name="email" value="$email"></TD></TR><BR> HERE print <<"HERE"; <TR><TD nowrap align="right">希望する相手/</TD> <TD nowrap><INPUT type="text" size="29" name="risou" value="$risou"> <SELECT name="hoop"> <OPTION selected>男女ともに</OPTION> <OPTION value="男性のみ">男性のみ</OPTION> <OPTION value="女性のみ">女性のみ</OPTION></SELECT></TD></TR><BR> HERE print <<"HERE"; <TR><TD nowrap align="right">タイトル/</TD> <TD nowrap><input type="text" size="46" name="title" value="$title"></TD></TR><BR> HERE print <<"HERE"; <TR><TD nowrap align="right" valign="top">メッセージ/</TD> <TD nowrap><TEXTAREA name="comment" rows="10" cols="53" value="$comment"></TEXTAREA></TD></TR><BR> HERE print <<"HERE"; <TR><TD align="right">メール制限/</TD><TD nowrap> <SELECT name="max"> <OPTION value="0" selected>制限なし</OPTION> <OPTION value="5">5通まで</OPTION> <OPTION value="10">10通まで</OPTION> <OPTION value="20">20通まで</OPTION> <OPTION value="30">30通まで</OPTION> <OPTION value="40">40通まで</OPTION> <OPTION value="50">50通まで</OPTION> </SELECT></TD></TR><BR> HERE print <<"HERE"; <TR><TD nowrap align="right"></TD> <TD nowrap colspan="2"> <INPUT type="submit" value=" 書込する "><INPUT type="reset" value="リセット"> </TD></TR></TABLE><BR> </FORM> HERE &html_footer; exit; } exit; } このような記述で画面は出せました。 もう悩み過ぎて禿げそうです。 どうやったら正常な修正機能を追加できるでしょうか?

    • ベストアンサー
    • CGI
  • DWでのメールフォーム作成

    こんにちは。 DWMXでメールフォーム作成をしたのですが、web上で送信ボタンを押すとなぜかメールアプリケーションが立ち上がって、宛先に送信先のアドレスが表示されています。 メールフォームとは送信ボタンを押すとフォームの内容がそのまま送信先に送信されるものですよね? 以下構文です。なにかおかしいのでしょうか。よろしくおねがいします☆ <form action="mailto:自分のアドレス" enctype="text/plain" name="mailform" id="mailform"> <table width="304" border="0" cellspacing="1" cellpadding="1"> <tr> <td><div align="center">name</div></td> </tr> <tr> <td><div align="center"> <input type="text" name="textfield"> </div></td> </tr> <tr> <td><div align="center">mail adress</div></td> </tr> <tr> <td><div align="center"> <input type="text" name="textfield2"> </div></td> </tr> <tr> <td><div align="center">件名</div></td> </tr> <tr> <td><div align="center"> <input type="text" name="textfield3"> </div></td> </tr> <tr> <td><div align="center">本文</div></td> </tr> <tr> <td><div align="center"> <textarea name="textarea"></textarea> </div></td> </tr> <tr> <td>&nbsp;</td> </tr> <tr> <td><div align="center">   <input type="submit" name="Submit" value="送信"> <input type="reset" name="Submit2" value="リセット">

  • 配列の中身がイコールならばとしたいです。

    こんばんわ。ホームページのフォームを使って色を三色選んでもらい、それに対して貴方はこんな方ですね、としたいのですが、 好きな色3色選んでください。 <form method="post" action="hoge.cgi">  <input type="checkbox" name="q1" value="赤">赤  <input type="checkbox" name="q1" value="青">青  <input type="checkbox" name="q1" value="黄">黄色  <input type="checkbox" name="q1" value="紫">紫  <input type="checkbox" name="q1" value="黒">黒  <input type="checkbox" name="q1" value="白">白  <input type="checkbox" name="q1" value="ピンク">ピンク  <input type="checkbox" name="q1" value="緑">緑 <br> <br> <input type="submit" value="結果を見る!!"> <input type="reset" value="取消"></form> とフォームから3つ選んでもらい、送信します。 そして、perlで記述したCGIで、 ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); $buffer .= $ENV{'QUERY_STRING'}; @pairs = split(/&/,$buffer); foreach $pair (@pairs) { ($name,$value) = split(/=/,$pair); $out{$name} = $value; $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; if ($name eq "q1") { push (@check1,$value); } } print "Content-Type: text/html; charset=Shift_JIS\n\n"; print "<html>\n"; print "<head><title>$title</title></head>\n"; print "<body>\n"; #配列の数個を数える。3個以外はプログラムを中止。 $num = $#check1; if ($num ne 2){ print "3個選んでね。"; exit; } #もし配列の中身が次の3つだったら、"貴方は素敵ですね"と答える。 if (@check1 eq "黄","紫","黒"){ print "貴方は素敵ですね。";} #elsif (){;} else { print "ごめんね。データがないよ。";} print "</body>\n"; print "</html>\n"; exit; と、したのですが、どの色を選んでも、貴方は素敵ですね。としか、表示されません。赤と紫と黒を選んでも、同じです。配列を eq としている時点でどうかと思いますが、選んだ3つがイコールの場合、貴方は素敵ですねと表示されるようにしたいです。自分でも調べていますが、よろしかったら是非お教えください。 でわ。

    • ベストアンサー
    • CGI
  • チェックボックスのチェック処理

    HTMLでボタン押下時にチェックしたいことがあります。 ■カテゴリーA~Cで、カテゴリー毎に選択できるのは一つのみ  (例)「A1・あ」と「A2・お」が選択時はNG ■カテゴリーは最大2つまで選択可能  (例)「A1・い」と「C1・さ」が選択時はOK    「A1・い」と「B2・く」と「C1・さ」が選択時はNG <html> <head> </head><body> <form> <table border="1"> <tr> <td>A1</td> <td><input type="checkbox" name="chk1" value="1">あ</td> </tr> <tr> <td> </td> <td><input type="checkbox" name="chk1" value="1">い</td> </tr> <tr> <td> </td> <td><input type="checkbox" name="chk1" value="1">う</td> </tr> <tr> <td>A2</td> <td><input type="checkbox" name="chk1" value="1">え</td> </tr> <tr> <td> </td> <td><input type="checkbox" name="chk1" value="1">お</td> </tr> <tr> <td>B1</td> <td><input type="checkbox" name="chk1" value="1">か</td> </tr> <tr> <td>B2</td> <td><input type="checkbox" name="chk1" value="1">く</td> </tr> <tr> <td> </td> <td><input type="checkbox" name="chk1" value="1">け</td> </tr> <tr> <td>C1</td> <td><input type="checkbox" name="chk1" value="1">さ</td> </tr> <tr> <td>C2</td> <td><input type="checkbox" name="chk1" value="1">し</td> </tr> <tr> <td> </td> <td><input type="checkbox" name="chk1" value="1">す</td> </tr> </table> <input type="submit" value="チェック"> </form> </body> </html> すみませんがよろしくお願いします。

  • cgiログデータ入力

    下記のようなものを作成しました。 if ($FORM{'WORD'} eq 'フォーム'){ &form; } elsif($FORM{'WORD'} eq '確認'){ &kakunin; } elsif($FORM{'WORD'} eq '入力'){ &nyuuryoku; } sub kakunin{ print "<FORM METHOD=POST ACTION=top_nyuuryoku1.cgi>\n"; print "<TABLE CLASS=TABLE2 CELLSPACING=0 CELLPADDING=2>\n"; print "<TR><TD WIDTH=80 CLASS=TD1>社員番号</TD><TD CLASS=TD2>$FORM{'BANGOU'}<INPUT TYPE=HIDDEN NAME=BANGOU VALUE=$FORM{'BANGOU'}></TD></TR>\n"; print "<TR><TD WIDTH=80 VALIGN=TOP CLASS=TD1>本文</TD><TD CLASS=TD2>$FORM{'NAKAMI'}</TD><INPUT TYPE=HIDDEN NAME=NAKAMI VALUE=$FORM{'NAKAMI'}></TR>\n"; print "</TABLE>\n"; print "<BR>と入力されました。これでよければボタンを押してください。<BR><BR>\n"; print "<INPUT TYPE=HIDDEN NAME=WORD VALUE=入力>\n"; print "  <INPUT TYPE=SUBMIT CLASS=BUTTON VALUE=入力>\n"; print "</FORM>\n"; } sub nyuuryoku{ print "入力しました。<BR>\n"; print "<A HREF='top.cgi'>戻る</A>\n"; open (FILE,">>top.log"); flock(FILE,2); @FILES = "$buffer\n"; print FILE @FILES; flock(FILE,8); close(FILE); } ※多少省略あり。 ※$bufferはこれの前のページから受け取ったもの。 kakuninのところの$FORM{'NAKAMI'}ではちゃんと半角スペースや改行が認識されていますが、nyuuryokuになるとだめです。 一体何が原因なのでしょうか?

    • ベストアンサー
    • CGI
  • チェックボックス 横並びに保存

    htmlファイルから、 <form action="./ppp.cgi" method="POST"> <table border="1"> <tr> <td> 好きな色(複数選択可):</td> <td> <input type="checkbox" name="color" value="white">白 <input type="checkbox" name="color" value="red">赤 <input type="checkbox" name="color" value="green">緑 <input type="checkbox" name="color" value="pink">桃色 <input type="checkbox" name="color" value="yellow">黄色 <input type="checkbox" name="color" value="purple">紫 <input type="checkbox" name="color" value="orange">橙色 <input type="checkbox" name="color" value="blue">青 <input type="checkbox" name="color" value="black">黒</td></tr> </table><br> <input type="submit" value=" 送信 "> <input type="reset" value=" クリア "> でデータを送信して、 ------------------------------------- #!/usr/bin/perl require './jcode.pl'; $file = "houkoku.txt"; if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } open( WRITE, "+< $file" ); @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*value,'sjis'); # タグ処理 $value =~ s/</&lt;/g; $value =~ s/>/&gt;/g; $value =~ s/\t//g; $value =~ s/\r\n/\n/g; $value =~ s/\r/\n/g; $value =~ s/^\s+//; $value =~ s/\s+$//; $FORM{$name} .= (defined $FORM{$name}) ? "," . $value : $value; @value = $value; print WRITE"@value\n"; } foreach ( keys %FORM ) { if( $FORM{$_} eq '' ) { $FORM{$_} = '入力がありません'; } } if ( $FORM{'color'} eq '' ) { $FORM{'color'} = '入力がありません'; } print "Content-Type: text/html\n\n"; print <<END_HTML; <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </head> <body> <center> <table border="1"> <td> あなたの好きな色</td> <td> $FORM{'color'}</td></tr> </table> </center> </body> </html> END_HTML exit; ---------------------------------- でデータを受け取って、houkoku.txtに書き込みをしたいのですが、 一応書き込みはされていますが、縦にデータが並んでいます。 横にカンマ仕切りで、white,yellow,redと保存するにはどうしたらよいでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Perl

専門家に質問してみよう