• ベストアンサー

データを読み込んだ時・・・・

natsuki_tkの回答

  • ベストアンサー
回答No.1

変数名が紛らわしいのでよくわかりませんが… データからの入力 $hantei ← hanteiari ソースコード内 $hanteiari = "hanteiari"; それを後で、「$hantei eq $hanteiari」で比較したら 真となるのは当たり前のように思います。 >&& $hantei eq $hanteiari) を && $kuuhaku eq "hanteiari") とでも変えればいいのではないでしょうか。 (さらにchomp $kuuhakuも必要になると思います)

ohirosi
質問者

お礼

どうも有難う御座いました。 確かに $hanteiari = "hanteiari";と、していて、 「$hantei eq $hanteiari」で真と成るのは当たり前なのに、と頭を抱えていました・・・・が、 $hantei eq"hanteiari"でうまくいきました。 有難う御座います!m(。-_-。)m

関連するQ&A

  • データを書き換えたいのですが・・・

    以下の方法で、CGIを書いたのですが、ユーザーIDを入れても、データベースを書き換えられません。 どこが問題なのか、教えて頂きたく質問しました。 *何分初心者で、見づらいと思いますが、宜しく御願いします。 ★目的  ユーザIDを入れると、”hanteinasi”の人が”hanteiari”にデータベースに書き換えられる。 ★データベース ○ユーザID:名前:メール:性別:年齢:(判定ありorなし):認証ID: 例)kk432 : 佐藤 : j@co.jp : 男 : 20 : hanteinasi : q1234 : ★CGI #!/usr/local/bin/perl require 'cgi-lib.pl'; &ReadParse(*form); require 'jcode.pl'; &jcode'convert(*form, 'sjis'); open(ENQ,"+<enquete.dat") || die "File 'enquete.dat' Open Error."; @add= <ENQ>; $i=0; chop @add;; foreach (@add){ ($userID, $name, $mail, $sex, $age, $hantei, $ninsyouID )=split(/:/, $_); if( $form{'user'} eq $userID && $hantei eq "hanteinasi"){ $hantei= "hanteiari"; @add[$i]; = "$userID:$name:$mail:$sex:$age:$hantei:$ninsyouID:\n"; i++; flock(ENQ, 2); print ENQ @add[$i]; flock(ENQ, 8); } elsif($hantei eq "singuru" || $hantei eq "hanteinasi"){ @add[$i] = "$userID:$name:$mail:$sex:$age:$hantei:ninsyouID:\n"; i++; flock(ENQ, 2); print ENQ @add[$i]; flock(ENQ, 8);}} close(ENQ); # -----ここから出力 ----- print "Content-type:text/html\n\n"; print << "END_OF_HTML"; <HTML><HEAD><TITLE>登録完了</TITLE></HEAD> <BODY><CENTER><FONT color="red"> 登録完了 </FONT></CENTER></BODY></HTML> END_OF_HTML}EOF

    • ベストアンサー
    • CGI
  • if構文を追加するとうまくうまく動きません。。。

    すみません、CGIの初心者なのですが、下記のプログラムをしたところうまく起動せず困っております。ifの構文を抜いた場合はうまく動くのですが、名前欄等を入力されなかった場合、エラー表示を出したく、if文を追加したのですが、うまく動きません。どなたか原因おわかりになりますでしょうか? #!C:\Perl\bin\perl # ライブラリ require 'cgi-lib.pl'; # デコードサブルーチン &ReadParse(*form); # ライブラリ require 'kaiin_sub.pl'; #名前欄、メールアドレス欄、住所欄、郵便番号欄がのチェック if($form{'name'} eq""||$form{'mail'} eq""||$form{'post'} eq""||$form{'jyusyo'} eq""){ #必要事項が空白のとき #エラーコードを表示するサブルーチン &input_error; #cgiプログラムの終了 exit; }else{ # ライブラリ require 'jcode.pl'; # 文字コード変換サブルーチン &jcode'convert(*form,'sjis'); # 連想配列から値だけを取り出し、区切りのハイフンを追加 $data = "$form{'name'}\n$form{'furigana'}\n$form{'mail'}\n$form{'post'}\n$form{'jyusyo'}\n$form{'jyusyo1'} \n$form{'kansou'}\n\n----------\n\n"; # 追加書き込みモード open(ENQ, ">>enquete.dat") || die "File 'enquete.dat' Open Error."; flock(ENQ, 2); print ENQ $data; flock(ENQ, 8); close(ENQ); # -----ここから出力 ----- print "Content-type:text/html\n\n"; print << "END_OF_HTML"; <HTML> <HEAD> <TITLE>(^_^)</TITLE> </HEAD> <BODY bgcolor="cornflowerblue"> <CENTER> <B><FONT size="6"> <FONT color="white"> <BR> 会員登録は完了致しました。 <P> ご協力ありがとうございました。</FONT> <P> <FONT color="white">(^O^)/~</FONT> </B> </CENTER> </BODY> </HTML> END_OF_HTML } またkaiin_sub.pは以下となります。 # -- 入力不足エラーを表示するサブルーチン -- sub input_error { print "Content-type:text/html\n\n"; print << "END_OF_ERROR"; <HTML> <HEAD> <TITLE>エラー</TITLE> </HEAD> <BODY> <CENTER> <FONT size="6" color="red"><B> <BR> お名前欄、メールアドレス、郵便番号、住所のいずれかが空白です <P> もう一度入力して下さい。 </B></FONT> </CENTER> </BODY> </HTML> END_OF_ERROR } 宜しくお願い致します。

    • 締切済み
    • CGI
  • 【再】Cookieを使用してフォームで送信

    #!/usr/local/bin/perl # ライブラリ require 'cgi-lib.pl'; require 'jcode.pl'; require 'keiji_write_sub.pl'; # デコード &ReadParse(*form); # 名前・メッセージ欄のチェック if ($form{'name'} eq "" || $form{'message'} eq "") { # 名前・メッセージが空ならエラー &input_error; # 終了 exit; } else { # 名前・メッセージも空でないなら書込処理 # HTMLタグと衝突する記号を変換 $name = &henkan($form{'name'}); $mail = &henkan($form{'mail'}); $title = &henkan($form{'title'}); $message = &henkan($form{'message'}); $message =~ s/\r\n/<BR>/g; # 日本語表記の日時を得る $time = &jp_time; # データを1行に(区切りはコロン) $new_data = "$time:$name:$mail:$title:$message\n"; &jcode'convert(*new_data, 'sjis'); open(KEIJI, "<keijiban.dat") || die "File 'keijiban.dat' Open Error."; # 過去のデータを全て配列に読み込む @all_data = <KEIJI>; close(KEIJI); # 配列の先頭に新規データ追加 unshift(@all_data, $new_data); open(KEIJI, ">keijiban.dat") || die "File 'keijiban.dat' Open Error."; #flock(KEIJI, 2); # (新規データ+過去データ)をファイルに上書き print KEIJI @all_data; #flock(KEIJI, 8); close(KEIJI); # 書込完了メッセ &write_ok; } というコードでdatファイルに書き込みしています。 この時に、名前などを1度入力したらCookieに記憶させて次からは自動で入るようにしたいのです。 あちこち検索して読んだりしたのですが、わからなくて…。 どなたか教えてください。

    • ベストアンサー
    • CGI
  • FireFox、Operaで出力するとhtmlソースが出てしまう

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=554339 を読んだのですが、きちんと text/htmlで出力しているにも関わらず、FireFox、Operaで開くとhtmlソースが出てしまいます。 (win IE、Mac Safariではhtmlとして(きちんと)開かれる) ソースは以下の通りです。 (テスト用で必ずエラーページを出力するようになっています。) --------------------- #!/usr/local/bin/perl require 'cgi-lib.pl'; require 'jcode.pl'; &ReadParse(*form); $userID = "$form{'id'}"."\n"; open(KEIJI,"<id.dat") || die "File Open Error"; @all = <KEIJI>; close(KEIJI); foreach(@all){ #ワードを配列に追加 push @wordList,$_; } $messageID = 0; foreach(@wordList){ if($userID eq $_){ $messageID = $count; last; } $count = $count + 1; } if($messageID eq 0){ &error_output; exit; } sub error_output{ print "Contest-type:text/html\n\n"; print << "EOM"; <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>404 Not Found</title> </head><body> <h1>Not Found</h1> <p>The requested URL was not found on this server.</p> </body></html> EOM } ------------------------ 要は「このファイルはhtmlです」とプラウザーに 伝えれればいいとは思うのですが、もしお分かりの 方がいらっしゃいましたら、教えていただければ ありがたいです。 よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • perlの日本語文字コードはどうすべき?

    perlで細かいことを理解できないままに呪文のように頭に require 'cgi-lib.pl'; require 'jcode.pl'; を使っていました。 そのうち文字化けなどの問題も出て、いろいろ調べたり質問したりして、jcode.plは古いからJcode.pmを使いなさいと指摘を受けたので、 require 'cgi-lib.pl'; require 'Jcode.pm'; と呪文変更を行いましたが、これについての使い方を理解せぬうちに、use Encode qw(from_to encode);としなさいと指摘を受け、 require 'cgi-lib.pl'; use Encode qw(from_to encode); と変えて使っていました。 ところが、このパターンを使っていたところ、GETでのデータの受渡がうまくできない(internal server error)となることに気づきました。 2つ目のパターンでも同じでした local($key,$val); undef(%in); &ReadParse; my($method) = $ENV{'REQUEST_METHOD'}; if ($method eq "GET"){ $QUERY_DATA = $ENV{'QUERY_STRING'}; }elsif ($method eq 'POST'){ read(STDIN, $QUERY_DATA, $ENV{'CONTENT_LENGTH'}); }else{ &error; } データの受信はこのようにはじめています。 そもそもJcode.pmやuse Encode qw(from_to encode);というのはjcode.plに変わる日本語変換のパッケージなのでしょうか? また、 require 'cgi-lib.pl'; require 'jcode.pl'; use Encode qw(from_to encode); とするとGETでの受渡も問題なかったのですが、2つを混在させても問題ないのでしょうか? というのも、メール送信で文字変換させるときに sub jis{ my $msg = $_[0]; Encode::from_to($msg, "shiftjis", "iso-2022-jp"); return $msg; } としているので、use Encode qw(from_to encode);がないとEncode::from_to()が使えないのかなと想像し2つをセットで使用しています。(冒頭でuse Encode qw(from_to encode)を宣言し、変換部分でEncode::from_to()を使用) jcode.pl、Jcode.pm、use Encode qw(from_to encode)、Encode::from_to()の関係について教えてください。 もちろん自分でもネットで調べてみましたが、思うように解説してあるところが見つからず困っています。

    • ベストアンサー
    • Perl
  • デコードフォームについて。

    以下のスクリプトについて質問があります。かなり多いのですが・・・ sub DecodeForm #返り値:Name=>Val のハッシュ(グロブ) #使用例:*form = EncodeForm(); print $form{name}; { my($encoding) = @_; my($method) = $ENV{'REQUEST_METHOD'}; local($query, @in, $key, $val); require 'jcode.pl' if $encoding; if ($method eq 'GET') { $query = $ENV{'QUERY_STRING'}; } elsif ($method eq 'POST') { read(STDIN, $query, $ENV{'CONTENT_LENGTH'}); } local(@query) = split(/&/, $query); foreach (@query) { tr/+/ /; ($key, $val) = split(/=/); # %HH形式を元の文字にデコードする。 $key =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("c", hex($1))/ge; $val =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("c", hex($1))/ge; $val =~ s/\r\n/\n/g; jcode'convert(*key, $encoding) if ($encoding); jcode'convert(*val, $encoding) if ($encoding); $in{$key} = $val; } return *in; } 多いので先頭から順に箇条書きにさせて頂きます。 ・Name=>Val の意味。(#以下がメモであることは分かっています) ・グロブとは何か ・*form = EncodeForm(); print $form{name}; の意味。(特に、先頭の*が分かりません) ・my $encoding という変数も見たことがあるのですが、my($encoding) と my $encoding はどう違うのか。 ・クエリとは何か ・jcode.pl とは、インストールしたPerlに標準でついているライブラリなのか?そうでないのならjcode.plとは何か? ・%HH形式とは何か ・\rの意味 ・jcode'convert の意味 ・*key の * の意味 ・*in の * の意味 多くて申し訳ないです。分かる方いらっしゃいましたご教授くださると幸いです。よろしくお願いします。

    • ベストアンサー
    • Perl
  • ファイルを読み込み、URL転送をしたい

    URL転送するプログラムを作成してます。 以下のURLでアクセスします。 http://hoge.com/index.cgi?mou=1 以下のデータ構成となってます。 dat.cgiのデータ 1<>http://google.co.jp/ 2<>http://yahoo.co.jp/ 3<>http://goo.ne.jp/ 4<>http://msn.co.jp/ この場合1レコード目のURLを転送しgoogleのサイトを表示させたいのですが、初歩的なミスでサーバーエラー 500を表示しています。 index.cgi (ここから) #!/usr/bin/perl # 文字コード取得 require './jcode.pl'; $datfile = "./dat.cgi"; open(DB,"$datfile") || &error("Open Error : $datfile"); @lines = <DB>; close(DB); @new=(); foreach $line (@lines) { $flag=0; ($num,$mourl) = split("<>", $line); foreach $mou (@DEL) { if ($mou eq "$num") { print "Location: $mourl"; } } } (ここまで) 同じホルダーに jcode.pl dat.cgi は入っています。 申し訳ありません。よろしくご指導をお願いいたします。

  • ver.5.8.8の文字化け

    サーバの移転でアクセスログを変更しているのですが、CGIで苦戦しています。 テキストデータが全て文字化けをしてしまいます・・・。 エキストデータ、ソースは全てSJISです。 perlのバージョンが5.8.8になりましたので、それまで使用していたjcode.plが使えないようです。 require './jcode.pl'; jcode::convert($refer, 'sjis') if ($charset); でエラーになります。 jcode.pm用に use Jcode; Jcode::convert($refer, 'sjis') if ($charset); としてもエラーになります。 これはjcode.pmが入ってないからだと思うのですが、 何か方法はないでしょうか? PHPはわかるのですが、Perlは全然わかりません。 どうか、ご教授をお願いします。

    • ベストアンサー
    • Perl
  • Jcode CP932 のエラーを回避したい。

    プログラム初心者です。 form Mailを設置し、フォーム入力→確認画面までは動くのですが、 最後に、送信ボタンを押すと、500エラーになります。 お手上げです。詳しい方お教えください。 サーバーのエラーログをみたところ、 Can't locate object method "CP932" via package "Jcode" at form_mail.cgi となっていました。 ━━ #!/usr/bin/perl require 'jcode.pl'; $sendmail = '/usr/sbin/sendmail'; use Jcode; ━━ エラーと思われる箇所 sub jis { $msg = $_[0]; # Jcode::convert(*msg,'jis'); $msg = Jcode->new($msg, "UTF8")->CP932; &jcode'convert(*msg,'jis'); } ━━

  • jcode.plの使い方

    最近cgiを始めたばかりの者です。 HTMLでフォームを作り、 FORM action="view.cgi"method="GET" でcgiに渡すようにしました。 CGIで受け取った文字に全角があると %83%8B%83i%83e%83B%83N%83X のような文字化けをします。 調べてみたところjcode.plを使えば 文字化けを回避できるようですがうまく いきませんでした。 質問1.jcode.plを読み込ませるのは 上記のview.cgiで良いのでしょうか。 質問2.require "jcode.pl";といれた後 具体的にどのように受け取ったデータを jcodeに渡せばいいのでしょうか? @data = split(/&/,$ENV{QUERY_STRING}); で@dataに受け取った情報を渡しています。 ご教授頂ければと思います。 よろしくお願いします。

    • ベストアンサー
    • CGI