配列の格納方法に関する質問

このQ&Aのポイント
  • PHPで生成したhiddenフィールドに値を代入する方法を教えてください。
  • JavaScriptで配列のような形式で値を代入するプログラムを作っていますが、値が代入されません。
  • hiddenフィールドへの格納方法について詳しく教えてください。
回答を見る
  • ベストアンサー

配列の格納

現在、PHPで生成したhiddenフィールドに、Valueを設定しない記述(配列のような形式)を行い、JavaScriptにて値を代入するプログラムを作っています。 エラーは出ていないようなのですが、値が代入されません。Alertでみると、undefinedというメッセージが出ています。hiddenフィールドへの格納方法をご教授ください。 <ソース>(抄) function user_num() { var i=1,l=0, num = document.getElementById('users').length; document.user_select.user_no =new Array(num); while(num > 0){ document.getElementsByName('user_no[i]').value = document.getElementById('users').options[l].value; alert(document.getElementsByName('user_no[i]').value); num--; i++; l++; } } (中略) hiddenフィールド生成文 <?php $n=1; while($i){ print '<input type="hidden" name="user_no['; print $n; print ']"'; print ' id="user_no['; print $n; print ']">'; $i=$i-1; $n=$n+1; } ?>

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

  • ベストアンサー
  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.2

#1です。 サンプルは動いた。うまくはいきません。ではどうしたらいいのかサッパリわからないです。 (それを配列と呼ぶかどうかはわかりませんが)nameとvalueが設定されたinputがform配下にあればformの送信時に送られるハズなんですけどね~。 それとも送信ではなく受け取り側(次のページ)に問題があるのでしょうか?(送信できたかどうかはformのmethodをgetにしておけば簡単に確認できますが) とりあえずサンプルが動いたことで続きを自分で解決するなら質問を終了する、そうでなければ第三者がわかるような情報を捕捉するかしてくださいませ。

その他の回答 (1)

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.1

nameに[n]を付けた配列みたいな記述が配列として扱えるのはphpの勝手な拡張ですので、php以外では単なる文字列となります。 なので、javascriptで扱う場合はあくまで文字列にしてやる必要があります。 また、getElementsByNameというのは常に配列を返してくるので、それが必ず1つしか無いケースでは0番目にアクセスします。 以下、試してないけどサンプル。 function user_num() { var i=1; while(1){ var o= document.getElementsByName('user_no['+i+']')[0]; if(! o) break; o.value = document.getElementById('users').options[i-1].value; alert(o.value); i++; } document.user_select.user_no = new Array(i); } 最後のところ document.user_select.user_no には新しい配列を代入してるけど何に使ってるのかわからないのでとりあえずそのままにしてます。

sirius2003
質問者

補足

早速のご回答ありがとうございます。サンプルうまく動きました。 最終的には、配列(文字列)user_no[1]、user_no[2]をpostまたは、getで 次のページに渡してあげたく思っています。そのため、user_no[1]などを hiddenフィールドで生成しているのですが、うまくいきません。

関連するQ&A

  • GetElementById の使い方(IE11)

    お世話になります。 html(5)内に、inputのhiddenに、複数のデータが設定されていまして、 そのデータをJavaScriptで取得し、alert表示したいのです。 例えば、 <input type="hidden" name="A0" id="A0" value="名称[1]"> <input type="hidden" name="A1" id="A1" value="名称[2]"> <input type="hidden" name="A2" id="A2" value="名称[3]"> を for(i=0;i<3;i++){ if( document.xxxform.GetElementById("A"+i) ){ data = document.xxxform.GetElementById("A"+i).value; str += data ; } } alert(str); のような感じにしたのですが、IE11でエラーになってしまいます。 if( document.xxxform.GetElementById("A"+i) ){ → ここでエラーのようです。 正しくはどのようにしたらよいのでしょうか? どなたか、アドバイスをお願いいたします。

  • javascriptでhiddenに二次元配列を格納したい

    現在、Webのシステムでクライアント側のJavaScriptから サーバー側のPHPに値を渡そうと思ってます。 その際に、JavaScriptの配列と連想配列を組み合わせた二次元配列に 値を格納してサーバー側に渡そうと思ってます。 それで以下のような方法を試しているのですが、 hiddenに二次元配列を格納する方法が分からず困ってます。 分かる方がいらしたら教えて頂けますでしょうか。 よろしくお願いいたします。 =========================================== var actionName = document.forms[0].action; var bodyObj = document.body; var formObj = document.createElement("FORM"); var hiddenObj = document.createElement("HIDDEN"); formObj.name = "updateTest"; formObj.action = actionName; formObj.method = "post"; hiddenObj.name = "alltest[][]"; var norArr = new Array(); var hashArr = new Array(); var i = 1; hashArr['test'] = document.getElementById("test" + i).value; norArr[i-1] = hashArr; hiddenObj.value = hashArr; formObj.appendChild(hiddenObj); bobyObj.appendChild(formObj); formObj.submit();

  • javascriptでフォームの値の計算

    javascript1か月目の初心者です。 7つのテキストフィールドに数値を代入させて合計と平均(最後には標準偏差)を計算しようと思ってます。 以下のように考えましたが、うまくいきません。 strが文字列として?扱われてしまっているようです。 strをevalで囲んでみてもダメです。 詳しい方教えてください。 <!--スクリプト1--> <SCRIPT LANGUAGE="JavaScript"> <!-- function f_check() { if(document.F1.num1.value!=""&&document.F1.num2.value!=""&&document.F1.num3.value!=""&&document.F1.num4.value!=""&&document.F1.num5.value!="" &&document.F1.num6.value!=""&&document.F1.num7.value!=""){ str=0 for(var i = 0;i<document.F1.length;i++){ str+=document.F1[i].value; } alert('合計は'+str+"です"); avrg = (str)/document.F1.length; alert('平均は'+avrg+'です'); //ここから標準偏差の計算(略)。 } // --> </SCRIPT> <form method="post" name="F1" onSubmit="return f_check()"> 数値を入れてください<input type="text" name="num1" size="5"><br> 数値を入れてください<input type="text" name="num2" size="5"><br> 数値を入れてください<input type="text" name="num3" size="5"><br> 数値を入れてください<input type="text" name="num4" size="5"><br> 数値を入れてください<input type="text" name="num5" size="5"><br> 数値を入れてください<input type="text" name="num6" size="5"><br> 数値を入れてください<input type="text" name="num7" size="5"><br> <INPUT TYPE=SUBMIT VALUE="平均をとる"></FORM>

  • 配列をPOSTで受けとる

    タイトルのまんまですが 配列をformで送って それをPOSTで受け取りたいのですが うまくいきません 具体的に言うと <?php print"<form method=POST action=action.php>"; for($i=0; $i<$n; $i++){    print"<input type=text name=foo[$i]>"; } print"<input type=hidden name=n value=$n>"; print"<input type=submit value=go>"; print"<form>"; ?> ///////////以下action.php////////////////// <?php $n = $_POST["n"]; for($j=0; $j<$n; $j++){    $foo[$j] = $_POST["foo[$j]"];    print"$foo[$j]"; } ?> こんな感じのことがしたいのですが うまくいきません どうもPOSTされてないみたいでfoo[$j]はnullです 凡ミスな気がしなくもないんですが...プログラム初心者なんで↓↓ 教えてください よろしくお願いします

    • ベストアンサー
    • PHP
  • javascriptでラジオボタンのが変更できない

    javascriptを勉強中なのですが 練習で下記のような麻雀の計算をしてくれるサイトを作ってみましたがうまく反応しません。 http://tegarude.sakura.ne.jp/mafu/form.html できない点は、例えば、ロンの項目で面前のチェックの時、ツモの項目にいいえが入りますが、 その後、ツモの項目で平和のチェックをいれようとしてもチェックが入りません。 javascriptで操作するようにしたのですがどうもうまくいきません。 単純なこと簡単なことなのかもしれませんが どなたかご教授願えませんでしょうか? ソースコードが長いのでjavascriptの記述のみ載せています。 サンプルのURLを参考にして下さい。 function on(){ //ロン・ツモ・待ち・雀頭の値を取得 function mjk01(m1,m2){ for (j=0; j<m1.length; j++){ if(m1[j].checked){ m2.innerHTML=m1[j].value; } } } mjk01(document.form1.radio2,document.getElementById("a00")); mjk01(document.form1.radio3,document.getElementById("a01")); mjk01(document.form1.radio4,document.getElementById("a02")); mjk01(document.form1.radio5,document.getElementById("a03")); //formプロパティの省略 formt=document.form1; //ロン項目設定 if(formt.radio2[0].checked){ formt.radio3[3].checked=true; formt.radio7[0].checked=true; formt.radio9[0].checked=true; formt.radio11[0].checked=true; formt.radio13[0].checked=true; } if(formt.radio2[1].checked){ formt.radio3[3].checked=true; formt.radio4[0].checked=true; formt.radio5[2].checked=true; formt.radio6[0].checked=true; formt.radio8[0].checked=true; formt.radio10[0].checked=true; formt.radio12[0].checked=true; } if(formt.radio2[2].checked){ formt.radio3[3].checked=true; } //ツモ項目設定 if(formt.radio3[0].checked){ formt.radio2[3].checked=true; formt.radio4[0].checked=true; formt.radio5[2].checked=true; formt.radio6[0].checked=true; formt.radio8[0].checked=true; formt.radio10[0].checked=true; formt.radio12[0].checked=true; } if(formt.radio3[1].checked){ formt.radio2[3].checked=true; formt.radio4[0].checked=true; formt.radio5[2].checked=true; } if(formt.radio3[2].checked){ formt.radio2[3].checked=true; } //面子の設定 function mentsu(m1,m2,m3){ if(m1[0].checked){ m2[1].value=4; m2[2].value=16; m2[3].value=8; m2[4].value=32; } if(m1[1].checked){ m2[1].value=2; m2[2].value=8; m2[3].value=4; m2[4].value=16; } for(i=0; i<m2.length; i++){ if(m2[i].checked){ m3.innerHTML=m2[i].value; } } } mentsu(document.form1.radio7,document.form1.radio6,document.getElementById("a04")); mentsu(document.form1.radio9,document.form1.radio8,document.getElementById("a05")); mentsu(document.form1.radio11,document.form1.radio10,document.getElementById("a06")); mentsu(document.form1.radio13,document.form1.radio12,document.getElementById("a07")); //小計をすべて数字に変換 num0=document.getElementById("a00").innerHTML; num1=document.getElementById("a01").innerHTML; num2=document.getElementById("a02").innerHTML; num3=document.getElementById("a03").innerHTML; num4=document.getElementById("a04").innerHTML; num5=document.getElementById("a05").innerHTML; num6=document.getElementById("a06").innerHTML; num7=document.getElementById("a07").innerHTML; num0 = parseFloat(num0); num1 = parseFloat(num1); num2 = parseFloat(num2); num3 = parseFloat(num3); num4 = parseFloat(num4); num5 = parseFloat(num5); num6 = parseFloat(num6); num7 = parseFloat(num7); //総合計の算出 document.getElementById("total").innerHTML=num0+num1+num2+num3+num4+num5+num6+num7; }

  • POSTで配列のデータを渡す方法は?

    初歩的な質問で申し訳ございません。配列でデータを入力し、POSTで配列のデータを渡す方法を知らなくて困っています。いろいろ調べましたが、見つかりません。 だれか、教えてください。 ..... &ReadParse(*in); for ($i = 0 ; $i <=10 ; $i++){    $data[$i] = $in{'data[$i]'}; } sub main { 。。。以下修正部分・。。。 print "<form method=\"POST\" action=\"$userpro\">"; print " <input type=\"hidden\" name=\"mode\" value=\"miss1\"><p>"; print " <input type=\"text\" name=\"data[1]\" size=\"20\" value=\"$data[1] \">"; print " <input type=\"text\" name=\"data[2]\" size=\"20\" value=\"$data[2] \">"; print " <input type=\"text\" name=\"data[3]\" size=\"20\" value=\"$data[3] \">"; ...... print " <p><input type=\"submit\" value=\"修正\" name=\"B1\"></p>\n" ; print "</form>\n" ; ・・・・ } #Submit後実行される関数 sub miss1 { print "Content-type: text/html\n\n"; for ($i = 0 ; $i <=10 ; $i++){ print "$i-$data[$i]<br>"; } exit; } 結果は 0-空(空白) 1-空(空白) 2-空(空白) 。。。 にです。 何が間違っているでしょうか。よろしくお願いします。

    • ベストアンサー
    • Perl
  • getElementsByNameについて

    JSでプルダウンの選択値をとりたくて、以下のように書きました。 var select = document.getElementById('test'); var options = document.getElementById('test').options; var value = options.item(select.selectedindex).value; 都合により、getElementByIdではなくてgetElementsByNameで 同様のことをしたいのですが、単純にgetElementsByNameに 置換しただけでは動きませんでした。 (Nameは一意になるよう作っています) 確か配列でデータが来るとかいう話を聞いた覚えがあるので、 どこかにインデクサを指定すればいけるでしょうか? 申し訳ないですが、ご教授ください。

  • このif構文の間違いを教えて下さい。

    どうぞ宜しくお願いします。 *onsubmitでアラートを出力するようにしています。 if条件も"||"でひとまとめにもしてみましたが上手くいきませんでした。 ########################################## print "<SCRIPT LANGUAGE=\"JavaScript\">\n"; print "<!--\n"; print "function FldChk(){\n"; print " if( document.MyForm.name.value == '' ){\n"; print " alert('名前\、E\-mail\、選択項目は必須入力です ');\n"; print " return false;\n"; print " }\n"; print " if( document.MyForm.email.value == '' ){\n"; print " alert('名前\、E\-mail\、選択項目は必須入力です ');\n"; print " return false;\n"; print " }\n"; print " if( document.MyForm.comment.value == 'noting' ){\n"; print " alert('名前\、E\-mail\、選択項目は必須入力です ');\n"; print " return false;\n"; print " }\n"; print " else{\n"; print " alert('O\Kを押して10\秒\後に申\込が完\了します。有\難う御\座いました\♪ ');\n"; print " return true;\n"; print " }\n"; print "}\n"; print "// -->\n"; print "</SCRIPT>\n"; #############################################

  • 同じページでgetElementsを複数回使用する

    タイトルが文字数の関係でおかしいのですが エクセルVBAで IEのHPに 値を代入して、送信するのですが 同じページで oObjDoc.getElementsByName()やoObjDoc.getElementsByID()などで、値を代入したいのですが、この構文の2回目の所で エラ検出の debugに 「書き込めない」 などのエラーが出ます。(当然、実際もスルーされます) 初期化がまずいのか 判断しかねています。 一般的なID、PSW代入ページから来ました Sleep 500 Set oObjDoc = Nothing Set pitem = Nothing Set oObjDoc = objIE.document Set pitem = oObjDoc.getElementById("order_type") value = "通常注文" 実際は3パターン Dim order As Object For Each order In pitem If InStr(1, order.innerText, value) > 0 Then pitem.value = order.value Exit For End If Next pitem.Click Set pitem = Nothing Sleep 500 id = "変更" '上記の入力を確定させるためだと思う 変更 クリック Set pitem = oObjDoc.getElementById(id) For Each pitem In objIE.document.getElementsByTagName("input") If pitem.value = id Then Exit For End If Next pitem.Click 'オーダーの内容 If TradeForm.ordertype_btn1 = True Then value = "3" Else value = "1" End If Set aradio = oObjDoc.getElementsByName("side") Debug.Print aradio.Length For i = 0 To aradio.Length - 1 Debug.Print i Debug.Print aradio(i).Name 2回目で エラー70 書き込みできません。 Debug.Print aradio(i).value If "side" = aradio(i).Name And aradio(i).value = value Then aradio(i).Checked = True Exit For End If Next Set pitem = Nothing で、aradio.Length は 2を返して  Set aradio = oObjDoc.getElementsByName("side") はHP内容と一致、動作しているようです で、1回まわって 2回目(これが答えなのですが)の i=1 で 次 aradio(i).Name  が 取れません。 debug.printは  2 0 side 3 1 ところが 前の id = "変更" '変更 クリック Set pitem = oObjDoc.getElementById(id) を 全部レムれば プログラムは 通ります。 debug.print が 書き込めない と言うエラーも 今まで始めてみました。 どれかの初期化が 抜けているのでしょうか よろしくどうぞ

  • ファイヤーフォックスでフォームが文字化けがします。

    お世話になります。 自分で作ったサイトですが、 入力フォームの氏名を書き込んで、それをクッキーに保存して、それを呼び出すと、入力した名前が文字化けしてしまいます。 自分で作ったといっても、無料配布のCGIです。 これはファイヤーフォックスの問題でしょうか? 私の環境は、Windows8.1 です。 ちなみに、その部分の内容は、次の通りです。 print "<FORM METHOD=\"POST\" ACTION=\"./bbs.cgi\" ENCTYPE=\"multipart/form-data\">\n"; print "<input type=\"hidden\" name=\"mode\" value=\"modify\">\n"; print "<input type=hidden name=\"no\" value=\"$main_no\">\n"; }else{ print "<FORM METHOD=\"POST\" NAME=\"F1mode\" ACTION=\"./bbs.cgi\" ENCTYPE=\"multipart/form-data\" onSubmit=\"return chuuikakunin()\">\n"; print "<input type=\"hidden\" name=\"mode\" value=\"add\">\n"; } 正直なところ詳しいことはよく分かりませんが、 onSubmit=\"return chuuikakunin()\" ↑これは、JavaScriptを使って名前の入力が無いとアラートで知らせるためのものだと思われます。 よろしくお願い致します。

専門家に質問してみよう