Vodafoneでコメント投稿できない不具合についての考察

なんとなく、Vodafoneでコメント投稿ができない原因を憶測してみました。

ちょっと仕事が忙しく、エミュレータなどで確認する時間が取れないので憶測です。あくまでも。

不具合の内容は、コメントを投稿してもできておらず、トップに戻ってしまう、というものです。

以前カテゴリ選択機能の不具合で、$blog_idをCGI中で指定せず、URLパラメータで渡している場合に問題になる、というものがありました。そのときも「Vodafoneでうまくいかない」という報告を受けており、ウェブコンテンツヴューア(エミュレータ)を利用して確認しながら作業したところ、formのaction要素でURLパラメータを渡す(ex:<form … action=”mt4i.cgi?id=1″>)ように直してみても、なぜか改善できませんでした。

そのときはそれ以上よく調べなかったので、「まあそういうものなのかな?」ぐらいに済ませてしまい、<input type=hidden…>でblogidが渡るように直して対応しました。

コメント投稿ではSubmitすると、actionにコメント内容(名前、メールアドレス、テキスト)以外のパラメータを指定してPOSTします。

HTML上では、<form … action=”mt4i.cgi?id=1&mode=post&cat=1&no=1″>などのようになるはずです。これで、iModeやPCからはうまくコメント投稿できています。(web障害エラーとなる場合もあるようだが、投稿自体はできている)

ところがVodafoneではトップの一覧表示になってしまう。

これ、ひょっとしたらURLパラメータがまったく渡ってないんじゃないか、という気がします。たぶんVodafoneでは、フォームPOST(GETでもかな?)する際、action要素でURLパラメータも混在させた場合でも、フォーム要素しかサーバに渡していないんじゃないか、と。それで結果的にcgiがパラメータなしでアクセスされてエラーが出たり、一覧表示になってしまうんではないかと。

で、このあたり実はド素人なんでよく知らなかったんですが、とりあえず調べてみました。するとCPANのCGIモジュールドキュメントに、以下のような一文がありました。

MIXING POST AND URL PARAMETERS

$color = $query->url_param(‘color’);

It is possible for a script to receive CGI parameters in the URL as well as in the fill-out form by creating a form that POSTs to a URL containing a query string (a “?” mark followed by arguments). The param() method will always return the contents of the POSTed fill-out form, ignoring the URL’s query string. To retrieve URL parameters, call the url_param() method. Use it in the same way as param(). The main difference is that it allows you to read the parameters, but not set them.

Under no circumstances will the contents of the URL query string interfere with similarly-named CGI parameters in POSTed forms. If you try to mix a URL query string with a form submitted with the GET method, the results will not be what you expect.

要するに、クエリーストリング(引数を伴った?マーク)が入ったURLへPOSTすることで、フォームのパラメータとMixして受け取ることが可能、と書かれています。

もしこれがVodafoneにおいてうまくいっていない、ということでコメント投稿の不具合が発生しているのであれば、<input type=hidden>で全てのパラメータを渡してPOSTして、url_paramで受け取っているところをparamに直したらうまくいくんじゃないかな?

あとあまり関係ないかもしれませんが、ウェブコンテンツヴューアのヘルプを見ると、

※C2型機では、method=postを指定できません。

とあります。Vodafoneの一部機種では、POST自体できないものもあるようですので注意が必要かもしれません。

2 Comments

  • Pingback: Tonkey Magic

  • Pingback: HAPPYGOLUCKY+

  • コメントを残す

    メールアドレスが公開されることはありません。