• ベストアンサー

CGIプログラムの最後に?がついてします。

jyamatoの回答

  • ベストアンサー
  • jyamato
  • ベストアンサー率66% (2/3)
回答No.1

こんにちは。 とりあえず、<form method=GET action=a.cgi>の部分を <form method=POST action=a.cgi>とすると'?'は出なくなると思います。 どのような引数渡しを行っているか分かりませんが、 <form>から</form>の間の引数を渡すのであれば、method='POST'で構わないと思います。 GET METHODでは、データを、リクエストURLの後ろに付け加える形で送信されますので、今回の引数無しパターンですと'?'が付くだけになるのだと思います。 以下のサイトを参考にしてみて下さい。

参考URL:
http://www.futomi.com/lecture/form/
SpeedStep
質問者

お礼

POSTに変更したら?が無くなりました。有難う御座います。 もう一点関連したご質問ですが、 cgiでは無く、htmlを呼び出す箇所があるのですが、 <FORM method=GET action=../a.html> とすると、やはり?が付きます。ここでPOSTにするとエラー になってしまい、飛びません。

関連するQ&A

  • 1つのsubmitボタンで2つのCGIを呼び出すことは可能ですか?

    今は、htmlで <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> </head> <body> <form action="abc.cgi" method="get"> 以下省略 <input type="submit" value="送信"> </form> <form action="xyz.cgi" method="get"> 以下省略 <input type="submit" value="受信"> </form> </body> </html> という感じで書き、2つのボタンで個々に2つのCGIを呼び出していますが、 これをメールの送受信のように、1つのボタンで2つのCGIを呼び出すことは可能なのでしょうか。 教えてください。お願いいたします。

    • ベストアンサー
    • CGI
  • CGI:method="post"でもGETになる

    CGIで標準入力によりフォームデータを取得できないため、環境変数%ENV内の値を 調べましたところ、入力フォーム(html)のformタグでmethod="POST"と明示しているにも 拘らず、REQUEST_METHODの値がGETになっており、POST用のCONTENT_LENGTHも GET用のQUERY_STRINGも共に空になっております。 htmlでmethod="GET"と指定した場合には、REQUEST_METHODの値は正しくGETになり QUERY_STRINGからフォームデータを取得できます。 同じCGIをPC上のApache2.4でテストした結果、REQUEST_METHODはhtmlのmethod=~で 指定した通り正しくPOSTまたはGETとなり、それぞれフォームデータを 取得できることを確認いたしております。 この点についてプロバイダに問合せいたしましたが、サポート対象外ということで、 回答を得ることができませんでした。 このような現象の原因について、お心当たりのある方がおられましたら、 ご教示いただけないでしょうか、お伺いいたします。 (1)ホスト動作環境 a.CGIサーバ:Apache b. perl 5.10系 (2)PC動作環境 a.OS: Windows 7 b.ブラウザ: Internet Eexplorer 11 c.CGIサーバ: Apache 2.4 d. Activeperl 5.20

    • 締切済み
    • CGI
  • CGIで送受信するプログラムの作り方

    入力フォームを返すのとフォームからのPOSTとGETを受け取って処理する、 同一のスクリプトを、CGI、C言語で作成致しましたが、 上手く動作していません。(白紙のページが表示されるだけでした。) getenv("REQUEST_METHOD");がNULLだった場合に本来表示されるハズのページが表示されるはずで、これが出ないという事は、getenv("REQUEST_METHOD");がNULLでなく、うまく動作していないのでは? こう考え、getenv("REQUEST_METHOD");の中身を表示させた所、GET と表示されました。 何も送信していないのに、GETと判断されているのは何故でしょうか? また、正しい動作をするプログラムをご提示頂けますと助かります。 /* form2.c */ #include <stdio.h> #include <stdlib.h> int main(void) { int len; char *clen; char *data,*method,*qs; printf("Content-type: text/html\n\n"); printf("<html><head></head><body>\n"); method = getenv("REQUEST_METHOD"); printf("%s\n", method); if(method == NULL){ printf("Content-type: text/html\n\n"); printf("<html>\n"); printf("<head>\n"); printf("<title>form test page</title>\n"); printf("</head>\n"); printf("<body>\n"); printf("<form method=\"post\" action=\"form2.cgi\">\n"); printf("<input type=\"text\" name=\"fieldname\" size=\"40\"><br>\n"); printf("<input type=\"text\" name=\"fieldname2\" size=\"40\"><br>\n"); printf("<input type=\"text\" name=\"fieldname3\" size=\"50\"><br>\n"); printf("<input type=\"submit\" value=\"書き込み\">\n"); printf("</form>\n"); printf("<form method=\"get\" action=\"form2.cgi\">\n"); printf("<input type=\"text\" name=\"fieldname\" size=\"40\"><br>\n"); printf("<input type=\"text\" name=\"fieldname2\" size=\"40\"><br>\n"); printf("<input type=\"text\" name=\"fieldname3\" size=\"50\"><br>\n"); printf("<input type=\"submit\" value=\"書き込み\">\n"); printf("</form>\n"); printf("</body>\n"); printf("</html>\n"); exit(0); } //POST else if(!strcmp(method, "POST")){ clen = getenv("CONTENT_LENGTH"); if(clen == NULL){ exit(0); } len = atol(clen); data = malloc(len+1); scanf("%s",data); data[len] = '\0'; printf("Content-type: text/html\n\n"); printf("<html><head></head><body>\n"); printf("%s<br>\n", data); printf("</body></html>\n"); } //GET else if(!strcmp(method, "GET")){ qs = getenv("QUERY_STRING"); printf("Content-type: text/html\n\n"); printf("<html><head></head><body>\n"); printf("%s<br>\n", qs); printf("</body></html>\n"); } printf("</body></html>\n"); } 宜しくお願いいたします。

    • ベストアンサー
    • CGI
  • CGIによるアンケートフォーム

    CGIでのアンケートフォームを作るのに次のコードの○○○△△△.cgiというところには何を入れればいいのでしょうか? <FORM action="○○○△△△.cgi" method="POST">

    • ベストアンサー
    • CGI
  • cgiファイルを直接は見れなくするには

    windowsXP Home SP3 apache2.2でCGIプログラムの勉強をしています。 htmlのformのactionでCGIを呼び出すのは許可して、 cgiファイルのurlを直接指定してアクセスするのは許可しないようにするにはどうすればいいでしょうか? また、htmlのトップ(1つのhtml)にはアクセスできるけど、その他のhtmlにはトップから辿っていくしかない(直接url入力しても見れないようにする)方法はあるでしょうか? なるべく簡素な方法をよろしくお願いします。m(__)m

    • ベストアンサー
    • CGI
  • CGIでメール送信がしたい

    ホームページからメールを出すCGIを作ろうとしています。 コマンドからCGIを直接実行すると問題なく動くのですが、formから動かすと Premature end of script headers: ・・・・ というエラーがでます。いろいろ探してみたんですが、分かりませんでした。 改行コードは端末からviで書いてますので、問題は無いだろうと思っているんですが… エラーはでますが、メールは送っているようです。 コマンドから実行した場合の差出人はroot@hoge.netになっているんですが、 ページから実行させたものはanonymous@hoge.netになります。 きっと勉強不足でとんでもないことをやっているんだろうと思うのですが、 探した範囲には答えがありませんでした。 どこが悪いのか教えてください。よろしくお願いします。 サーバーはVine2.6R1でApacheを使っています。 (test.html) <html> <body> <form name="down" action="/cgi-bin/test/a.cgi" method="post"> <input size="20" type="text" name="a_sel"> <input type="submit"> </body> </html> (a.cgi) #!/usr/bin/perl require '../mimew.pl'; require '../jcode.pl'; $sendmail = "/var/qmail/bin/sendmail"; $master_id = "ho\@hoge.net"; $msg="メッセージ"; &jcode'convert(*msg,'jis'); open (ML,"| $sendmail $master_id"); print ML $msg; close(ML); exit;

    • ベストアンサー
    • CGI
  • 2つのCGIを同時に作動させるには?

    プロバイダーがsendmailを使用禁止にしているため、ホームページのフォームからのメールは、プロバイダーで用意したメールデコーダーを使用してます。 しかし、メールはインターネットの中継で紛失することが心配されるため、プロバイダーのホームページ用に使用してるところにメールの記録を残したいのです。 そこで、質問です。 どのようにすれば、自作のcgiとメールデコーダーを一緒に作動させることが出来るのでしょうか?いろいろやってみましたが、全部上手く行きませんでした。宜しくお願いします。 プロバイダが用意したメールデコーダーCGI用 <FORM name="ml" METHOD="post" ACTION="http://a.com/cgi-bin/maildec.cgi" onSubmit="return Check()"> サーバーに記録を残すための自作CGI用 <FORM name="ml" METHOD="Post" ACTION="http://a.com/cgi/rec.cgi" onSubmit="return Check()"> 失敗作 <FORM name="ml" METHOD="post" ACTION="http://a.com/cgi-bin/maildec.cgi","http://a.com/cgi/rec.cgi" onSubmit="return Check()">

    • 締切済み
    • CGI
  • フォームから2つのCGIへ送信する場合

    申込フォームに記入してもらい、それをCGIフォームに送る場合に、2つの別々のCGIフォームに送ることはできるのですか。 例えば以下のように書けますか <form name="kuser" action="A.cgi" & B.cgi" method="post">

    • ベストアンサー
    • CGI
  • javaからcgiの呼び出し

    htmlタグで <form method="post" action="/cgi-bin/gogo.cgi"> とすると、formボタンでcgiが実行されますが、これと同じことを下記のjavaで実行する方法を教えてください。 <script type="text/javascript" language="javascript"> <!-- function gogo(){ cgi呼び出し } //--> </script> <body> <form method="post" action="javascript:gogo()"> ・・・ <input type="submit" value="送信">

  • フォームボタンをテキストに変更したい

    通常はCGI01のようにボタンなり画像なりをクリックするとcgiを叩けますが そのボタン部分をテキスト(リンクを張りユーザーにはわからないように)に変更したいのです。 つまり アクションとしては通常のリンクをクリックすると~index.html?link=1(value=1)を得たいのです。 のようなイメージです。 CGI02として予想を書きました。 うまく表現できないのですが、ご存知でしたらご教授お願いいたします。 CGI01 <form action="index.cgi" method="GET"> <input type="submit" name="link" value=1> <a href="">link</a> CGI02 <form action="index.cgi" method="GET"> <input type="hidden" name="link" value=1> <a href="">link</a>???

    • ベストアンサー
    • Perl