花屋のサイトです。
会員様が何度か買い物をしたことがあるとして、
過去に頼んだお届け先の相手様の名前をすべて出したのですが
一人しか表示されません。
$code=$_SESSION['member_code'];は会員様のコードになります。
お届け先のテーブル(dat_otodoke)にも会員様のコードがあり、それで紐づけされています。
あまりPHPが分かっていない部分があるため、コードが見にくいかもしれませんが、
分かる方がいらっしゃいましたら、教えてください。
<label for="name2" class="col col-xs-12 col-sm-4 col-md-3 control-label">贈る相手様<span class="label label-danger">必須</span></label>
<div class="col col-xs-12 col-sm-5 col-md-4">
<select name="name2" class="form-control">
<option value="onamae2">
<?php
$code=$_SESSION['member_code'];
include ( dirname ( __FILE__ ) . '/path/file.php');
$sql='SELECT name2,code_member FROM dat_otodoke';
$stmt=$dbh->prepare($sql);
$stmt->execute();
$rec=$stmt->fetch(PDO::FETCH_ASSOC);
$dbh=null;
$onamae2=$rec['name2'];
$code_member=$rec['code_member'];
if($code == $code_member){
echo $onamae2.'様</option>';
}else{
echo 'お届け先はありません。</option>';
}
?>
</select>
</div>
<div class="col-sm-offset-3 col-md-offset-5"></div>
</div>
コード
編集したものです。
エラーになってしまいました。
$code=$_SESSION['member_code'];
include ( dirname ( __FILE__ ) . '/path/file.php');
$sql='SELECT name2,code_member FROM dat_otodoke WHERE code=?';
$stmt=$dbh->prepare($sql);
$stmt->execute();
$dbh=null;
while($rec=$stmt->fetch(PDO::FETCH_ASSOC))
{
$onamae2=$rec['name2'];
$code_member=$rec['code_member'];
if($code == $code_member){
echo $onamae2.'様</option>';
}else{
echo 'お届け先はありません。</option>';
}
}
?>
コード
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
+4
まず
$sql='SELECT name2,code_member FROM dat_otodoke';
とありますが$codeをつかって絞り込みしていませんよね?
WHERE code
=?
的な処理が必要ですね
そのうえで
$rec=$stmt->fetch(PDO::FETCH_ASSOC);
whileやforeachなどでループせずにfetchしているので単に1行目をひっぱってきています
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
$rec=$stmt->fetch(PDO::FETCH_ASSOC)
は取得結果を1レコードずつしか取得できないため、以下のようにwhileなどで繰り返し取得する必要があります。
while ($rec=$stmt->fetch(PDO::FETCH_ASSOC)) {
// 繰り返す処理
}
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
checkベストアンサー
0
とりあえず現時点で判明している部分で明らかに間違っているところや不要なもの等を修正すると、こんな感じでしょうか。
<?php
include ( dirname ( __FILE__ ) . '/path/file.php');
$sql='SELECT name2 FROM dat_otodoke WHERE code_member = :code';
$stmt=$dbh->prepare($sql);
$stmt->bindValue(':code', $_SESSION['member_code'], PDO::PARAM_INT);//会員コードが数字だと仮定
$stmt->execute();
while ($rec = $stmt->fetch(PDO::FETCH_ASSOC) ) {
if($rec['name2'] != ""){
echo $rec['name2'].'様</option>';
}else{
echo 'お届け先はありません。</option>';
}
}
?>
その他、現時点で気づいた問題点や要改善点は以下の通り。
- select nameやoption valueの使いかたを間違っている(HTMLを理解していない)
- echoするときはhtmlspecialcharsなどでエスケープする
上記PHPコードでは出力されたoptionのvalueが適切に設定されていないため、結局あなたが期待しているような動作はしません。その辺まで全ては書きませんので、ご自分でまずHTMLについてググって調べてください。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.22%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
zico_teratail
2017/01/12 15:09
「エラーになってしまいました」ではなくて、具体的にどういう操作をしたらどういうエラーだったのかとか、表示エラー文などをコピペしてください。