質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
PHP

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

HTML

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

Q&A

解決済

1回答

1420閲覧

HTML / PHP - 遷移先のページでの表示内容が変わるチェックボックスを作りたい

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

HTML

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

0グッド

0クリップ

投稿2020/10/22 01:42

編集2020/10/22 02:12

前提

設置したチェックボックスのチェックされた内容によって遷移先のページでの表示内容が変わるものを作りたいです。

イメージ説明

該当のソースコード

index.html

html

1<body> 2 3=== 略 === 4 5 <form action="answer.php" method="post"> 6 <dl> 7 <dt>趣味</dt> 8 <dd> 9 <input 10 class="fields" 11 type="checkbox" 12 name="hobbies[]" 13 value="読書" 14 id="読書"> 15 <label for="読書">読書</label> 16 17 <br> 18 19 <input 20 class="fields" 21 type="checkbox" 22 name="hobbies[]" 23 value="ゲーム" 24 id="ゲーム"> 25 <label for="ゲーム">ゲーム</label> 26 27 <br> 28 29 <input 30 class="fields" 31 type="checkbox" 32 name="hobbies[]" 33 value="ドライブ" 34 id="ドライブ"> 35 <label for="ドライブ">ドライブ</label> 36   </dd> 37 </dl> 38 39=== 略 === 40 41 <!-- 送信ボタン --> 42 <input 43 type="submit" 44 value="送信する" 45 > 46 </form> 47</body>

answer.php
※質問時点では書いていませんでしたが、回答内容も表示したいと考えています。

php

1 if (isset($_POST['hobbies']) && is_array($_POST['hobbies'])) { 2 foreach ($_POST['hobbies'] as $value) { 3 echo "{$value}"; 4 } 5 }

肝心の表示部分については何から書けばいいのか分からない状態です。

分からないこと

しかし、この状態だとチェックが入っていないものについて取得できません。
また今回は3つでしたが、選択肢が増えるとif文や switch文を使ったときに複雑になってしまうと考えています。
if文や switch文が一番綺麗に書けるとしても、たとえばチェックの有無を2進数で取得することなどはできないのでしょうか。

よろしくお願いします。

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

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

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

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

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

miyabi_takatsuk

2020/10/22 01:53

そのanswer.phpへは、 formのsubmitをもって遷移しているのでしょうか? また、answer.phpの構文内容も提示お願いします。
退会済みユーザー

退会済みユーザー

2020/10/22 02:12

はい、<form>の type="submit" です。追記しました。 answer.php については、書きはじめから思いつかず質問した次第です。 書き方の提案をしていただければまずは自分の力で書けるだけ書いてみます。
guest

回答1

0

ベストアンサー

valueは日本語よりもコードのほうが良いでしょう。
nameの[]もそのまま置くのではなく、任意のキーを入れておけば紐づけもできます。
「データが扱いやすいHTMLにする」ことも実装時には必要です。

あとは対応する定義を何かしらで作っておけば良いです。

php

1<?php 2$conf = [ 3 1=>[ 4 "label"=>"トマト" 5 ], 6 2=>[ 7 "label"=>"きゅうり" 8 ] 9]; 10 11$post = filter_input_array(INPUT_POST, [ 12 'h' => [ 13 'flags' => FILTER_REQUIRE_ARRAY 14 ] 15]); 16?> 17<!DOCTYPE html> 18<html lang="ja"> 19<head> 20 <meta charset="UTF-8"> 21 <title>f</title> 22</head> 23<body> 24<?php 25if(!is_null($post) && count($post) > 0){ 26 $h = $post['h']; 27 $li = ''; 28 foreach($conf as $k=>$v){ 29 $r = '×'; 30 if(array_key_exists($k,$h)){ 31 $r = '〇'; 32 } 33 $li.='<li>'.$v['label'].':'.$r.'</li>'; 34 } 35 36 echo <<<EOF 37 <ul> 38 {$li} 39 </ul> 40EOF; 41} 42?> 43<form method="post"> 44<?php 45foreach($conf as $k=>$v){ 46 echo <<<EOF 47<input type="checkbox" name="h[{$k}]" value="{$k}">{$v['label']} 48EOF; 49} 50?> 51<button>送信</button> 52</form> 53</body> 54</html>

結果を保存して提示の表のように出していきたいなら、この選択肢も含めてデータベースでマスタ化は必要ですね。「表示内容」に関してももっとルール化が必要に思います。
パターンがあるならデータベースにも出来るでしょうけど、そのパターンをどれだけ洗い出せるかは結局作る方でやっていかなければなりません。

投稿2020/10/22 02:06

編集2020/10/22 02:14
m.ts10806

総合スコア80875

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

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

退会済みユーザー

退会済みユーザー

2020/10/22 02:20

回答ありがとうございます。 正直なところ、初めて見る関数ばかりでコードを読んだだけではピンときていません。 が、まずはこれを参考にして調べながら書いて、書きながら理解していこうと思います。 ありがとうございました。
m.ts10806

2020/10/22 02:26

フォーム送信後の表示だけ考慮した雑なミニマムコードですが「定義」をうまく利用してください。 「法則」を確認し「ルール」を作って実装に持っていくことです。 回答冒頭に書いたように「法則性を見つけやすいHTML」も考えてみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問