同じname属性の結果を1行にまとめる方法

このQ&Aのポイント
  • フォームメールCGIで同じname属性の結果を1行にまとめる方法を教えてください。
  • 現在、name属性を@DATA_KSに、valueの値を@DATA_VSに代入していますが、name属性が同じ場合にはvalueの値をカンマで区切って1行にまとめたいです。
  • 例えば、好きな食べ物の項目でりんご、ハチミツ、カレーを選んだ場合、表示方法を「好きな食べ物 りんご,ハチミツ,カレー」としたいです。
回答を見る
  • ベストアンサー

同じname属性の結果を1行にまとめる方法

いつもお世話になっている者です。フォームメールCGIで行き詰っております。 push(@DATA_KS,$name); push(@DATA_VS,$value); としてHTML側のname属性を@DATA_KSに、valueの値を@DATA_VSに代入しています。 <table border=0 cellpadding=3 cellspacing=1 bgcolor="#ffffff"> <tr><td bgcolor="#ff8000"><b><font size=+1>項目</font></b></td><td bgcolor="#ff8000"><b><font size=+1>内容</font></b></td></tr> EOF $count = @DATA_KS; foreach (0..$count-1) { print "<input type=hidden name=\"$DATA_KS[($_)]\" value=\"$DATA_VS[($_)]\">\n"; if ($DATA_VS[($_)] eq '') {} else { print "<td bgcolor=\"#009900\">$DATA_KS[($_)]</td>\n"; } if ($DATA_VS[($_)] eq '') {} else { print "<td bgcolor=\"#ffffff\">$DATA_VS[($_)]</td>\n"; } print "</td></tr>\n"; } これで 項目 内容 が1セットで横並びになり項目の数だけ下に続き、値の無い項目は表示されない。というところまでは出来たのですが さらに「name属性が同じ場合はvalueの値をカンマで区切ってヨコに並べる」ということがしたいのですが方法が分かりません。何卒宜しくお願いします。 例:  ○(希望表示方法) 好きな食べ物  りんご,ハチミツ,カレー × 好きな食べ物  りんご 好きな食べ物  ハチミツ 好きな食べ物  カレー

  • CGI
  • 回答数1
  • ありがとう数2

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

  • ベストアンサー
  • taknak08
  • ベストアンサー率50% (8/16)
回答No.1

ご質問中のコードは抜粋されたもののようですので、的を射たお答えになっているか自身がないのですが、まず  > push(@DATA_KS,$name);  > push(@DATA_VS,$value); のように$nameと$valueを別管理するのではなく、$nameと$valueのハッシュにまとめてしまうことをおすすめします。 具体的には  my %DATA_VS;  while ($nameと$valueのループ?) {   push @DATA_KS, $name;   $DATA_VS{$name} = [] if not exists $DATA_VS{$name};   push @{$DATA_VS{$name}}, $value;  } のように $DATA_VS{$name}=[値, 値, ...] とまとめたのち、  for my $name (@DATA_KS) {   for my $value (@{$DATA_VS{$name}}) {    print qq{<input type=hidden name="$name" value="$value" />\n};   }  } や  for my $name (@DATA_KS) {   print qq{<tr>},      qq{<td bgcolor="#009900">$name</td>},      qq{<td bgcolor="#ffffff">}, join(',', @{$DATA_VS{$name}}), qq{</td>},      qq{</tr>\n};  } などのようにしてみてはいかがでしょう。 なお上記では、($DATA_VS[($_)] eq '') のような空文字チェックやHTMLエンコード処理などを省略していますので、適宜読み替えてください。 (というか、上記のコードは即興で書いたもので一度もテストしていませんので、バグどころか文法エラーがあるかもしれません・・・笑) それでは、ご検討ください。

kohkun2008
質問者

お礼

早速の返答ありがとうございます。 ハッシュにまとめる方法で書き直したところうまく表示出来ました! 本当にありがとうございました。

関連するQ&A

  • 同じname属性をまとめ未記入の項目を削除する方法

    現在メールフォームを作成しており、アドバイスを受けながら一歩ずつ前進している者ですが今回も行き詰ってしまいました。度々の質問で心苦しいですが何卒宜しくお願いします。 言葉での説明が難しいので以下のアドレスに【ブラウザ入力画面】と【確認画面】のイメージを掲載しました。 http://homepage2.nifty.com/nippon/qe/qes.html htmlソースは以下の通りで同じ「msg」などname属性の物が存在します。 <h1>フォーム</h1> <FORM action="abc.cgi" method="POST"><INPUT type="hidden" name="location" value = "http://abc.com"> <INPUT type="hidden" name="subject" value="【フォームメール】"> <TABLE border="0" cellpadding="3"> <TBODY> <TR> <TD bgcolor="#ffeadf">メッセージ1:</TD> <TD><INPUT size="50" type="text" name="msg"></TD> </TR> <TR> <TD bgcolor="#ffeadf">メッセージ2:</TD> <TD><INPUT size="50" type="text" name="msg"></TD> </TR> <TR> <TD bgcolor="#ffeadf">質問:</TD> <TD><INPUT size="50" type="text" name="qes"></TD> </TR> <TR> <TD bgcolor="#ffeadf">名前:</TD> <TD><INPUT size="50" type="text" name="Name"></TD> </TR> <TR> <TD bgcolor="#ffeadf">メールアドレス:</TD> <TD><INPUT size="50" type="text" name="Email"></TD> </TR> </TBODY> </TABLE> <BR> <INPUT TYPE="submit" VALUE="確認"> <INPUT TYPE="reset" VALUE="リセット"><BR> </BODY> </HTML> name属性が同じ場合は改行ぜずに1つにまとめvalue属性の値をカンマで区切って1行で表示させたいと思っております。 また、ブラウザ側で入力が無かった項目は表示させないようにしたいと思っております。 いろいろとIF関数を試してみましたがうまく表示しません(;;) 現在以下のプログラムで全ての項目と値が1行づつ表示されています、どのように変更すれば良いでしょうか? $count = @DATA_N; foreach (0..$count-1) { if ($DATA_V[$_] =~ /\n/) { &jis("$DATA_N[$_] =\n$DATA_V[$_]\n"); print OUT "$msg\n"; } else { &jis("$DATA_N[$_] =$DATA_V[$_]"); print OUT "$msg\n"; } } push(@DATA_N,$name); push(@DATA_V,$value); なにとぞ宜しくお願いいたしますm(_ _)m

    • 締切済み
    • CGI
  • <input type="hidden" name="action"

    <input type="hidden" name="action" <input type="hidden" name="action" value="sendmail"> <table cellspacing="1" cellpadding="5" width="580" bgcolor="black" align="center"> <tr> <td bgcolor="#efffff" width="110"><font color=black>氏名</font></td> <td bgcolor="#ffffff"><input type="text" name="name" size="30" value="" maxlength="70"></td> </tr> <tr> <td bgcolor="#efffff"><font color=black size="2">メールアドレス</font></td> <td bgcolor="#ffffff"><input type="text" name="mail" size="50" value="" maxlength="80"></td> </tr> <tr> <td bgcolor="#efffff"><font color=black>地域</font></td> <td bgcolor="#ffffff"><input type="text" name="address" size="50" value="" maxlength="70"></td> </tr> <tr> <td bgcolor="#efffff"><font color=black>御問合せ内容</font></td> <td bgcolor="#ffffff"><textarea name="comment" rows="5" cols="48"></textarea></td> </tr> </table> <center> <input type="submit" name="sub" value="クリック"> </center> </form> <h2>当サイトへの御要望</h2> <p>■各項目を御記入頂き、下のボタンをクリックして下さい。</p> <form action="form.php" method="post"> <input type="hidden" name="action" value="sendmail"> <table cellspacing="1" cellpadding="5" width="580" bgcolor="black" align="center"> <tr> <td bgcolor="#efffff" width="110"><font color=black>氏名</font></td> <td bgcolor="#ffffff"><input type="text" name="name" size="30" value="" maxlength="70"></td> </tr> <tr> <td bgcolor="#efffff"><font color=black>メールアドレス</font></td> <td bgcolor="#ffffff"><input type="text" name="mail" size="50" value="" maxlength="80"></td> </tr> <tr> <td bgcolor="#efffff"><font color=black>御要望</font></td> <td bgcolor="#ffffff"><textarea name="comment" rows="5" cols="48"></textarea></td> </tr> </table> <center> <input type="submit" name="sub" value="クリック"> </center> </form> (1)これらを含めたサイトを「HTML4,01」(文字コード「shift_jis」)で作成していました。 (2)このフォームタグをそのまま「XHTML1,0」で作成したサイト(文字コード「UTF-8」)に埋め込むには、書き直す箇所がありますでしょうか? PHPファイルも(1)で使用していたモノをそのまま(2)に使用したいと思っているのですが、文字化けがなおりません。 PHPに関しても、記述しなおす箇所があるのでしょうか? 詳しい方、お助け下さい。 宜しくお願いします。 PHPファイルは、(1)の時は正常に動作していました。

    • ベストアンサー
    • PHP
  • セレクト表示方法について

    DBのトップ画面で選択画面の表示項目を1つだけ表示表示して矢印で開けるようにしたいのですが書き換え方がわかりません。 一応、表示部分の↓に書いて見ました sub html { # 表示開始 &header; print <<"EOM"; <table bgcolor="#B5B5B5" cellpadding=4 cellspacing=0 border=0 width="45"> <tr><td align="center"> <A HREF="$homepage" STYLE="text-decoration:none;color:black">戻る</A> </td></tr> </table> <center> <hr width="400" noshade> <font color="$t_color" size="$t_size" face="$t_face"><b>$title</b></font> <hr width="400" noshade> <P> <table><tr><td> $TopMessage </td></tr></table> <form method="POST" action="$script"> <input type=hidden name=mode value="search"> <table border=0 cellpadding=15><tr> EOM # 配列1 $size1 = @part1 + 1; print "<td valign=top><font color=\"$t_color\">■</font> <B>テス</B><br>\n"; print"<select name=P1 size=\"$size1\">\n"; print "<option value=\"99\" selected>指定なし\n"; foreach (0 .. $#part1) { print"<option value=\"$_\">$part1[$_]\n"; } print "</select></td>\n"; print "</tr></table>\n"; print "<font color=\"$t_color\">■</font> <b>キーワード</b> (任意)<br>\n";

    • 締切済み
    • CGI
  • クッキーを使って投票欄に名前と住所を保存したい。

    下記の投票欄にクッキーを使って住所、名前を保存したいのですが、どなたか教えていただけませんか。 print "Content-type: text/html\n\n"; print "<HTML><HEAD><TITLE>$0</TITLE></HEAD>\n"; print "<BODY text=#000000 bgcolor=#f7f7e0>\n"; print "<center><table width=400 border=3>\n"; print "<br><br><tr><td><center><font color=0000ff size=\"$za\" face=\"$fon\"><br>$0</font><NOBR>\n"; print "<FORM method=POST action=\"ad.cgi\">\n"; print "<tr><td align=right><b>俳号:</b><INPUT type=text name=name size=24 value=$cookie{'name'}><BR></font> "; print "<tr><td align=right><font face=\"$fon\"><b>都道府県名:</b><INPUT type=text name=address size=24 value=$cookie{'address'}><BR></font>"; print "<tr><td align=right><font face=\"$fon\"><b>メールアドレス:</b><INPUT type=text name=mail size=24 value=$cookie{'mail'}><BR></font> ";

    • 締切済み
    • CGI
  • 日付取得のJavascriptの動作不良に関して

    教えて下さい。 下記のソースの中にある日付をテキストへ表示するJavascriptがどうしても動き ません。 phpとの兼ね合いがあるのかもしれませんが、どこが悪いのか掴めず。。。 日付のJavascript は http://www.kanaya440.com/contents/js/calendar/index.html よりダウンロードしてきてあり、ソース内に記述してあります。 恥ずかしながら、どこに不具合があるのかをご指摘頂ければ幸いです。 よろしくお願いします。 《ソース》 <?php $hiduke = "'mm/dd'"; ?> <HTML> <HEAD> <SCRIPT LANGUAGE="JavaScript"> ********* ここにダウンロードしたカレンダーJavascript を貼る </SCRIPT> <TITLE>行動予定登録</TITLE> <META Http-Equiv="Content-Type" Content="text/html;charset=shift-jis"> </HEAD> <BODY> <CENTER> <FORM ACTION="zkoudou_update2.php" METHOD="POST"> <INPUT TYPE="hidden" NAME="item" VALUE="2"> <TABLE BORDER=1 WIDTH="70%" CELLPADDING="10" CELLSPACING="0"> <TR> <TD ALIGN="center"> <TABLE BORDER="0" WIDTH="100%"> <TD WIDTH="20%"> <FONT SIZE="2"> </FONT> </TD> <TD WIDTH="60%" ALIGN="center"> <B><U>行動予定登録</U></B> </TD> <TD WIDTH="20%" ALIGN="right"> <FONT SIZE="2">戻 る</A></FONT> </TD> </TABLE> <FONT COLOR="#FF0000"><B></B></FONT><BR> <?php print("<TABLE BORDER=0 CELLPADDING='5'>\n"); print("<TR>\n"); print("<TD NOWRAP WIDTH='20%'><FONT SIZE='2'><B>【名前】</B></FONT></TD>\n"); print("<TD WIDTH='60%'></TD>\n"); print("<TD WIDTH='20%'>\n"); print("</TD>\n"); print("</TR>\n"); print("<TR>\n"); print("<TD NOWRAP WIDTH='20%'><FONT SIZE='2'><B>【内線NO】</B></FONT></TD>\n"); print("<TD WIDTH='70%'></TD>\n"); print("<TD WIDTH='10%'>\n"); print("</TD>\n"); print("</TR>\n"); print("<TR>\n"); print("<TD NOWRAP><FONT SIZE='3'><B>【行  先】</B></FONT></TD>\n"); print("<TD NOWRAP SIZE='30'>\n"); print("</TD>\n"); print("</TR>\n"); print("<TR>\n"); print("<TD NOWRAP><FONT SIZE='3'><B>【戻り時間】</B></FONT></TD>\n"); print("<TD>\n"); *********** このJavascripit が動かない。。。。 print("<input type='text' name='p1' id='p1' size='30' maxlength='10'> <input name='Calendar' type='button' value='日付セット' onClick='wrtCalendar(event,this.form.p1,$hiduke)'>\n"); print("</TD>\n"); print("</TR>\n"); print("<TR>\n"); print("<TD>\n"); print("</TD>\n"); print("<TD><FONT SIZE='2'> ※ 戻り時間はダブルクリック\n"); print("</FONT></TD>\n"); print("</TR>\n"); print("</TABLE>\n"); print("<INPUT TYPE='submit' NAME='exec' VALUE='登録する'>\n"); print("<INPUT TYPE='hidden' NAME='no' VALUE='$out_no'>\n"); print("<INPUT TYPE='hidden' NAME='busyo' VALUE='$out_busyo'>\n"); ?> </TD> </TR> </FORM> </TABLE> <FONT SIZE=2><I> Copyright (C) 2001-2004 All right reserved by CGI KON </I></FONT> </CENTER> </BODY> </HTML>

  • 「option」をソートしたい!

    お世話になります。 調べてもわからないので、丸投げです。ごめんなさい。 このCGIのアイコン選択の「option」をソートで名前順にしたいのですが、 お分かりになるでしょうか? どうぞ、宜しくお願いします。 print "<tr><td><b>アイコン</b></td><td>\n"; if ($UZa_icn) { push(@icn_img,"$myicon"); push(@icn_nam,"管理者専用"); } print "<select name=gicon>\n"; foreach(0 .. $#icn_img) { if ($gicon eq "$icn_img[$_]") { print "<option value=\"$icn_img[$_]\" selected>$icn_nam[$_]\n"; } else { print "<option value=\"$icn_img[$_]\">$icn_nam[$_]\n"; } } print "</select>$ic_tog</td></tr>\n"; } else {print"<input type=hidden name=gicon value=\"$gicon\">";} print <<"EOM"; <tr><td><b>URL</b></td><td><input type=text name=ul size="$ltx_wth" value="http://$gurl" class="text"> </td></tr> <tr><td>&nbsp;</td><td> <input type=hidden name=ps value="$F{'ps'}"> <input type=hidden name=no value="$F{'no'}"> <input type=hidden name=dl value="$F{'dl'}"> <input type=hidden name=mode value="kakikae"> <input type=submit value="修正する" class="button"> </form></td></tr> </table></td></tr></table></div><br><br>

    • ベストアンサー
    • CGI
  • フォームを必須項目にしたい

    *印を必須項目にしたいです。 どうすればいいですか? <form action="mailto:***@***.co.jp" method="POST" enctype="text/plain" name="signup" onSubmit="return validateForm(this,arrFormValidation);"> <table cellspacing="2" cellpadding="2" border="0" class="body" width="601"> <tr> <td align="left" width="120" valign="top" bgcolor="#D5CED1" title="全角"><font color="#A4003A">*<font color="#320012">名字 :</font></font></td> <td valign="top" width="463"><input type="text" name="名字" size="20"></td> </tr> <tr> <td align="left" width="120" valign="top" bgcolor="#D5CED1" title="任意に入力してください。"><font color="#320012"> 電話番号 :</font></td> <td valign="top" width="463"><input type="text" name="電話番号" size="20"></td> </tr> <tr> <td align="left" width="120" valign="top" bgcolor="#D5CED1"><font color="#A4003A">*<font color="#320012"></font></font><font color="#320012">アンケート</font></td> <td valign="top" width="463"> 項目1  <input type="radio" value="1" name="項目1">1  <input type="radio" value="2" name="項目1">2<br> 項目2  <input type="radio" value="1" name="項目2">1  <input type="radio" value="2" name="項目2">2 </td> </tr> <tr> <td align="left" width="120" valign="top" bgcolor="#D5CED1"><font color="#320012"> 送信 :</font></td> <td width="463"> <input type="submit" name="B1" value="送信" style="background:#5C5868;color:#E4FF00;" title="送信を開始する祢。"></td> </tr> </table> </form>

  • 掲示板スパム対策(改造)1行追加でエラー

    書き込み文字が変換されるタイプの掲示板です。 1行追加、アップした後に、サーバーのエラーが出るのですが、 どこが悪いのかわかりません。 #HTMLドキュメントのヘッダー宣言 ~省略~ #投稿フォームを作成 ~省略~ print "<td align=center>名前</td>\n"; print "<td><input type=text size=34 name=name value=" . $COOKIE{'name'} . "></td>\n"; print "</tr>\n"; print "<tr>\n"; print "<td align=center>E-mail</td>\n"; print "<td><input type=text size=34 name=email value=" . $COOKIE{'email'} . "></td>\n"; print "</tr>\n"; print "<tr>\n"; print "<td align=center>見出し</td>\n"; #返信の場合は、見出しを挿入 if ($FORM{'flags'} eq 'return') { print "<td><input type=text size=34 name=subject value=RE:" . $FORM{'subject'} . "></td>\n"; } else { print "<td><input type=text size=34 name=subject></td>\n"; } print "</tr>\n"; print "<tr>\n"; print "<td align=center>内容</td>\n"; print "<td align=center><textarea name=comment rows=3 cols=34></textarea><br>\n"; if ($FORM{'flags'} eq 'return') { print "<input type=submit value=$FORM{'subject'}へ返信>\n"; print "<input type=hidden name=ress value=$FORM{'code'}>\n"; } else { print "<input type=submit value=新規投稿>\n"; } print "ガードコード<input type=text name="guard" size=8>\n"; #スパム対策用で追加●●●●●●●●●● print "</form>\n"; (TっT)

    • ベストアンサー
    • CGI
  • ループの中のjavascriptに関して

    ループの中のjavascriptに関して 初歩的な質問で申し訳ありません。 チェックボックスを複数(ここでは2つ)し、どちらかが選択された場合、もう片方の 方のチェックをはずすような javascript を作成しましたが、これをPHPのなかのループへ 組み込みたいと考えております。 ある程度抜粋したソースを以下に記載しましたが、どこをどのようにすれば実現できるで しょうか。。。 恐らくどの行が選択されているか?を判断する為の変数かなにかをパラメータとして渡して あげれば良いかとは思いますが。。。 《記述内容》 <SCRIPT Language="JavaScript"> <!-- function ctrl_check02(check02_checked) { alert(check02_checked); document.getElementsByName('check02')[0].checked = false; } function ctrl_check01(check01_checked) { document.getElementsByName('check01')[0].checked = false; } </script> <HTML> <HEAD> <meta http-equiv="Content-Language" content="ja"> <meta http-equiv="Content-Type" content="text/html; charset=shift-jis"> <title>リスト</title> </HEAD> <BODY> <CENTER> <SPAN id="ID" STYLE="visibility: hidden; position: absolute;"></SPAN> <?php if($row <= 31){ print("<TABLE BORDER='0'>\n"); print("<TR>\n"); print("<TD Valign='TOP'><FONT COLOR='#FF0000'><B></B></FONT>\n"); print("<TABLE BORDER='2' WIDTH='600' CELLPADDING='2' CELLSPACING='1'>\n"); print("<TR ALIGN='center'>\n"); print("<TD NOWRAP WIDTH='50' BGCOLOR='#DDDDDD'><FONT SIZE='2'><B>有</B></FONT></TD>\n"); print("<TD NOWRAP WIDTH='50' BGCOLOR='#DDDDDD'><FONT SIZE='2'><B>無</B></FONT></TD>\n"); print("</TR>\n"); for($count=1;$count<$row+1;$count++) { print("<form>\n"); print("<tr>\n"); print("<TD WIDTH='50' align='center'><input type=checkbox name='check01' id='idcheck01' value='1' onClick='ctrl_check02(this.checked);' ></TD>\n"); print("<TD WIDTH='50' align='center'><input type=checkbox name='check02' id='idcheck02' value='1' onClick='ctrl_check01(this.checked);' ></TD>\n"); print("</tr>\n"); print("</form>\n"); } print("</TABLE>\n"); print("</TD>\n"); print("</TR>\n"); print("</TABLE> \n"); } ?> </CENTER> </BODY> </html> 教えて下さい。 よろしくお願いします。

  • 掲示板のコメント欄にあらかじめ文字を入れたい

    掲示板の設置をしています。 掲示板のコメント欄の中に、あらかじめこちらが伺いたいことを表示しておきたいのですが、どのようにしたらできるのでしょうか? sub in_form { print "<table cellspacing=1 cellpadding=0>\n"; print "<form action=\"$script\" method=POST enctype=\"multipart/form-data\">\n"; print "<input type=hidden name=mode value=\"newwrt\">\n"; &getcook; if (!$mode) { $submit = '投稿する'; } else { print "<input type=hidden name=rno value=\"$in{'no'}\">\n"; $submit = '返信する'; } print "<tr><td>名前</td><td><input type=text size=30 name=name value=\"$name\" style=\"ime-mode:active;\"></td></tr>\n"; print "<tr><td>HP</td><td><input type=text size=50 name=hp value=\"http://$hp\"></td></tr>\n"; print "<tr><td>題名</td><td><input type=text size=50 name=sub style=\"ime-mode:active;\"></td></tr>\n"; print "<tr><td valign=top><br>内容</td><td><textarea cols=65 rows=8 name=com style=\"ime-mode:active;\"></textarea></td></tr>\n"; print "<tr><td>画像</td><td><input type=file size=60 name=img></td></tr>\n"; print "<tr><td>削除キー</td><td><input type=password size=10 maxlength=8 name=pwd value=\"$pwd\"> (英数8文字以内)</td></tr>\n"; print "<tr><td></td><td><input type=submit value=\"$submit\"></td></tr></table></form>\n"; } おそらくこの部分を変えるのかなぁと思うのですが・・・どうすればいいのかわかりません。どなたかアドバイスいただけるとうれしいです。 よろしくお願い申し上げます。

    • ベストアンサー
    • CGI

専門家に質問してみよう