- ベストアンサー
CGI name= が同じではダメってでたんですが・・・
ダウンロードCGIにて、設置してHTMLの文法テストをしたら 「name= が同じでは、CGI側ではそれらを区別できません。」 ってなったんですけど、動作は正常にするようなのですが、 調べても知識がないせいかどうしたら良いかちょっとわかりません・・・ hidden だから関係ない?と初心者考えですが、文法テストは正しいし でも不具合が心配なので、誰か教えて下さい <(_ _)> <input type="hidden" name="sw_aress" value=""> <input type="checkbox" name="sw_aress" value="1">レス数 <input type="hidden" name="sw_ref" value=""> <input type="checkbox" name="sw_ref" value="1">回数
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
長文になってしまいました。m(_ _)m 該当のサイトの解説文を読みました。 http://openlab.ring.gr.jp/k16/htmllint/explain.html > 165 > TYPE=TEXTなどのように、VALUE属性の値が固定的でないものに対して、同じ名前の要素がひとつのFORM内で複数存在すると、CGI側ではそれらを区別できません。 「TYPE=TEXTなどのように」となっていますね。 ですが、CGIはこれらを区別できますので、解説文が間違っているようです。 もちろん、区別しないように作ったり、言語仕様として区別しない物(PHP)もありますが、 HTMLの解説として「できない」と限定して書くことではないと思います。 テキストフィールドの場合にのみ区別しない、という作り方をするのは、 「全て区別しないか全て区別する」よりもはるかに難しいですし、場合によっては不可能です。 > VALUE属性の値が固定的な、TYPE=RADIO/CHECKBOX/SUBMIT/RESET/BUTTON/IMAGEとHIDDENについては警告されません。 このように書かれていますので、hiddenやcheckboxで警告がでるようなら、このチェッカーのバグと思われます。 「hiddenとcheckboxの両方で使っている場合」については言及されていませんので、あながちバグとも言い切れませんが。 質問とは関係ないことですが、 > SUBMITにNAMEがない場合は無効 (If the NAME attribute is not present, this element does not contribute a form field.) だとされています。 調べたところ、HTML2.0でこの定義がされているようですが、HTML4.01やXHTMLではこの定義はありません。 特定のHTML/XHTMLのバージョンだけの内容を、全てのバージョンに適用してしまっているようです。 (このサイトは、こういう不具合や語弊のある書き方が多いです。) なお、ボタンとしては機能しますが、valueを送信しなくなります。(文法とは関係ありませんが) さらにHTML2.0の文法書を読んでみると、 http://www.w3.org/MarkUp/html-spec/html-spec_8.html 「does not contribute a form field」の意味は「無効」ではなく、 HTML4.01と同じ、「サーバーに値を送信しない」の意味で使われていると思います。 > RESETの項目の例より When you are finished, you may submit this request: <input type=submit><br> You may clear the form and start over at any time: <input type=reset> via: contribute http://dic.yahoo.co.jp/dsearch?p=contribute&stype=1&dtype=1 > CGIの部分も間違っているのか不安なのです・・・難しいですね。 CGIを使用していても、ブラウザが見ているのはそこから出力されたHTMLですので、扱い方法は同じです。 HTMLの文法としては、全く問題はありません。 オリジナルのスクリプトでsw_refやsw_aressを何度も使われているなら、 むしろ複数あることで正常に動作する物と思われます。
その他の回答 (3)
- 神崎 渉瑠(@taloo)
- ベストアンサー率44% (1016/2280)
> 「name= が同じでは、CGI側ではそれらを区別できません。」 これはHTMLチェッカーの指摘ですか? だとすると、HTMLチェッカーのバグ(不具合)と思われます。 nameが同じでもCGI側でそれを区別するように作らなければなりません。 <select name="sel" multiple size="5"> <option value="1">1</option> <option value="2">2</option> </select> 複数の項目を選択できるセレクトフィールドは sel=1&sel=2というように、nameの部分が同じになって送信されます。 CGIスクリプトのドキュメントにそのような但し書きがついているのであれば、 あえて区別しないように作られている可能性もありますので、 同じnameをつけないようにするか、PHPの場合はname="sw_ref[]"のようにブラケットをつけることで対応できるかもしれません。 また、受信やデータの分割はできていても、 分割された複数のデータを複数として扱うように作られていなければ、 (この可能性の方が高いです) 結局不具合として出てくると思いますので、 十分テストしてから使うか、 ともすればこのCGIスクリプトは使わない方が良いかもしれません。
お礼
詳しい説明をありがとうございます。 CGIページを表示してソースを表示・コピペで全文チェックしました。 http://openlab.ring.gr.jp/k16/htmllint/htmllint.html でHTMLはいつも正しく指摘してくれるので CGIの部分も間違っているのか不安なのです・・・難しいですね。
- okmotokun
- ベストアンサー率59% (92/155)
何か意図があってそうしているのかどうかがわかりませんので良し悪しはいえませんが、結果はフォームデータのパースの仕方しだいです。 同じ属性のデータを一括削除する場合などには同じ「name」を使うことも必要になります。
お礼
ありがとうございました。
補足
初心者で詳しくは全くわからないのですが http://openlab.ring.gr.jp/k16/htmllint/htmllint.html で指摘されたので何か不安なのですが、仕様なので必要な場合があるとの事でしょうか? 改良すべき点は文法的に改善したいのですが。
- ORUKA1951
- ベストアンサー率45% (5062/11036)
nameと値が同じ場合、それをハッシュに入れていくと、当然、上書きされるために前に出てきたnameは消えてしまいます。 ですが、配列に入れる場合は問題ありません。 ということで、 <input type="hidden" name="sw_aress" value=""> は不要だと思いますが・・・
お礼
ありがとうございました。
補足
CGI勉強中です。 http://openlab.ring.gr.jp/k16/htmllint/htmllint.html でcgiで表示されるHTMLをチェックしました。 cgiのソース部分(下記)を見つけたのですが hiddenの方を消去した方が良いのでしょうか? 意図があって存在するのか? 単なるミスなのでしょうか? よろしくお願いします <(_ _)> ----------------------------------------- <tr><td> <input type="hidden" name="sw_aress" value=""> <input type="checkbox" name="sw_aress" value="1"$checked{'sw_aress1'}>レス数 <input type="hidden" name="sw_ref" value=""> <input type="checkbox" name="sw_ref" value="1"$checked{'sw_ref1'}>回数 </td></tr>
お礼
非常に詳しく回答して頂きφ(..)メモメモ ありがとうございました。 結果は、何度もテストして判断しようと思いますが 不安が解消できて安心しました ^_^