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

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

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

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

JavaScript

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

Q&A

1回答

4003閲覧

PHPで<select><option>タグをデータがあるだけ繰り返し表示したい

narutomo

総合スコア13

HTML5

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

JavaScript

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

0グッド

1クリップ

投稿2017/06/10 18:09

###前提・実現したいこと
PHPで入力フォームを作っています。
その中で、<select><option>タグを利用してMySQLにあるデータを取り出したい考えています。
ですが、一つ目の<select><option>タグの中ではデータを一覧で表示することはできたのですが、<select>タグをデータがあるだけ繰り返して複数選択でき、繰り返し表示されるような仕組みを作りたいです。

###発生している問題・エラーメッセージ

<select>タグはデータの数だけ表示されますが、<option>の中身は、一番上の行は<option>の中だけ置き換え文字でループしているのは確認取れたのですが、下の行にいくに従って中のデータが一つずつ増えていくようになっており、全ての<select>文にデータが全て表示されないです。

###該当のソースコード

test.html <form method="post" action="test2.php"> <tr> <td> <select name="name"> <option value="">選択してください</option> <#NAMELINE1#>//置き換え文字 </select> <#NAMELINE2#>//置き換え文字 <input type="submit" value="送信"> </td> </tr>
test.php $link = mysqli_connect(DB_SERVER,DB_ACCOUNT_ID,DB_ACCOUNT_PW,DB_NAME); $line = ""; $line_more = ""; $query = 'select name from meibo_list'; if($result = mysqli_query($link,$query)){ $i=0; while($row = mysqli_fetch_assoc($result)){ $name[$i] = $row['name']; $line .= "<option value=".$name[$i].">".$name[$i]."</option>"; //一行目のこの文はデータが全て入っていて、プルダウンにて表示されます $line_more .= "<select name='name'><option value=''>選択してください</option>".$line."</select>"; //これが二行目以降に繰り返し表示したい項目。 $i++; } mysqli_free_result($result); } mysqli_close($link); $fp = fopen('test.html','r'); while(!feof($fp)){ $line = fgets($fp); $line1 = str_replace('<#NAMELINE1#>',$line,$line1); $line2 = str_replace('<#NAMELINE2#>',$line_more,$line2); $lines = $line2; echo $lines; } fclose($fp); exit(); ?>

###試したこと
$line[$i]としてみたりしましたが、効果なく全ての<select>タブにデータが反映されていません、表現方法に悩んでおります。

ただ、この方法だとデータが膨大になった時に、入力フォームとして利用する時に見づらくなるとも思い、追加のようなボタンを押すと、<select>文が一つ追加されるようなのも調べていると見受けられました。
ただ、Javascriptがまだ自分では勉強中であるため、PHPやCSSで代用できないか模索しております。

初心者で申し訳ないのですが、どなたかご教授いただけると助かります。

###補足情報(言語/FW/ツール等のバージョンなど)
Mac OS

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

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

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

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

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

m.ts10806

2017/06/10 20:09

同じSELECTボックスをたくさん作りたい(数は無限)ということでしょうか?そうするとやはり1つだけSELECTを置き「追加」ボタンを置いてクリック時にJavaScriptでコピーしつつnameだけ変更していく方法しかないと思います。
narutomo

2017/06/11 15:12

ご回答ありがとうございます。確かに、想像するとあまり自分がご質問したやり方だと効果的ではないと感じました。Javascriptによる追加ボタンを押して行を追加してといった表現をなんとか試して見ようと思います。
guest

回答1

0

そもそも論としては、存在するデータの中から任意のデータを取得する
ということであれば、セレクトボックスでは無くチェックボックスを使うのが適しています。

チェックボックスであれば、現在のコードの一つ目のセレクトボックスと同じ要領で実装できると思いますが、いかがでしょうか?

どうしてもセレクトボックスが必要
(データの数だけセレクトボックスが必要で、かつ同じデータを最大でデータ数と同じだけ取得したいケース)なのであれば、現状の問題点としては、

一つ目の処理と二つ目以降の処理を分けてしまっていること
です。
やりたいことは「データ数だけ同じセレクトボックスを増やしたい」なので、一つ目と二つ目以降の処理を分けてはいけません。

多分、こんな感じで出来ると思います。
*コードのチェックはしていないので、エラーが出たら直してください。
*コメント部分はご自身で実装してみてください。

置き換え文字を一つにして、

HTML

1<form method="post" action="test2.php"> 2 3<tr> 4<td> 5<#NAMELINE#>//置き換え文字 6<input type="submit" value="送信"> 7</td> 8</tr>

PHPでの処理は一行目とそれ以降を統一して

PHP

1if($result = mysqli_query($link,$query)){ 2 3 4 //optionの中身だけ先に作る 5 while($row = mysqli_fetch_assoc($result)){ 6 $option_line .= //optionの中身を連結していく 7 } 8 9 10 //データの数だけセレクトボックスを作る 11 //データ数を取得する 参考→ http://php.net/manual/ja/mysqli-result.num-rows.php 12 13 for(//データの数だけループさせる){ 14 $line .= "<select name='name'>"; 15 $line .= $option_line; 16 $line .= "</select>"; 17 } 18} 19

あとは$lineを置き換え文字と置き換えば完成

投稿2017/06/10 20:56

tanat

総合スコア18713

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

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

narutomo

2017/06/11 15:17

ご回答ありがとうございます。こちらのコードを参考にして試してみました。 一覧が出てきましたが利用しようとするとおしゃっていただいたチェックボックスの方法か、Javascriptを利用した行を追加するような方法がやりやすいのかと感じました。 ですが、ご質問させていただいた方法をご教授いただき、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問