• ベストアンサー

データベースからのarray を javascript に格納する方法

行き詰っているので、力を貸してください。あるプロダクトの名前、ID、及び値段をデータベースからPERL DBIで引っ張ってきています。 <option value="id">$name</option>という形になっています。 同じページの同じフォームにたくさんあるオプションの中からある名前を選ぶと、値段をテキストボックスでonCheck で表示させたいのですが、データベースからとってきた配列はフォームの中のwhile文の中に入っているため、どうやって、<header>の間のjavascript の配列に入れることができるのでしょうか? スクリプトは下記の通りです。 PERL/DBI form名:mbscalcTb my $sql = "SELECT ProductId,.NameJ,.PSJ from Security"; my $sth = $dbh->prepare($sql); $sth->execute(); my $row; while ( $row = $sth->fetchrow_hashref() ) { my ( $ProductId, $NameJ, $psjtb ) = ( $row->{ProductId},$row->{NameJ},$row->{PSJ} ); print "<option value=$ProductId name=\"pid\" onmouseup=\"get_psj()\">$NameJ$psjtb</option>"; print "<tr><td><input type="text" name="price"></tr></td>"; } なんとなく、やりたいjavascript 知りたいこと:var productId_list array の中にどうやれば、 カンマの区切り入りで上の$row->{PSJ} を入れることができるのか?? function get_price () { var productId_list = [ $ProductId]; var psj_list = [ $psj ]; var pid = document.mbscalcTb.pid.value; for (var i =0; i < productIdlist.length; i++) { if (productId_list[i] == pid ) { return psj_list[i]; document.mbscalcTb.price.value= psj_list[i];} } また、他にもっといい方法があれば教えてください。宜しくお願いします。

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

なぜheaderに参照した値を入れる必要があるのか わかりませんが、やるなら参照処理と表示処理を 分けるだけでよいのでは? フロー的にはこんな感じで。 <?PHP ・・・ while(sql指定){ $script_str.="ほげほげ"; $option_str.="<option>ほげ"; } ・・・ print <<<eof; <html> <head> <script language=javascript> function hoge(obj){ ・・・ $script_str } </script> </head> <body> ・・・ <form> <select onChange="hoge(this)"> $option_str </select> </form> ・・・ </body> </html> eof; ?>

その他の回答 (1)

回答No.1

ちょっと意味が分かりかねますが、 <option value="値段" ・・・> にすれば良いのでは? もし複数の情報が欲しいのであれば、 <option value="Id,値段,something" ・・・> にして、javascript内でvalueをカンマ区切りで解析。 Arrayに入れたいのであれば、冒頭で検索をかけて、検索結果を保持したまま<head>内のjavascriptを記述、次に<body>内の文を記述すれば良いのではないでしょうか。

manami921
質問者

お礼

皆さん、ありがとうございました。 解決しました。皆様のとはやり方が違いますので、参考までにご覧下さい。 my $dbh = &getDBConnection(1); my $sql = "SELECT ProductId, NameJ, PSJ from Security"; my $sth = $dbh->prepare($sql); $sth->execute(); my $row; my $meigara; while ( $row = $sth->fetchrow_hashref() ) { my ( $ProductId, $NameJ, $psjtb) = ( $row->{ProductId}, $row->{NameJ}, $row->{PSJ} ); $meigara .="<option value=$ProductId name=\"pid\" selected>$NameJ</option>\n"; $psj .= ',' if (length($psj) ); $psj .= " $psjtb" ; } Javascript: function get_psj() { var psj = new Array ( $psj ); var i = document.mbscalcTb.product.selectedIndex ; document.mbscalcTb.PSJper.value = psj[i]; } HTML: <select size="10" style="width:300px;" name="product" onChange="get_psj()" > $meigara </select>

関連するQ&A