🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

5182閲覧

チェックボックス配列チェック無しのデータ取得方法

JanTh1989

総合スコア87

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/12/14 08:46

編集2020/12/15 07:08

チェックボックス配列のチェック無しデータのPHP取得についてにご質問になります。

以下などを参考にhiddenを入れる方法を入れてみました。
https://woodin.info/techlife/phpcheckboxno/

結果としてはうまく行かず、チェック有無を問わず、hidden側のデータも取ってしまっていました。
配列だと駄目なのか?とも思ってるのですが、じゃあどうするか、で詰まっております。

HTML

1<table class="daily_report_matter" id="daily_report_matter"> 2 <tr> 3 <td> 4 <input type="hidden" name="check[]" value="0"> 5 <input type="checkbox" name="check[]" value="1">あり 6 </td> 7 <td style="text-align: center"> 8 <input type="button" name="append" id="append" value="+" onclick="addRow(this)"> 9 </td> 10 </tr> 11</table>

JavaScript

1function addRow(obj){ 2 // ボタン押下行のクローン作成 3 var tr = obj.parentNode.parentNode; 4 var clone = tr.cloneNode(true); 5 initCloneData(clone); 6 tr.parentNode.insertBefore(clone, tr.nextSibling); 7} 8 9function initCloneData(clone){ 10 clone.children[0].children[0].checked = false; 11}

PHP

1$check = filter_input(INPUT_POST, 'check',FILTER_DEFAULT,FILTER_REQUIRE_ARRAY);

HTMLのテーブルは列をいくつか省略していますが、コードはこういうものになります。
2列目の"+"ボタンを押すと行が増えていくテーブルになります。
そのため、チェックボックスについては、配列にしました。

これで実行し、PHPで取得した値は以下でした。
行数1つ(チェック無し):0
行数1つ(チェックあり):0,1
行数2つ(チェック無し):0,0
行数2つ(2行目チェックあり):0,0,1

どうにも、チェック有無を問わず、hiddenは取ってしまっているみたいなのです。
これを、行の数分のデータとなり、チェックがある場合の行は値が1、無い場合は値が0、となる作りにするにはどうすればよろしいでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2020/12/14 08:49

javascriptはjavaではないので、もしjavascriptの質問でしたらタグを変更してください
JanTh1989

2020/12/15 07:08

すみません。 変更しました。
guest

回答1

0

ベストアンサー

ありかなしかで判断するのであれば配列渡しをやめればいいだけです

php

1<input type="hidden" name="check" value="0"> 2<input type="checkbox" name="check" value="1">あり

GET/POSTは競合したとき後ろが優先されます

投稿2020/12/14 08:51

yambejp

総合スコア116688

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

JanTh1989

2020/12/14 09:04

ご回答ありがとうございます。 やはり、配列なのがいけないのですね・・・。 テーブル行が増える、という兼ね合いもあり、配列にしているのですが、配列にできないとなると、行の増やし方から考え直す必要が出てきそうです。 ただ、name末尾に数字を入れるとかにするにしても、テーブル末尾に行追加ではなく、クリックした次の行に追加、な動作の都合上、行番号を付けるというのも駄目そうです。 考えねばですね。
JanTh1989

2020/12/14 09:07

checkboxはname無し。 hiddenを配列にして、checkboxのonChangeでhiddennの値を変える。 phpはhiddenの名前でfilter_inputをする。 これでどうにかできる・・・か? 早速やってみます。
yambejp

2020/12/14 09:13 編集

name="check[]"を使うなら、hiddenはいりません。 $checkがnullのときに「値なし」と判断するだけです。 $_SERVER["REQUEST_METHOD"]を絡めて処理すればよいでしょう
JanTh1989

2020/12/15 07:37 編集

申し訳ありません。値の用途が細かく書けておりませんでした。 このチェックボックス値は、テーブルの行に紐付けて使いたいのです。 そのため、チェックがついている所だけで配列化されてしまうのが困りどころでして・・・。 何行目はチェック無し、チェックあり、という形でデータは取得したく、上記のhidden側でデータを取るように仕込もうかと考えております。
yambejp

2020/12/15 07:57 編集

きちんと解説できてなくて混乱されているようで申し訳ないです JanTh1989さんがやろうとしていることはロジックに無理があります HTMLだけでは、複数選択が可能なnameは「チェックなし」を送ることが不可能です JSでやるなら、hiddenを設定しておいて、どこかチェックが入った時点で 当該のhidden要素をdisabledにしてやることです。 「あり」だけをチェックするかしないかで処理する場合は、nameはcheck[]ではなくcheckに して後から選んだものを優先する仕組みで処理してくださいということです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問