前提・実現したいこと
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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/30 03:10