PerlおよびCGIでのファイルへの書き込み・読み出しについて

このQ&Aのポイント
  • PerlおよびCGIを最近始めた方が、ファイルへの書き込み・読み出しの方法について質問しています。
  • 特定のページにある2つのラジオボタンの情報をファイルに書き込みたいがうまくいかないとのこと。
  • 問題のプログラムコードとして、フォームの設定やファイルへの書き込み処理が示されています。
回答を見る
  • ベストアンサー

何で出来ないか分かりません

 PerlおよびCGIを最近はじめました。教科書を見ながら作っているのですが、ファイルへの書き込み・読み出しがよく分からないので、質問しました。  1つのページにラジオボタンが2箇所あり、それぞれ選択後「送信」ボタンを押して次のページへ行くのですが、ボタンの情報をファイルに書き込みたいのですがうまくいきません。 プログラムは、 print startform( -method => 'POST', -action => 'menu.cgi', ); print blockquote( radio_group( -name => 'A', -values => [ '1', '2', '3', '4', '5' ], -default => '1', -linebreak => 'true', ) ); print hr; print blockquote( radio_group( -name => 'B', -values => [ 'a', 'b', 'c', 'd', 'e', 'f','g', 'h' ], -default => 'a', -linebreak => '', ) ); print hr; print br; print submit( -value => '送信', ); print reset; print hidden( -name => 'type', -value => '', ); print end_form; print end_html; #----------------------------------------- open ( NEW, '> data.txt' ) or die "$!\n"; print NEW "$gakka, $gakunen, $type"; close ( NEW ); ・・・という感じです。途中の『hidden』は次のページで必要なものです。 このままやると、『data.txt』は作られるのですが、 , , という内容になってしまいます。  初歩的なこととは思いますが、いろいろ試しても出来ませんでした。よろしくお願いします。

noname#33727
noname#33727
  • Perl
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • leap_day
  • ベストアンサー率60% (338/561)
回答No.2

僕の勉強しているperlの書き方と表記方法が違うみたいなので参考になるかどうか分からないですけど・・・ <ディスプレイ表示> ○1○2○3○4○5 ――――――――――――――― ○a○b○c○d○e○f○g○h ――――――――――――――― (リセットボタン)(サブミットボタン) こんな感じで表示されて data.txt に 1,a,, のように書き込まれます($typeの部分が何を表示するのか分からなかったので空白になってます) <スクリプト部> print <<"EOM"; <form action="./menu.cgi" method="post"> <input type="radio" name="A" value="1">1 <input type="radio" name="A" value="2">2 <input type="radio" name="A" value="3">3 <input type="radio" name="A" value="4">4 <input type="radio" name="A" value="5">5 <hr> <input type="radio" name="B" value="a">a <input type="radio" name="B" value="b">b <input type="radio" name="B" value="c">c <input type="radio" name="B" value="d">d <input type="radio" name="B" value="e">e <input type="radio" name="B" value="f">f <input type="radio" name="B" value="g">g <input type="radio" name="B" value="h">h <hr> <input type="hidden" name="type" value=""> <input type="reset"> <input type="submit" value="送信"> </form> EOM (menu.cgi) open(NEW,">./data.txt"); print NEW "$in{'A'},$in{'B'},$in{'type'}\n"; close(NEW);

noname#33727
質問者

お礼

ご解答ありがとうございました。 書き込む命令は次のページに書くんですね・・・。それすら知りませんでした。 おかげでやっと出来ました。ありがとうございます。

その他の回答 (1)

  • edomin
  • ベストアンサー率32% (327/1003)
回答No.1

「$gakka」と「$gakunen」の中身は何?

noname#33727
質問者

補足

スイマセンでした。直すのを忘れてました。 $gakka  → 'A'のradio_group $gakunen → 'B'のradio_group です。

関連するQ&A

  • ラジオボタンで二つの情報を受け渡したい

    お問い合わせのフォームで、ラジオボタンによって選択させる項目があります。 ラジオボタンそのもののvalueで、項目の名前を受け渡しているのですが、それと同時に、対応したもうひとつの情報をhiddenで送りたいと思っているのです。 <input name="office" type="radio" value="★" /> <input name="office_mail" type="hidden" value="●●" /> ↑ これが同時にCGIへ送られる ユーザーはラジオボタンで選択肢を選び、cgiには★と●●(hiddenなのでユーザーにはわからない)の情報が送られているようにしたいのです。 どうかお知恵をお貸しください。

  • ラジオボタンについて

    ラジオボタンのnameにそれぞれ違う名前をつけても 選択の制限を1つだけにできるやり方はありませんか? 例 <input type="hidden" name="a1" value="0151" /> <input name="a" type="radio" value="1" /> <input type="hidden" name="b1" value="0152" /> <input name="b" type="radio" value="1" /> <input type="hidden" name="c1" value="0153" /> <input name="c" type="radio" value="1" /> 私がやりたいことはあるプログラムシステムで使用するため ラジオボタンの上にhiddenでそれぞれ指定してるため このような形で表示できないかと、おもっています。

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

    Dreamweaverを使ってHPの作成をしています。 問合せのフォームについて教えてください。 CGIの知識がないため、以前他の方が作ったHPがあって、そのソースを見ながら作っています。 その中で、いくつかわからない点があるので教えてください。 1.<form name="●●●" method="post" action="/cgi-tool/formmail.cgi">   <INPUT TYPE="hidden" NAME="FM_CONFIG" VALUE="/cgi-local/config.txt">   <INPUT TYPE="hidden" NAME="OPT:NEED:a_name" VALUE="貴社名">・・・ と続くのですが、最初のaction=以降が何のことかわかりません。上記のように書く場合は、"/cgi-tool/formmail.cgi"というCGIを作成しなければならないのでしょうか。以前の方は、"/cgi-local/config.txt"というテキストファイルは作成してありました。 2.最後に、<input type="submit" value="確認画面へ">というのをいれてボタンは表示されましたが、そのボタンを押してもページが表示されません。何か、他の作業を加えなければなりませんか? CGIというのは、サーバーによって設定をかえなければいけなかったりするのでしょうか? ちなみに、テストページで使用してみてみているのはページオン?、実際にアップするのは会社のサーバーになります。 全く知識がないためとんちんかんなことを聞いていたら申し訳ございませんが、助言をおねがいします。

  • テキストファイルを読んで次のcgiファイルを動かすには?

    お願いします。初心者です。 0001.cgi で 正解 Einstein を Send すると  file.txt に -1 と書き込むようにしました。 さらに  0002.cgi へのリンクが出て、これをクリックすると 0002.cgi が動くようにしました。  そして、 file.txt に -1 が ない場合に 0002.cgi が動き始めないようにしようとしています。 0001.cgi の問題に正解しないと、0002.cgi へ行けない ようにしようとしています。どうしたらよいのでしょうか? どうか、お教えください。 よろしく、お願いいたします。 0001.cgi は、こんなふうになっています。 ↓ ---------------------------------------- print header; # -------------------------------------- print start_html('0001'); #ここに問題を入れました 答は Einstein です。 print startform( -method => 'POST', -action => '0001.cgi' ); print blockquote( textarea( -name => 'die Antwort', -rows => '3', -columns => '40' ) ); print br; print submit(-value => 'Send'); print reset; print endform; # -------------------------------------- if (param('die Antwort') eq 'Einstein'){ print h2('Einstein'); print h2('<a href="0002.cgi">next page</a>'); open(FILE, '>>file.txt') or die "$!"; print FILE ("-1"); close(FILE) } else{ print h3('false'); } # -------------------------------------- print end_html; # --------------------------------------

    • ベストアンサー
    • CGI
  • ラジオボタンでうまくするには・・・・

    初めまして。 現在下記のプルダウン形式で、一つの価格が同じなので問題なく動くのですが <FORM action="cart/sys/cart.cgi" method="post"> <INPUT type=hidden value=005 name=num> <INPUT type=hidden value=●●● name=name> <INPUT type=hidden value=2000 name=tan> <SELECT name=sur> <OPTION value="" selected>購入数量</OPTION> <OPTION value=1>1</OPTION> <OPTION value=2>2</OPTION> <OPTION value=3>3</OPTION> <OPTION value=4>4</OPTION> <OPTION value=5>5</SELECT> <INPUT type=submit value=カートに入れる> </FORM><BR> <FORM action="・・・/cart.cgi" method="post"> <INPUT type=hidden value=005 name=num> <INPUT type=hidden value=●●● name=name> <INPUT type=hidden value=2000 name=tan> </FORM> 同じ商品で1・2・3・4・5のそれぞれに単価が変わる設定をしたいのですが、うまくいく方法が見つからないです。 ラジオボタン形式で作ってみたものの・・・・ <FORM action="・・・/cart.cgi" method="post"> <INPUT type=hidden value=005 name=num> <INPUT type=hidden value=●●● name=name> <INPUT type=submit value=カートに入れる> </FORM> <FORM> <INPUT type="radio" name="name1" value="2000">1袋<BR> <INPUT type="radio" name="name1" value="3900">2袋<BR> <INPUT type="radio" name="name1" value="5800">3袋<BR> <INPUT type="radio" name="name1" value="7500">4袋<BR> <INPUT type="radio" name="name1" value="8500">5袋</FORM> としてみましたがうまくいきません。 なにか方法ございましたら、ご教授いただければと思います。

    • ベストアンサー
    • HTML
  • hiddenを使ったセッション

    こんにちは。 セッションを使ったデータの受け渡しをしたいのですが、 (携帯を考慮してcookieは使わないやり方で) hiddenにセッションIDを持たせる方法で書いてみたのですが、 うまくいきません。 送られてはいるけど、受け取れていないのかな…? とは思うのですが、対処がわかりません。 以下のソースです。(確認用でGETにしてます) 望むのは、printされたセッションIDとテキスト内のセッションIDが 同一になる(=セッションが保持できてるということですよね?) かつ、submitしても、セッションIDが変わらない、という状況です。 よろしくお願いいたします。 print "Content-type: text/html\n\n"; use CGI; use CGI::Session qw/-ip-match/; if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $query_string, $ENV{'CONTENT_LENGTH'}); } else { $query_string = $ENV{'QUERY_STRING'}; } my $cgi = new CGI; CGI::Session->name("session_id"); my $session = new CGI::Session("driver:File", $cgi, {Directory=>'./session'}); $sid = $session->id(); $session->param('value', $sid); $sesid = $session->param('value'); print $sesid."<br>\n"; undef($session); @query = split(/&/, $query_string); foreach $query (@query){ ($name, $data) = split(/=/, $query); $data{$name} = $data; } print <<"EO"; <html><head> <title> </title> </head> <body><hr><hr> <form action="./test.cgi" method="GET"> <input type="hidden" name="session_id" value="$sesid"> <input type="text" name="btn" size="50" value="$data{'session_id'}"><br> <input type="submit" value="submit"><br> </form> <hr><hr></body></html> EO

  • 同じnameのhiddenで別々の内容のvalueを送りたい

    同じnameのhiddenで別々の内容のvalueを送りたい <form action="" name="MyForm" method="post"> <input type="hidden" name="rm" value="×××.txt">テスト1 <input type="button" value="閲 覧" onClick="MyForm.action='rm.cgi';MyForm.submit();"> <input type="button" value="削 除" onClick="MyForm.action='delete.cgi';MyForm.submit();"> <input type="hidden" name="rm" value="○○○.txt">テスト2 <input type="button" value="閲 覧" onClick="MyForm.action='rm.cgi';MyForm.submit();"> <input type="button" value="削 除" onClick="MyForm.action='delete.cgi';MyForm.submit();"> <input type="hidden" name="rm" value="△△△.txt">テスト3 <input type="button" value="閲 覧" onClick="MyForm.action='rm.cgi';MyForm.submit();"> <input type="button" value="削 除" onClick="MyForm.action='delete.cgi';MyForm.submit();"> 別のcgiでform送信すると、txtファイルが生成され、上記の繰り返しの部分に追加されていく様なイメージです。 閲覧・削除ボタンを押すと直前のhiddenを送信したいのですが、現状では一番最初のhiddenが送信されてしまいます。 方法がわかる方いらっしゃいましたら、御回答お願い致します。

    • ベストアンサー
    • HTML
  • ラジオボタンの内容を受けてCGIでコメント表示

    あるhtmlページにラジオボタンを設置しています。 このボタンを選択したらこのページ、このボタンの場合はこのページ、 と、CGIを使って、選択したボタンによってさまざまなページにジャンプさせています。 最後に、判定結果を掲載するページとして、 インラインフレームを設置し、そのなかにcgiを読み込ませて 選択したラジオボタンによってそのなかに表示させるコメントを変えたいです。 Q1でaを選んだ場合はこのコメント、 Q2でbを選んだ場合はこのコメント、 と、拾ってくる質問が記載されているhtmlページが複数にわたります。 以下でいう、test2.cgiは、どのように記述したらいいでしょうか? サンプルコードなど掲載されているサイトがあったら教えてください。 <ラジオボタンが設置してあるhtmlページ> <form name="q1" action="test1.cgi" method="POST"> 質問 <input type="radio" name="q1" value="q1_a">回答a <input type="radio" name="q1" value="q1_b">回答b <input type="radio" name="q1" value="q1_c">回答c <input type="submit" value="判定" /> <コメントを表示させるhtmlページ> 判定結果をお知らせします <div id="frame"> <iframe src="test2.cgi" title="判定結果"> </iframe>

    • ベストアンサー
    • CGI
  • ボタン別でフォームの送信先を変えたい

    同じ場所に3つある今のフォームを1つにまとめたいのですが、 「ラジオボタン」でやるのではなく「submitボタン」によって送信先の振り分けはできないのでしょうか? CGIなどを使って一旦クッションを置くのは問題ないです。何か参考になるサイトさんとかありましたら教えてください。 <form action="1.php" method="get" class="form" target="a" name="1"> <input type="hidden" name="s" value=90 /> <input type="hidden" name="t" value="e" /> <input type="text" name="moji" value="" size="8" /> <input type="submit" name="button" value="検索" /> </form> <form action="http://e.php" method="get" name="2" target="a"> <input type="hidden" name="test" value=et /> <input type="text" name="77" value="" size="8" /> <input type="submit" value="検索2" class="button" /> </form> <form action="http://8.cgi" method="get" target="a"> <input type="text" size="8" name="q" value="" /> <input type="submit" value="検索3" class="button" /> <input type="hidden" name="sut" value="JJ" /> </form>

    • ベストアンサー
    • CGI
  • CGI.pmによるプルダウンメニューのvalue値取得方法について

    CGI.pmを使ってプルダウンメニューのvalue値を得たいのですが、ラジオボタンと同じ記述で取得できると聞きましたが上手くいきません。ちなみにラジオボタンはうまくいきました。HTMLの記述が良くないのでしょうか?教えてください。 【HTML】 <select size="1" name="q1"> <option>選択してください</option> <option value="A">A</option> <option value="B">B</option> <option value="C">C</option> </select> 【CGI】 use CGI; $q = new CGI; $p1 = $q->param('q1');

    • ベストアンサー
    • Perl