• ベストアンサー

CGIを使用してデータの送受信、「"」が認識されない。

CGIを使用してフォームに入力されたデータの送受信を行っています。 1.入力フォームにデータを入力       ↓ 送信 2.上記のデータを表示させて確認。   (それぞれのデータはHIDDENで送信。VALUE=\"$FORM{\"NAME\"}\"のようにしている)       ↓ 送信 3.ログファイルへ書き込み としていますが、2までは"を含む文字列が認識されてますが、3でなくなってしまいます。 自分としては2の()内のVALUEあたりが原因じゃないかと思ってるんですが。。。 $buffer =~ s/"/"/g; などやってみましたが、ダメでした。 どのようにしたらいいのでしょうか?

  • w-inty
  • お礼率72% (1169/1618)
  • CGI
  • 回答数2
  • ありがとう数1

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

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

テストしていませんが、 VALUE="$FORM{\"NAME\"}" では駄目でしょうか?

w-inty
質問者

お礼

エラーになってしまいました…。 とりあえず、 $FORM{'NAME'} =~ s/"/"/g; $FORM{'TITLE'} =~ s/"/"/g; のようにひとつひとつの作業を2のコードのところへ付け足したところ、"は認識されました。 でも何かイマイチスマートじゃなくていやなんですけどね…。これしか方法ないんでしょうか?

その他の回答 (1)

  • bikkuri
  • ベストアンサー率33% (23/68)
回答No.2

$bufferに入っている値は、生のPOSTのデータですか? その場合は、'"'は'%22'の様に16進文字に変換されていますので、 上手く行きません。 といって、$buffer =~ s/%22/&quot;/g; としてその後、大丈夫かは怪しいです。 やはり、使う前に地道に変換するのが正しいと思います。 ただし、'"'以外にも本来'<', '>', '&'なども処理する必要が あるので、関数を用意すべきでしょう。 (CGI関係のモジュールにはこういうのもあるはずです)

関連するQ&A

  • CGIの組み方が解りません

    会社のHP制作しているのですが、 見積もりフォーム作ろうと思っています。 <FORM action=http://●●●.jp/●●●cgi method=POST >←良く解りません <INPUT type="hidden" name="mailto" value="●●●@●●●.jp"> <INPUT type="hidden" name="subject" value="見積もり依頼"> <INPUT type="hidden" name="location" value="formend.html"> どこかのサイトを拝見してこのような感じで行ったのですが、 最初のform actionが良く解りません。 そもそもCGIをどのようにつくり設置するのか根本的なことが良く解りません。 何処か解り易く説明しているcgiの組み方、メールフォームの作り方などがあれば教えてください。

  • javascriptのフォームデータをCGIで複数行取得

    javascript内の変数を複数行のフォームでCGIに渡したいのです。 その際のコードが document.write("<form name='form1' action='xxx.cgi' method='post' enctype='text/plain'>"+           "<input type='hidden' name='state' value=''>"+           "<input type='hidden' name='state2' value=''>"+           "</form>"+           "<input type='button value='送信' onClick='tocgi(a,b)'>");       tocgi(n1,n2){       document.form1.state.value=n1;       document.form1.state2.value=n2;       document.form1.submit();        } なのですが、a、bの値がそれぞれ10、20だった時、一行目のフォームデータは出力されるのですが、2行目が出力されないのです。実行結果でいうとstate=10ですね。引数を一つにしても同じでした。何がいけないのか、全然わかりません…。それとも、CGIのコードの書き方に問題があるのでしょうか。でも、CGIの方は変えずに単純にHTMLで記述すると上手くいくみたいなんですよね。どなたかわかる方がいたら助けて下さい!

    • 締切済み
    • CGI
  • 1つのフォームで2つのcgiにデータを送るには

    どうぞよろしくお願いします。 テキストエリアにデータ入力して送信ボタンを押すと、 入力した内容が2つのcgiに送られるというようにしたいのですが、こういったことは可能でしょうか? イメージとしては下記のような感じです。 <form action="CGI名1" action="CGI名2" method="POST"> <inpu type="text" name="text1" size="32"> <input type="submit" value="送信"> </form> 両方の送信結果を別々のウインドウで表示します。 もしformタグでは不可能な場合、何か代換法がありましたらよろしくお願いいたします。

    • 締切済み
    • CGI
  • javascriptからCGIへの値渡し

    cookieは利用しない方向で考えています。 HTML上のdocument.form01.のsubmitが押下されたら一度手入力されたデータ(userinput)を加工し、 別のフォームform02.valueに格納してtest.cgiにPOSTで投げる動作を期待しています。 下記だとページ遷移無しで一時的な格納まで確認しましたが CGIへの送信が機能していないようです。 どの様にすべきでしょうか? [html] <script type="text/javascript"> <!-- function onSubmit() { document.form02.sendform.value = '\"' + document.form01.userinput.value + '\"'; document.form02.submit(); } --> </script> <body> <form name="form02" method="POST" action="test.cgi"> <input type="hidden" name="sendform" value=""> </form> <form method="POST" action="" name="form01"> <input type="text" name="userinput"> <input type="submit" value"送信" onclick="return onSubmit();"> </form> </body> </html>

  • submitではなくbuttonで送信

    事情があり、submitではなくbuttonでフォームのデータを送信したいのですが、以下のように書くとbuttonでは4567が送信されません。 <form action="test.cgi" method="post"> <INPUT type="hidden" name="aaa" value="1234"> <INPUT type="submit" name="bbb" value="4567"> </form> ↓ <form action="test.cgi" method="post"> <INPUT type="hidden" name="aaa" value="1234"> <INPUT type="button" name="bbb" value="4567" onclick="submit();" > </form> submitと同じように、bbbのデータ4567も送信するにはどのように書けばよいのでしょうか? 宜しくお願いします。

  • CGIのメールフォームエラーについて

    htmlの送信フォームを作っています。 htmlで作ったデータを次の確認画面のhtmlにもっていって確認させ、最終的には送信とメッセージありがとうというコメントを出したいのです。 <form method="post" action="form.cgi" name="message"> <input type="hidden" name="Thanks" VALUE="thanks.html"> など、そういったところがネックになっているように思うのですが、どこをいじればいいのでしょうか? 持っていきたい項目は、名前・住所・性別・メールアドレス・コメントです。 漠然としていて申し訳ありませんが教えてください。よろしくお願いいたします。

    • 締切済み
    • CGI
  • 送信先CGIの選択

    <form method="post" action="file.cgi"> <input type="hidden" name="password" value="xxx"> <input type="hidden" name="action" value="zzz"> <input type="text" name="name" size="50" value=""> </form> この場合、送信先CGIがfile.cgiに固定されていますが、action="送信先"をリストボックス等を使って複数選択できるようにしたいと考えています。可能でしょうか?

    • ベストアンサー
    • Perl
  • SSLで暗号化されたデータを受取るCGI

    SSLというものを使ったことがない者です。 下記の様な送信フォームを URLをhttps://****.htmlという名前にすると暗号化されてデータが送られるそうですが ========= 送信フォーム ============ <form action="****.cgi" metod="POST"> <input type=text name="koumoku"> <input type=submit value="送信"> </form> これを受ける側のCGIは、従来どおり ======== 受側CGIファイル ======== #! /usr/local/bin/perl require "./cgi-lib.pl"; &ReadParse(); $koumoku=$in{'koumoku'}; とすれば、koumokuで送信されたデータは、勝手に暗号化前に戻されて$koumokuに入るものなのでしょうか それともCGI側に何か暗号化されたデータを暗号化前に戻すコードみたいなものが必要なのでしょうか

    • ベストアンサー
    • Perl
  • 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
  • 複数FORMの一括実行について

    通常であれば同一サイト内に下記のソース(フォーム)が入るのですが、 これを改良しサイト上で希望の送信先をチェックボックスで選択し一回の操作で複数のcgiを実行したく思います。 良いcgiがあれば教えてください。 又は改造ができるcgi、修正方法を分かりましたらお教え願います。 サイトA <form action="https://aaa.cgi" method="post"> <input type="hidden" name="名前" value="name"> <input type="hidden" name="メール" value="mail"> <input name="Submit" type="submit" value="送信"> </form> サイトB <form action="https://bbb.cgi" method="post"> <input type="hidden" name="名前" value="name"> <input type="hidden" name="メール" value="mail"> <input name="Submit" type="submit" value="送信"> </form> サイトC <form action="https://ccc.cgi" method="post"> <input type="hidden" name="名前" value="name"> <input type="hidden" name="メール" value="mail"> <input name="Submit" type="submit" value="送信"> </form>

    • 締切済み
    • CGI

専門家に質問してみよう