JavaScriptで以下のようなformのcheckbox(複数)の数(length)を取得する記述と、PHPにPOSTしたときにvalueを配列で取得するための記述を教えてください。


<form name=”myForm” action=”foo.php” method=”POST”>
<input type=”checkbox” name=”flag” value=”a”>
<input type=”checkbox” name=”flag” value=”b”>
<input type=”checkbox” name=”flag” value=”c”>
</form>

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:cooper0524 No.1

回答回数296ベストアンサー獲得回数4

ポイント5pt

PHPについては、nameに[]を付けるとpost時に配列で返します。


<form name=”myForm” action=”foo.php” method=”POST”>

<input type=”checkbox” name=”flag[]” value=”a”>

<input type=”checkbox” name=”flag[]” value=”b”>

<input type=”checkbox” name=”flag[]” value=”c”>

<input type=”submit” name=”送信”>

</form>


<?

$flag = $_POST[”flag”];


foreach ($flag as $value){

echo $value;

}

?>

Javascriptはもう少し考えてみます。

id:P-mako

> Javascriptはもう少し考えてみます。

確かにこの方法だと、PHPでは取得できますが、JavaScriptで取得できないんですよね。

(なので質問した次第です。)

2006/02/10 19:28:40
id:cooper0524 No.2

回答回数296ベストアンサー獲得回数4

ポイント5pt

myForm内の全ての部品数を取得するのなら、

<script>

<!--

document.write(document.myForm.elements.length);

-->

</script>

でできるんですが、これだとボタンとかいろいろ増えると

チェックボックスの数と断定できないですね・・・。

参考までに。

id:P-mako

そうですね。この記述であればわかるんですが・・・

2006/02/10 19:29:04
id:bonlife No.3

回答回数421ベストアンサー獲得回数75

ポイント60pt

nameはflagからflag[]に変えて良いという前提で書きました。

以下のようなスクリプトでどうでしょう。


nameがflag[]のcheckboxが必ず2個以上ある場合、JavaScriptでのif文がシンプルになると思います。

(JavaScriptでは値が1つの場合、配列として扱われず、lengthが取得できません。)

もう少し上手い書き方もありそうですが、とりあえず動くはずです。


<html>

<head>

<title>checkboxのテスト</title>

<script language=”javascript”>

function arraySizeCheck() {

// 配列の大きさをチェック (チェックボックスの個数のチェック)

if (document.myForm.elements[’flag[]’]) {

if (document.myForm.elements[’flag[]’].length) {

alert(document.myForm.elements[’flag[]’].length+”個のチェックボックスがあります。”);

} else {

alert(”1個のチェックボックスがあります。”); // 配列のlengthがない -> 値が1つで配列ではない

}

} else {

alert(”チェックボックスが存在しません。”); // 配列自体がない

return false; // 以下の処理は行わない

}

// チェックされたcheckboxの数をチェック

if (document.myForm.elements[’flag[]’].length) {

count = 0;

for (var i=0;i<document.myForm.elements[’flag[]’].length;i++){

if ((document.myForm.elements[i].name==”flag[]”) && (document.myForm.elements[i].checked)) {

count ++;

}

}

alert(count+”個のチェックボックスがチェックされています。”); //

} else {

if (document.myForm.elements[’flag[]’].checked) {

alert(”1個のチェックボックスがチェックされています。”);

} else {

alert(”0個のチェックボックスがチェックされています。”);

}

}

}

</script>

</head>

<body>

<form name=”myForm” action=”<?php echo $_SERVER[PHP_SELF] ?>” method=”POST”>

<input type=”checkbox” name=”flag[]” value=”a”>

<input type=”checkbox” name=”flag[]” value=”b”>

<input type=”checkbox” name=”flag[]” value=”c”>

<input type=”checkbox” name=”flag[]” value=”d”>

<input type=”checkbox” name=”flag[]” value=”e”>

<input type=”submit” value=”test” onClick=”arraySizeCheck()”>

</form>

<?php

if ($_POST) {

for ( $i=0; $i < count($_POST[’flag’]) ; $i++ ) {

print $_POST[’flag’][$i] . ” がチェックされました。<br />”;

}

}

?>

</body>

</html>

id:P-mako

できました。ありがとうございます。

2006/02/10 20:53:34

質問者が未読の回答一覧

 回答者回答受取ベストアンサー回答時間
1 andi 448 409 0 2006-02-10 20:16:11

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません