• ベストアンサー

配列データをテーブル内に出力したい

作成した二つの配列 $midashi と$yakugo をテーブルの中に表示しようとしております。テーブルはまあなんとか描けたのですが、メニューのオプションを配列分だけ増加していく方法がわかりません。それどころかprint 命令自体がよく分からなくて、これではソースそのものが出力されちゃいます。すみませんが、どなたか、ご指導下さい。どのように出力部分をかき分けるべきなのでしょうか? 初心者なのでお恥ずかしいのですが、どうかよろしくお願い申し上げます。 <HTML> <HEAD> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE></TITLE> </HEAD> <BODY bgcolor="#b08317"> <table border=4 width=650 align=left><tr bgcolor="#cccccc"> <form name="resultform" action="do_selection.cgi"> <th> <textarea name="DATA" cols=50 rows=5>'まだ空白'</textarea></th> <th> <select name="wordlist" type=submit> <option selected>訳語検索の結果</option> </select> for (i=1; i<$midashi.length; i++) {resultform.wordlist.options[i]= new Option(); resultform.wordlist.options[i].text=$midashi[i-1]; } </th> <th> <select name="hiddenlist"><option selected>かくされたもの</option></select> for (i=1; i<$yakugo.length; i++) {resultform.hiddenlist.options[i]= new Option(); resultform.hiddenlist.options[i].text=$yakugo[i-1]; } </th> </tr> </form> </table> </BODY> </HTML> EOD

  • Perl
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • yatokesa
  • ベストアンサー率40% (201/496)
回答No.2

print <<EOD; <HTML> <HEAD> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE></TITLE> </HEAD> <BODY bgcolor="#b08317"> <table border=4 width=650 align=left><tr bgcolor="#cccccc"> <form name="resultform" action="do_selection.cgi"> <th> <textarea name="DATA" cols=50 rows=5>'まだ空白'</textarea></th> <th> <select name="wordlist" type=submit> <option selected>訳語検索の結果 EOD for (i = 0; i <= $#midashi; i++) { print "<option value=\"$midashi[i]\">$midashi[i]\n"; } print <<EOD; </select> </th> <th> <select name="hiddenlist"><option selected>かくされたもの</option> for (i = 0; i <= $#yakugo; i++) { print "<option value=\"$yakugo[i]\">$yakugo[i]\n"; } print <<EOD; </select> </th> </tr> </form> </table> </BODY> </HTML> EOD で、どうでしょう。 HTML/Perl/JavaScriptとかなり混乱されているようですが、ひとつずつマスターしていかないと今後も混乱が続くと思いますよ。#初心者というのなら特にそうです。

参考URL:
http://tohoho.wakusei.ne.jp/www.htm
tonka729
質問者

お礼

yotokesa さま、いつもご親切な助言をいただきありがとうございます。おかげさまで表示する部分は完成しました。  このオプションメニューをクリックした場合のイベント処理を、私は次のようにしようと思っています: <form name="resultform" action="do_selection.cgi"> --- --- <select name="wordlist" type=submit> ↑これでは送信が行なわれませんでした。 この質問はまた新たに投稿いたしますので、そちらで誤りをご指摘いただければ大変助かります。 ありがとうございました!!

その他の回答 (2)

回答No.3

気がついたところを3つほど、 1.プログラムの呼び出しかた。 >これではソースそのものが出力されちゃいます。 多分一番最初の行にprint <<EOF;とか入っているのだと思っておなしします。 私もよくわかっていないのですが、これを コマンドラインからそのままperl hogehoge.cgiとか 命令を出しているのだとしたら、必ずソースが出力されてしまいます。 このプログラムをCgiを許可しているサーバーにFTPでアップしてブラウザから読み出すか、自分のパソコンにApacheなどをインストールして、やはりipアドレス(127.0.0.1)で呼び出すかしないとソースが出てくると思いますが、どうでしょうか。そんなことはとっくにしていらっしゃるかもしれません。そうでしたら私の勘違いです。 2.変数の扱い。 変数の扱いもちょっと気になりました。iそのままでは変数として扱えないので必ず$iにしなければならないのではないかと思います。また配列は@hogeとアットマークであらわし、配列の要素数は$yososu=@hoge;で取得するのではないでしょうか。ただ、forで上限を求めるために取得しているのでしたら、perlならば foreach (@hoge){ print "<td>$_</td>"; }と簡単に書けると思いますがどうでしょうか。 3.プリント文 プリントで出力するのはタグの部分だけで、そうでないfor文などはプリントで出さないようにそのまえでEOFとして終了して、またタグが必要なところで新たにプリント文として出力しなければならないのではないでしょうか。

tonka729
質問者

お礼

ありがとうございました。初歩的な知識がかけていることを痛感しました。

  • the845t
  • ベストアンサー率33% (246/743)
回答No.1

?Perlですよね。 Perlの配列って$で表したり、$hoge.lengthで個数あらわせましたっけ? 配列は@で、個数は、$#hogeではありませんでしたか? 最近Perl遠ざかってるので分かりませんが。 配列分出力であれば、 foreach(@hoge){ print $_; } でよいかと。

tonka729
質問者

お礼

$#hoge の誤りでした。初心者のくせに必要に迫られてJavScript とPerl の間を行ったり来たりして混乱しています。 foreach 文、またはfor文の中で、ご覧のようにメニュー項目を増やしつつデータを書き出すPerl文はどうのようになるのでしょうか?お教え下さいませんでしょうか。。。

関連するQ&A

  • フォーム送信できないのは<TABLE>が原因?

    見当はずれの質問かもしれません。次のように、テーブルの中にフォームを入れてあります。その関係でしょうか、submit ボタンを押してもCGIプログラムにアクセスしません。私の方が何かを勘違いしているのかもしれませんが。。。。 <BODY bgcolor="#b08317"> <table border=4 width=680 align=left> <tr bgcolor="#cccccc"> <form method="GET" action="do_select.cgi" name="resultform"> <th> <textarea name="DATA" cols=52 rows=6> </textarea> </th> for ($i = 0; $i <= $#yakugo; $i++) { $yakugotext=$yakugotext . $yakugo[$i] . '$';} print <<EOD; <textarea name="hiddenyakugo" cols=1 rows=1>"$yakugotext"</textarea> <input type="submit" name="search" value="送信"> <INPUT type="submit" name="search" value="↑"> <INPUT type="submit" name="search" value="↓"> </form> </tr> </th> </table></BODY> もし、原因や改善のアドバイスをいただければ幸いです。

    • ベストアンサー
    • Perl
  • 選択されたメニューアイテムの番号は?

    以下のようなフォームの送信をCGIプログラムで受けた時、フォーム部品の一つのオプションメニューの洗濯されたアイテムの番号を取得したいのですが、どのようにしたらよろしいのでしょうか? <select name="wordlist"> <option selected>訳語検索の結果</option> for ($i=1; $i<$#midashi; $i++) {print "<option value=\"$midashi[$i]\">$midashi[$i]"; } </select> どなたかアドバイスをどうかよろしくお願いいたします。

    • ベストアンサー
    • Perl
  • オプションメニュー・クリックした時の処理

    "wordlist"という名前のオプションメニューを作りました。クリックしてdo/selection.cgiを呼び出して送信を受けたデータ(クリックしたアイテムの番号)を読んで処理を行わせようと考えています。 <form name="resultform" action="do_selection.cgi"> --- --- <select name="wordlist" type=submit> <option selected>訳語検索の結果</option> for ($i=1; $i<$#midashi; $i++) {print "<option value=\"$midashi[$i]\">$midashi[$i]"; } </select> </form> ところが、これではdo_selection.cgiが呼び出されませんでした。またsubmit はメニューでクリックしたアイテムの番号をどのようにして送り出すのかも分かりません。tohohoさんのページを見ておりますが、見つかりませんでした。どなたかアドバイスをいただきたいのですが。。。(もし私の質問に不明の箇所がありましたら、補足をいたしますのでご指摘下さい]

    • ベストアンサー
    • Perl
  • テーブルのテーブルの間に間ができるのでしょうか?

    はじめまして、超html初心者のものです。 なぜ同じようテーブルを3つ書いているのに一番上のテーブルと真ん中のテーブルの間が開いてしまっているのかがわかりません。 あと、一番上のテーブルの-から先をもう少し左に寄せることもうまくいきません。 なにかアドバイスをよろしくお願いします。 ↓これがソースです。 <html> <head><title>test</title> </head> <form> <table border=1 cellspacing=0 cellpadding=2 width=760> <tr> <th width=95 height=30 align="right">日付け:</th> <td width=284> <input type="text"><input type="button"> </td> <td>&nbsp;-&nbsp;</td> <td><input type="text"><input type="button"></td> </tr> </table> <table border=1 cellspacing=0 cellpadding=2 width=760> <tr> <th width=95 height=30 align="right">部署:</th> <td width=100> <select name="busyo"></select> </td> <th width=80 align="right">営業所:</th> <td width=100> <select name="eigyousyo"></select> </td> <th width= 80 align="right">担当コード:</th> <td width=450> <select name="tantocode"></select> </td>   </tr> </table> <table border=1cellspacing=0cellpadding=2width=760> <tr> <th width=80 align="right">権限:</th> <td width=700> <select name="kengen"></select> </td> </tr> </table> </form> </html>

  • オプションメニューのアイテムを一括して再表示したい

    <select name="wordlist"> <option selected>訳語検索の結果</option> for ($i=1; $i<$#midashi; $i++) {print "<option value=\"$midashi[$i]\">$midashi[$i]"; } でいったん表示したメニューを、CGIプログラムが次のプロセスに進んで表示データを更新するとします。でもこのメニューのアイテムだけは全部ひとつの変数に保存しておき、画面再表示の時にこの変数を呼び出して簡単に表示しようと考えています。  が、変数への保存、再表示ができるのかが私のperl知識では分かりません。どなたかお教えいただけると助かります。

    • ベストアンサー
    • Perl
  • オプションメニュー項目の値の取得は?

    フォームのオプションメニュー項目の書き方は分かりましたが、項目の値をアクションプログラム側から完全には取得できませんでした。つまり以下のように1項目には2つの情報を入れられますが: <select name="wordlist"> print "<option selected>見出し語の一覧\n"; for ($i=0; $i<=$#midashi; $i++) {print "<option value=$i>$midashi[$i]</option>\n"; } print "</select>\n"; 前方のキーになる部分valueを $selectedItem=$f{'wordlist'};では取得できず、後方の見出し語しか取得できません。どの参考書にもこれでvalue 値が得られると書かれてはいますが。。 どなたか、アドバイスをよろしくお願いします。もし私の質問がわかりにくい場合はご指摘ください。質問をし直しますので。

    • ベストアンサー
    • Perl
  • form id、nameの番号振りなおし

    jqueryとphpにてフォームを作成しています。 フォームの追加、削除できるシステムを作っており、 フォームの追加はできたので、削除した際のinputのnameやidの番号を振り直しができず困っています。 商品1<br> <a href="javascript:void(0);" class="del" id="del_1">削除</a> <table> <tr> <th>商品番号</th> <td><input type="text" name="item[data][1][sir]" value="<?php echo $item[data][1][sir]; ?>"></td> </tr> <tr> <th>商品名</th> <td><input type="text" name="item[data][1][name]" value="<?php echo $item[data][1][name]; ?>"></td> </tr> <tr> <th>商品個数</th> <td> <select name="item[data][1][num]"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> </select> </td> </tr> </table> <a href="javascript:void(0);" id="add">フォームの追加</a> としており、 「フォームの追加」をクリックすると 商品2<br> <a href="javascript:void(0);" class="del" id="del_2">削除</a> <table> <tr> <th>商品番号</th> <td><input type="text" name="item[data][2][sir]" value="<?php echo $item[data][2][sir]; ?>"></td> </tr> <tr> <th>商品名</th> <td><input type="text" name="item[data][2][name]" value="<?php echo $item[data][2][name]; ?>"></td> </tr> <tr> <th>商品個数</th> <td> <select name="item[data][2][num]"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> </select> </td> </tr> </table> 商品3<br> <a href="javascript:void(0);" class="del" id="del_3">削除</a> <table> <tr> <th>商品番号</th> <td><input type="text" name="item[data][3][sir]" value="<?php echo $item[data][3][sir]; ?>"></td> </tr> <tr> <th>商品名</th> <td><input type="text" name="item[data][3][name]" value="<?php echo $item[data][3][name]; ?>"></td> </tr> <tr> <th>商品個数</th> <td> <select name="item[data][2][num]"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> </select> </td> </tr> </table> ができるようにPHPにてSESSION管理をおこなっています。 追加はできたのですが、 上記のフォーム4つほど出した後に商品2を削除した場合の商品1、商品3、商品4の各nameの番号(item[data][*][sir]、item[data][*][name]、item[data][*][num]の*部分) 振りなおしができず困っています。 いくらやってもできないため、どなたかソースを教えていただけないでしょうか。 宜しくお願いいたします。

  • POSTすると配列の数がおかしくなる

    matとquaとhowtoをそれぞれ4つPOSTしているのですが、POSTされたデータを受け取るとmat4つ、qua5つ、howto5つと数がおかしくなります。 なぜかわかりません。とくにインクリメントしていないのに増えます。 教えて下さい。 <script type="text/javascript"> function myAdd(obj){ var max=15; var c=count("mat"); if(c>=max) return false; var oTR=document.createElement("tr"); var names=["mat","qua"]; for(var i in names){ var oTD = document.createElement("td"); var oTag = document.createElement("input"); oTag.setAttribute("type", "text"); oTag.setAttribute("name", names[i] + (c+1).toString()); oTD.appendChild(oTag); oTR.appendChild(oTD); } document.getElementById("t0").getElementsByTagName("tbody")[0].appendChild(oTR); if(c>=max-1) obj.disabled=true; } function count(name){ var tags=document.getElementsByTagName("input"); var ta=document.getElementsByTagName("textarea"); var c=0; var reg=RegExp("^"+name+"[0-9]+$"); if(tags){ for(var i=0;i<tags.length;i++){ if(tags[i].name.match(reg)){ c++; } } } if(ta){ for(var i=0;i<ta.length;i++){ if(ta[i].name.match(reg)){ c++; } } } return c; } function myTextAreaAdd(obj){ var max=15; var c=count("howto"); if(c>=max) return false; var oTag = document.createElement("textarea"); oTag.setAttribute("name", "howto" + tag_num++); var oDiv = document.getElementById("area"); oDiv.appendChild(oTag); if(c>=max-1) obj.disabled=true; } </script> </head> <body> <form method="post" enctype="multipart/form-data" action="check.php"> <textarea name="explain"></textarea> <table id="t0" border> <tbody> <tr> <td><input type="text" name="mat1" /></td> <td><input type="text" name="qua1" /></td> </tr> <tr> <td><input type="text" name="mat2" /></td> <td><input type="text" name="qua2" /></td> </tr> <tr> <td><input type="text" name="mat3" /></td> <td><input type="text" name="qua3" /></td> </tr> <tr> <td><input type="text" name="mat4" /></td> <td><input type="text" name="qua4" /></td> </tr> </tbody> </table> <input type="button" value="追加する" onClick="myAdd(this)"> <br /> <span id="area"> <textarea name="howto1"></textarea> <textarea name="howto2"></textarea> <textarea name="howto3"></textarea> <textarea name="howto4"></textarea> </span><br /> <input type="button" value="追加する" onClick="myTextAreaAdd(this)"> <input type="submit" value="送る"> </form>

  • FORMデータを配列としてそうしんしたいのですが・・・

    JavaScriptでセレクトボックス内の値が変化したらもう一つあるセレクトリスト内の値が変更されるように組みました。 以下コード。 ----------------------- <HTML> <head> <script type="text/JavaScript"> <!-- menuItem = [["A","B","C","D","E"],       ["1","2","3"], ["あ","い","う","え","お","か"]]; function setMenuItem(n) { len = document.myForm.works.options.length; for (i=len-1; i>=0; i--) { document.myForm.works.options[i] = null; } for(i=0; i<menuItem[n].length; i++) { document.myForm.works.options[i] = new Option(menuItem[n][i],menuItem[n][i]); } } } //--> </script> </head> <body> <FORM name = "myForm"> <SELECT name="list" onChange="setMenuItem(this.selectedIndex)"> <option value="list1">リスト1 <option value="list2">リスト2 <option value="list3">リスト3 </SELECT> <SELECT name="works[]" MULTIPLE> <OPTION>A <OPTION>B <OPTION>C <OPTION>D <OPTION>E </SELECT> </FORM> </BODY> </HTML> ----------------------- でセレクトリスト内のデータを配列として送信したいのですがうまくいきません。 セレクトリストのnameはworks[]にしたら動作すらしなくなりました。 どなたかご教授願います。

  • こういうtable

    カレンダーをtableで作りたいのですが <table border="5" cellspacing="5" cellpadding="5"> <tr><th colspan="7">2006年 6月</th></tr> <tr><th bgcolor="FF0000">日</th><th>月</th><th>火</th><th>水</th><th>木</th><th>金</th><th bgcolor="0000FF">土</td></tr> <tr><th>1</th><td>2</td><th bgcolor="0000FF">3</td></tr> <tr><th bgcolor="FF0000">4</th><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><th bgcolor="0000FF">10</td></tr> <tr><th bgcolor="FF0000">11</th><td>12</td><td>13</td><td>14</td><td>15</td><td>16</td><th bgcolor="0000FF">17</td></tr> <tr><th bgcolor="FF0000">18</th><td>19</td><td>20</td><td>21</td><td>22</td><td>23</td><th bgcolor="0000FF">24</td></tr> <tr><th bgcolor="FF0000">25</th><td>26</td><td>27</td><td>28</td><td>29</td><td>30</td></tr> </table> と打ち込んだら     2006年6月 月 火 水 木 金 土 日 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 と一週間目が左寄せになってしまいます。右寄せの方法を教えてください><

    • ベストアンサー
    • HTML