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

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

ただいまの
回答率

87.95%

複数のセレクトボックスへDBの内容を反映させたい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,324

score 403

プロフィール更新ページで複数のセレクトボックスにDBへ登録されているデータを反映させる方法についてです。

↓さらっと見て頂ければ...

<?php
class Skilletc {
    static function getAgreement($get){
        $options = array(
            '未定',
            'すぐにでも',
            '1ヶ月以内',
            '2ヶ月以内',
            '3ヶ月以内',
            '6ヶ月以内');
        for ($i=0; $i < count($options); $i++) {
            $selected = $get == $options [$i] ? ' selected' : '';
            echo "<option value=".$options[$i].$selected.">".$options[$i]."</option>";
        }
    }
}

$sql = "SELECT * FROM user_data WHERE id=200";
$stmt = $pdo->query($sql);
$rowData=$stmt->fetch();

$sql = "SELECT * FROM user_skill WHERE user_id = ? ";
$stmtSkills = $pdo->prepare($sql);
$stmtSkills->execute([$rowData['id']]);

$sql = "SELECT * FROM user_quali WHERE id= ? ";
$stmtQualis = $pdo->prepare($sql);
$stmtQualis->execute([$rowData['id']]);

$sql = "SELECT * FROM user_lang WHERE id= ? ";
$stmtLangs = $pdo->prepare($sql);
$stmtLangs->execute([$rowData['id']]);

$sql = "SELECT * FROM user_pr WHERE id= ? ";
$stmtPrs = $pdo->prepare($sql);
$stmtPrs->execute([$rowData['id']]);
$rowPr = $stmtPrs->fetch();

?>

<td>契約可能日</td>
    <td>
        <select style="" name="cont_date">
            <?php echo Skilletc::getAgreement($rowPr['cont_date']); ?>
        </select>
    </td>

本日質問させていただいた回答からこのような形で、DBに登録されている内容を選択されている状態にできることが分かりました。

イメージ説明

問題はここからで、会員登録するときはjsで要素追加させているのですが、ここにDBへ登録されているものを画像のような形式で表示させるところでどうしたらいいか彷徨っています。

イメージ説明

今までは
<?php echo Skilletc::getAgreement($rowPr['cont_date']); ?>
<?php echo Skilletc::getAgreement(filter_input(INPUT_POST,cont_data)); ?>
とかでメソッドに引数を渡すことで対応できてました。

基本はこれと変わらないと思うのですが、
例えばスキルを3つもってる人なら3つ表示をさせなければならないので
それに合わせてjsも働かせる必要があるのですが、、、

「プログラム言語」「経験年数」のところはこうなってます。

<tr id="skill_select" class="skill_select">
    <td>
        <select name="programs1_[]">
            <?php echo Skill::getSkill(); ?>
        </select>
    </td>
    <td>
        <select name="programs_year1_[]">
            <?php echo Skill::getYear(); ?>
        </select>
    </td>
    </tr>
<tr id="skill_selectAdd">
    <td colspan="2">
        <input type="button" value="追加" onClick="skill_selectAdd()">
        <input type="button" value="削除" onClick="skill_selectDel()" id="skill_select_btnDel" disabled="true">
    </td>
</tr>

そもそもの作りがまずかったのかここで躓いています。
プロフィール更新ページなので
プログラム言語とセレクトボックスの間に

DBへ登録されているスキル1 削除
DBへ登録されているスキル2 削除
DBへ登録されているスキル3 削除

という風にすればいいかもしれませんが、(上の3つはセレクトボックス表示ではなく単にテキスト表示)
これでは削除オンリーで

JAVA 2年を
JAVA 3年に変更したい場合にも
一度JAVA 2年を削除して
新たにJAVA 3年を登録しないといけません。

なにか知恵をお借りできればと思います...

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    2016/07/01 08:47

    こちらの質問が他のユーザから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 1

checkベストアンサー

+1

なにを困っているのかよく理解できませんが…あなたの言うように行ごとに削除ボタンを置き、テキストではなくセレクトボックスで表示すれば解決するのでは?どちらも今までの知識で組み替えることは可能だと思いますよ。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/07/02 19:16

    ありがとうございます!
    そのセレクトボックスでの表示がなかなかできませんが、もう少しやってみたいと思います。

    キャンセル

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

  • ただいまの回答率 87.95%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る