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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

Q&A

解決済

1回答

219閲覧

PHP5.2環境 条件によって商品を絞り込み表示したい

yamashitapikmin

総合スコア15

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

0グッド

0クリップ

投稿2019/02/27 04:40

前提・実現したいこと

前提:レンタルサーバの仕様上、PHPのバージョンが5.2になります。

商品サイトを構築しており、
約500種類の商品を任意の条件で絞り込み→表示したいと考えました。

商品が多いのでデータベースを構築しました。
※データベースやPHPに対する知識はほとんどありません。
今回は巷の図書館で借りた、初心者向けの教本を読みながら
なんとか構築した次第です。

データベースに接続し、選択された条件を表示することはできました。

現在は条件を3つ、ラジオボタンで選択できるようにしています。
イメージ説明

条件1:形状
条件2:大きさ
条件3:カラー
※ゆくゆくはさらに条件を増やしたいと考えています。
※それぞれの条件をカラムごとに用意しています。
※それぞれの条件ごとにname値を統一し、value値をAND検索の対象にしています。

実現したいこと:
各条件における“すべて”を選んだ場合、表示する対象をカラム内全てとしたいです。

例)形は☆を選び、大きさは中を選び、カラーはすべてを選んだ場合、
☆の形状で中の大きさですべてのカラーの商品が表示エリアに表示される、としたいです。

現状→それぞれの条件において、“すべて”以外(条件を特定した)を選んだ場合のみ、
その選択条件の通り正しく表示します。

該当のソースコード

PHP

1<?php 2 $sql = "SELECT * 3 FROM productDB 4 WHERE 1 5 AND keijou = '$keijou' 6 AND size = '$size' 7 AND color = '$color' 8 "; 9 $result = mysql_query($sql, $link); 10 11 $cnt = mysql_num_rows($result); 12 if ($cnt == 0) { 13 echo "<p>【条件に該当する製品はみつかりませんでした】</p>"; 14 } else { 15 $num_rows = mysql_num_rows($result); 16 echo "<p>" . ($num_rows) . "件みつかりました</p>"; 17 18 while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 19 echo "<p>{$row['detail']}</p>"; 20 } 21 } 22?>

考えたり試したこと

・“すべて”を選んだときのvalue値を変えれば良いのでは?と考え、
0(ゼロ)やカラム名を入れて試しましたが、動きませんでした。

・“すべて”を選んだときのvalue値を仮に0(ゼロ)にして、
sql実行前にif関数で分岐してはどうだろう、と考えましたが、
エラーメッセージが出て動きませんでした。

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

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

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

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

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

guest

回答1

0

ベストアンサー

radioの「全て」のvalueがわかりませんが「全て」を選ぶということは「絞らない」なので、where句から抜けば良いかと(抜くというより、「全て以外のときだけWhere句に入れる」)

※PHP5.2環境は手元に無いのでPHP7環境で確認してます

php

1$where_option = array(); 2if($keijou!= "" && $keijou != "全て"){ 3 $where_option[] = " keijou='$keijou' "; 4} 5if($size!= "" && $size != "全て"){ 6 $where_option[] = " size='$size' "; 7} 8 9if($color!= "" && $color != "全て"){ 10 $where_option[] = " size='$color' "; 11} 12 13$where = ""; 14 15if(count($where_option) > 0){ 16 $where = " where ".implode(" and ",$where_option); 17} 18 19$sql = "SELECT * FROM productDB".$where;

投稿2019/02/27 04:54

m.ts10806

総合スコア80765

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

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

yamashitapikmin

2019/02/27 05:13

mts10806さん ご回答ありがとうございます!!!! ご教示の通り記述したところ、みごとに動きました、望み通りの動作が実現しました!!!! 解決策がわからず悩み続けて落ち込んでいたのですが、 いまは感謝の気持ちでいっぱいです!!!!ありがとうございます!!!! php5.2環境による支障はいっさいありませんでした。 この度ご教示くださいました記述内容の意味を、自身は未だ理解できていません。 この後、ひとつひとつ意味を理解していくよう、きちんと復習に努めます! 本当に、ありがとうございました◎
m.ts10806

2019/02/27 05:16

一応、配列の宣言を本来[]と書くところをarray()としてみたりしました(5.4以降の表現なので) 基本的には発想だと思います。 文章で書いたことをそのまま表現しようとすると結構難しくなるので、 そういうときは表現を逆にしてみるとか、ですね。 andとor、イコールとノットイコールを入れ替えて表現は逆でも同じ意味にできるので、そこは色々練習してみてください。
yamashitapikmin

2019/02/27 05:32

先生、ありがとうございます(:_;)。 わかりました、色々ためしてみます! 正しく動くことがわかっていると思うと、安心して練習できます(〃v〃)ノ
m.ts10806

2019/02/27 05:38

先生と言われるとちょっと照れますね。ただここは学校やサポートセンターではないのであくまで淡々とアドバイスをする形をとらせていただきます。 1つ釘を刺すようで悪いのですが、「正しく動くことが前提」のプログラムはセキュリティリスクだらけとなります。 今回はとりあえず動くように対応していますが、SQLインジェクションの対策とかは必須ですし、 入力された情報が渡されるということはブラウザデベロッパーツールなどで情報を書き換えて想定以外の情報を送信することもできます。 そういったところは必ず意識してください。「ユーザーからの入力は信用しない」が原則です。 「変数」である以上、何が入ってくるかはプログラム側で固定で入れない限りは把握していないわけですからね。
yamashitapikmin

2019/02/27 06:04

はい!はしゃいですみません。。 セキュリティの観点につきまして、気をつけます。 (教本にも注意書きがありました、悪意のあるユーザーに注意するように、と・_・;) ちょっと怖じ気づきましたが、それ以上に、 耳にしたことのないキーワード(SQLインジェクション??@_@;ググりました!)や 考えを教えていただけて、またしても感謝です。 ありがとうございます^^。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問