• ベストアンサー

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>

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

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

今のソースを実行する限り、ご提示の状態にはなりませんね・・・ デバッグのためcheck.phpのソースのあたまに <? if($_REQUEST){ print "<pre>"; print_r($_REQUEST); } ?> といれてみては? また、受け取りデータが扱いづらそうなので、 渡す名前をmat1→mat[1]のような配列風にした方が汎用性が あがります

eccschool
質問者

補足

Array ([mat1] => [qua1] => [mat2] => [qua2] => [mat3] => [qua3] => [mat4] => [qua4] => [howto1] => [howto2] => [howto3] => [howto4] => [qua5] => [howto5] => ) といった形で [qua5] => [howto5] =>が出てきてしまいます。(matは4まで) for文のc+1影響しているような気がします。最後に1回quaがでてしまうのかな・・・・。頭が痛くなってきました。(>_<)

その他の回答 (2)

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.3

私も正常に受信を確認したわ。 textareaの追加ができないのは tag_num++のtag_numがないせいね。 その辺省略されているのかしら。 そのために再現できないのかもしれないわ。 enctype="multipart/form-data" があるから この画面にはもっと項目があると予測するわ。 例えば<input type="file">とか。 その辺が何か影響しているのかもね。

eccschool
質問者

お礼

ご指摘の通りです。すみませんでした。無事に飛んできた値の処理ができました。 ありがとうございました。

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

同じく、提示されてるソースでは初期状態/追加ボタン一回クリック後、共に送信データの異常は確認できませんでした。 ※フォームを以下に書き換えてテスト <form method="get" action=""> ただ、textareaの追加はJavascriptエラーでした。 提示されているソースに間違いはありませんか?

eccschool
質問者

お礼

Javascriptエラーも解決しました。 ありがとうございました。

eccschool
質問者

補足

解決しました!PHPの処理の中で変な処理をしていました。(for文のまわし方のミス)はずかしいです・・・。javascriptエラーが出ているのにはきづきませんでした。何でだろう???

関連するQ&A