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

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

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

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

3回答

1201閲覧

POSTで値を受け取ってからの並び替え

yuyamaa

総合スコア3

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2021/05/09 02:23

編集2021/05/09 02:49

①聞きたいこと
ドロップダウンで項目を選択後、並び替えボタンを押すと商品一覧の並び替えを行う方法
②起きている問題
商品は表示されていますが、並び替えができておりません。
③ソースコード

php

1<?php 2require('./dbconnect.php'); 3 4if ($_POST['filter'] === 'vibration') { 5 $filter = 'vibration'; 6 $sort = $db->prepare('SELECT * FROM tool ORDER BY ?'); 7 $sort->bindParam(1, $filter); 8 $sort->execute(); 9?> 10 11 <?php 12 foreach ($sort as $tool) { 13 print('<div class="images col-md-3">'); 14 print('<div class="image_1">'); 15 print('<a href="./racket-' . $tool['number'] . '/racket_' . $tool['number'] . '.php?number=' . $tool['number'] . '">'); 16 print('<img src="images/racket' . $tool['number'] . '.jpg" alt="' . $tool['name'] . '" height="230" width="230">'); 17 print('<div>' . $tool['name'] . '<br>価格:' . $tool['price'] . '円(税込)<br>反発性:' . $tool['repulsion'] . '<br>振動特性:' . $tool['vibration'] . '</div>'); 18 print('</a>'); 19 print('</div>'); 20 print('</div>'); 21 } 22?>

html

1<form method="post" action=""> 2 <select name="filter"> 3 <option value="select">選択してください</option> 4 <option value="price">価格順</option> 5 <option value="repulsion">反発性順</option> 6 <option value="vibration">振動特性順</option> 7 </select> 8 <input type="submit" value="並び替え"> 9</form>

④問題について考えたこと
bindParamのところでうまくいっていないような気がします。

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

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

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

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

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

guest

回答3

0

order byにはカラムが指定されるのでバインドできません。
バインドできるのは「値」のみ。
直接文字列として組み込んでください。
SQLインジェクション避けたいなら入力値をそのまま入れるのではなく
1なら○○など2なら▲▲、それ以外はデフォルト□□
など対応する設定値をプログラム側で用意し変換すると良いです(あくまで一案)

気がします

エラーハンドリングを適切に組み込んでおけば何が起きているか見えます。エラーが出ないのはエラーが出る仕組みにしていないからです。

投稿2021/05/09 03:03

編集2021/05/09 03:05
m.ts10806

総合スコア80875

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

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

yuyamaa

2021/05/09 07:20 編集

直接文字列を組み込んで作成しました。 ありがとうございました!
m.ts10806

2021/05/09 08:02

でしたら、それで自己解決とするのはちょっと。
yuyamaa

2021/05/09 22:48

すみません、やり方わからずに自己解決としてしまいました。申し訳ありません! 次回から気をつけます。
m.ts10806

2021/05/09 23:16

「質問するときのヒント」にあるように「最も役に立った回答を」ベストアンサーに選びます。やり方が分からないことはないのでは。回答には解決済みにする、ベストアンサーにするボタンが出ているはずですし。 あと、「受付中に戻す」こともできるので、いわゆる「ベストアンサーの付け替え」もできます。
guest

0

filterがvibrationではないときにどうしたいのでしょうか?

php

1$filter=filter_input(INPUT_POST,'filter'); 2if($filter === 'vibration') { 3 $res= $pdo->query('SELECT * FROM tool ORDER BY vibration'); 4}

追記

PHP

1<?PHP 2$filter=filter_input(INPUT_POST,'filter'); 3$sql='SELECT * FROM tool '; 4if(in_array($filter,['price','vibration','repulsion'])){ 5 $sql.="order by `$filter` desc"; 6} 7print $sql; 8?> 9<form method="post"> 10<label><input type="radio" name="filter" value="price">price</label> 11<label><input type="radio" name="filter" value="vibration">vibration</label> 12<label><input type="radio" name="filter" value="repulsion">repulsion</label><br> 13<input type="submit" value="send"> 14</form>

投稿2021/05/09 05:56

編集2021/05/09 08:01
yambejp

総合スコア116724

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

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

yuyamaa

2021/05/09 06:42

回答ありがとうございます。 valueがselectの時は通常の並び、priceの時は価格高い順、repulsionの時は反発性高い順に並び替えたいです。
yambejp

2021/05/09 08:02

追記しておきました そういうのはホワイトリストを使って合致したときorder byを 付加すればよいです
yuyamaa

2021/05/10 01:01

ありがとうございます。こちらの方が効率的にプログラムできました。
guest

0

自己解決

php

1if ($_POST['filter'] === 'price') { 2 $sort = $db->query('SELECT * FROM tool ORDER BY price DESC'); 3 $sort->execute(); 4} elseif ($_POST['filter'] === 'vibration') { 5 $sort = $db->query('SELECT * FROM tool ORDER BY vibration DESC'); 6 $sort->execute(); 7} elseif ($_POST['filter'] === 'repulsion') { 8 $sort = $db->query('SELECT * FROM tool ORDER BY repulsion DESC'); 9 $sort->execute(); 10} else { 11 $sort = $db->query('SELECT * FROM tool'); 12 $sort->execute(); 13};

投稿2021/05/09 07:21

yuyamaa

総合スコア3

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問