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

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

ただいまの
回答率

88.78%

DBにあるデータを使ってセレクトボックスに表示したい

解決済

回答 1

投稿

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

YukaSaku

score 43

オンラインショップのログイン画面を作っています。
ユーザーがログインした後に、商品カテゴリをセレクトボックスから選べるようにしたいと思っています。
このセレクトボックスの中身はproduct_categoryテーブルから持ってくるようになっているのですが、データが入ってきません。
//product DB//の箇所のコードなのですが、何が間違っているのでしょうか?

<?php
session_start();
ini_set("include_path","./includes");
include("dbinfo.inc");
if(!isset($_SESSION['username'])) {
  header("Location: login.php");
}

 $logtime = date("H:i:s");

// ユーザーIDからユーザー名を取り出す
$mysqli = new mysqli($host, $user, $passwd, $dbname);
$sql = "SELECT * FROM login WHERE username='".$_SESSION['username']."'";

$result = $mysqli->query($sql);
if (!$result) {
  print('Cant execute query.' . $mysqli->error);
  $mysqli->close();
  exit();
}

// GET user info
while ($row = $result->fetch_assoc()) {
  $username = $row['username'];
  $email = $row['email'];
  $gen = $row['gen'];
  }
$sql = "UPDATE login SET logtime = NOW() WHERE username = '" . $_SESSION['username'] . "'";

$result = $mysqli->query($sql);
if (!$result) {
  print('Cant execute query.' . $mysqli->error);
  $mysqli->close();
  exit();
}
// Cut data base
//$result->close();

//product DB//
$sql = "SELECT * FROM product_category WHERE category='".$_SESSION['category']."'";
$result = $mysqli->query($sql);

foreach((array)$category as $value)
{
 $category_i = $value;
    echo $_POST['category'];
}
if (!$result) {
  print('Cant execute query.' . $mysqli->error);
  $mysqli->close();
  exit();
}


    /*    
    function get_the_category( $id = false ) {
    $categories = get_the_terms( $id, 'category' );
    if ( ! $categories || is_wp_error( $categories ) )
        $categories = array();

    $categories = array_values( $categories );

    foreach ( array_keys( $categories ) as $key ) {
        _make_cat_compat( $categories[$key] );
    }
    }*/


?>

<!DOCTYPE HTML>
<html>
<head>
<title>Exercise6</title>
<link rel="stylesheet" href="custom.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap.min.css">
</head>
<body>
    <div class="col-xs-6 col-xs-offset-3">
        <h1>Online shop</h1><p>Username:<?php echo $username; ?></p>

<select name="category">
  <option value="NULL">Choose One</option>
  <?php  echo "<option value='" .$category_i."' ". ($category_i == $value?'selected':'') .">".$value."</option>"; ?>
</select>

<br><br>
 <button type="submit" class="btn btn-default" name="submit"><a href="login.php">Submit</a></button>
 <button type="button" class="btn btn-default" name="logout"><a href="login.php">Logout</a></button>


    </div>
</body>
</html>

テーブル名: product_discription
catalog_id     INT(5)    AUTO_INCREMENT. Primary key.Unique.
name     VARCHAR(50)    
description     VARCHAR(500)    
price     DECIMAL(7,2)    
category_id     VARCHAR(10)

テーブル名: product_category
category_id INT(10)    AUTO_INCREMENT. Primary key.Unique.
category VARCHAR(100)   (category name)    

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

+1

$_SESSION['category']

上記に何も入っていないから(もしくはnull?)ではないでしょうか?

foreach((array)$category as $value)

上記、(array)でキャストしているため未定義エラーが出ていませんが、
$category自体はどこにも定義されていないようです。
本来はproduct_categoryのSELECT結果を受取るべきでは?

追記

参考URLなど

・$_SESSIONについて
PHPマニュアル
PHP 関数($_SESSION etc)

・SELECT結果を受取る
[PHP] mysqli使い方まとめ(MySQL接続~SELECT実行まで)

・POSTとか
PHPでフォームからデータを受け取る方法(GETとPOST)

・総合的なやつ
Cookieとセッションをちゃんと理解する

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/05/25 16:29

    categoryに関してですが、カテゴリ名でカテゴリの絞込みを行う・・・ように見受けられるので$_SESSIONは不要ではなくフォームからsubmitされた値を$_POSTで受取るのでじゅうぶんかなと思います。
    ユーザ毎に利用できるカテゴリが指定されているといった仕様でしたら$_SESSIONでもありですが、その場合はカテゴリID保管の方がいいですね。
    ただ、その場合、ユーザからの入力を受けとるのでセキュリティの観点からSQLのエスケープはしておきましょう。もちろん画面に表示するときのエスケープも。

    キャンセル

  • 2017/05/31 12:26 編集

    たくさんの参考URLをありがとうございます。とても参考になりました。
    DBから持ってきたデータをただセレクトボックスに入れたかっただけなのでSESSIONでもPOSTでもなかったと思うのですが、ここでコードを書くとわかりにくいので、また別途質問させていただきます。
    ありがとうございました!!

    キャンセル

  • 2017/05/31 12:38

    了解です。よろしくお願いします。

    キャンセル

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

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

関連した質問

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