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

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

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

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

1回答

1743閲覧

プルダウンメニューで選択した複数の情報をDBから取得する方法がわかりません

mocha1325

総合スコア20

foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2021/06/29 05:36

前提・実現したいこと

clientsテーブル

  • id
  • name

register.php

if ($stmt = $pdo->query($sql)) { foreach ($stmt as $data_val) { $data .= "<option value='". $data_val['id']; $data .= "'>". $data_val['name']. "</option>"; } } ---------------------------- <form action="register_check.php" method="post"> <select name="clients[]" multiple="multiple"> <?php echo $data; ?> </select> </form>

上記register.phpで作成したDBから取得した情報を反映させたプルダウンメニュー(multiple)を使い、
選択されたclientsの情報を下記register_check.phpにPOST送信し、idを登録しnameを確認画面に出力させたいです。

エラーメッセージ

Warning: Invalid argument supplied for foreach() in register_check.php

該当のソースコード

register_check.php

php

1if (!empty($_POST['clients'])) { 2 $sql = "SELECT * FROM clients WHERE id = :id;"; 3 $stmt = $pdo->prepare($sql); 4 $params = array(':id' => $_POST['clients']); 5 $stmt->execute($params); 6 $row = $stmt->fetchAll(); 7 8} 9--------------------------------------------- 10<?php if(!empty($_POST['clients'])) :?> 11<?php foreach($row as $c_data) :?> 12<p><?php echo htmlspecialchars($c_data['name'] , ENT_QUOTES, 'UTF-8'); ?></p> 13<?php endforeach; ?> 14<?php else :?> 15<p>担当店舗はありません</p> 16<?php endif; ?> 17

html内にコロン構文で書かれている
foreachの部分がエラー箇所となります。

試したこと

$_POST['clients']の中身を調べてみたところ、
きちんと選択したclinetsのidが受け渡しできていました。

ですが、
$row['id']、$row['name']は共にNULL出てしまったため
register_check.phpでclientsの情報を取得する方法がおかしい
というところまではわかりました。

発生している問題

プルダウンメニューの仕様としては、
選択されたclientsがない時もあれば一つの時や、複数個ある時もある、
といった状況ですなのですが、どのように書いたら良いのかわからず困っています。

option valueにnameを入れると確認画面の出力は簡単にできるのですが、
idを登録時に使用したいためoption valueはidのままでできる方法がいいのですが
どのように書いたら良いのでしょうか、?

初歩的な質問となってしまい大変申し訳ないのですが
ご教授いただけますと嬉しいです。

よろしくお願いいたします。m(_ _)m

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

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

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

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

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

guest

回答1

0

ベストアンサー

idを複数選ばせるわけですから等号では検索できません

PHP

1<?PHP 2$id=filter_input(INPUT_POST,"clients",FILTER_DEFAULT,FILTER_REQUIRE_ARRAY); 3if(!empty($id)){ 4 $sql="select * from tbl where id in(".implode(",",array_fill(0,count($id),"?")).")"; 5 print $sql.";<br>\n"; 6 print_r($id); 7} 8?> 9<form method="post"> 10<select name="clients[]" multiple> 11<option value="1">1</option> 12<option value="2">2</option> 13<option value="3">3</option> 14<option value="4">4</option> 15<option value="5">5</option> 16</select> 17<input type="submit" value="send"> 18</form>

投稿2021/06/29 06:09

yambejp

総合スコア116724

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

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

mocha1325

2021/06/30 03:10

ご回答いただきありがとうございます! sql文を条件に合わせて発行する方法があったとは目から鱗でした! おかげさまで無事実装できました。わかりやすいご回答本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問