![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_05.png?5a7ff87)
PHP/データベースを用いてのプログラミングで壁にぶち当たりましたので、ご質問させてください。
インターネットで色々調べたのですが、データベースを用いたソートの仕方が全く分からずにおります。
希望としましては、下記のようにボタンを押すとソートできるようにしたいと思っています。
http://lcl.web5.jp/prog/siori/ff.php
今現在、次のようなPHPでデータベースへのアクセスと一覧の表示は可能となっています。
なにか、参考になるページや方法など教えていただけないでしょうか。
========
#!/usr/local/bin/php-cgi
<?php
//HTML文を出力 HTMLの開始
print("<HTML>\n");
//HTML文を出力 HEADの開始
print("<HEAD>\n");
//文字コードをSHIFT_JISと指定
print("<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=\"Shift_JIS\">\n");
//HTML文を出力 TITLEの指定
print("<TITLE>myphp1</TITLE>\n");
//HTML文を出力 HEADの終了
print("</HEAD>\n");
//XAMPPの場合はパスワードなし
//DBへ接続開始 サーバー名--localhost ユーザー名--root パスワード--"karipass
$dbHandle = mysql_connect("localhost","root","karipass")
or die("can not connect db\n");
//MySQLのクライアントの文字コードをsjisに設定
mysql_query("SET NAMES sjis")
or die("can not SET NAMES sjis");
//db名を指定する
$db = "test";
//SQL文 tab1表から全行を取り出し、number列の昇順に整列する
$sql = "select * from tab1 order by id";
//SQL文を実行する
$rs = mysql_db_query($db,$sql);
//列数を取得する
$num = mysql_num_fields($rs);
//HTML文を出力 テーブルの開始を指定
print("<table border=1>");
//test表の列数と同じ回数を繰り返す
for ($i=0;$i<$num;$i++){
//HTML文を出力 列名を <td>で囲んで出力
print("<td>".mysql_field_name($rs,$i)."</td>");
}
//test表の行数と同じ回数を繰り返す
while($row=mysql_fetch_array($rs)){
//HTML文を出力 表の行の開始<tr> を出力
print("<tr>");
//test表の列数と同じ回数を繰り返す
for($j=0;$j<$num;$j++){
//HTML文を出力 列の内容を <td>で囲んで出力
print("<td>".$row[$j]."</td>");
}
//HTML文を出力 表の改行</tr> を出力
print("</tr>");
}
//HTML文を出力 テーブルの終了を指定
print("</table>");
//結果レコードをメモリから開放
mysql_free_result($rs);
//DBへの接続を切断
mysql_close($dbHandle);
?>
No.2ベストアンサー
- 回答日時:
phpMyAdminは関係ないっすね・・・
SQLで処理するのが手っ取り早くて簡単です。
たぶん、例としてあげたサイトもその方法を使ってるかと思います。
配置されてる ボタンに、カラム名とソート方向をhiddenなどで仕込んでおいて。SQL生成時に ORDER BY `カラム名` ASC(又はDESC) って入れればいいだけです。
ただし、hiddenで投げられた値をバカ丸出しでそのままSQLに突っ込まないこと。
例えば。
$sql = 'SELECT * FROM tbl1 ORDER BY `'.$_POST['order']'.` '. $_POST['sort'] ;
とかやると、あっという間にSQLインジェクション食らってハッキングされます。
この回答への補足
有難う御座います。
下記のようにすると、ボタンでソートできるようになったのですが、これはバカ丸出しの方法なんですよね??
どのようにしてSQL生成時に ORDER BY `カラム名` ASC(又はDESC) って入れればいいのか分からないのですが、教えていただけないでしょうか。
#!/usr/local/bin/php-cgi
<?php
//HTML文を出力 HTMLの開始
print("<HTML>\n");
//HTML文を出力 HEADの開始
print("<HEAD>\n");
//文字コードをSHIFT_JISと指定
print("<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=\"Shift_JIS\">\n");
//HTML文を出力 TITLEの指定
print("<TITLE>myphp1</TITLE>\n");
//HTML文を出力 HEADの終了
print("</HEAD>\n");
//XAMPPの場合はパスワードなし
//DBへ接続開始 サーバー名--localhost ユーザー名--root パスワード--"karipass
$dbHandle = mysql_connect("localhost","root","karipass")
or die("can not connect db\n");
//MySQLのクライアントの文字コードをsjisに設定
mysql_query("SET NAMES sjis")
or die("can not SET NAMES sjis");
//db名を指定する
$db = "database";
//SQL文 tab1表から全行を取り出し、number列の昇順に整列する
$sql = "select * from tab1 order by $_POST[sort] $_POST[sc]";
//SQL文を実行する
$rs = mysql_db_query($db,$sql);
//列数を取得する
$num = mysql_num_fields($rs);
//HTML文を出力 テーブルの開始を指定
print("<table border=1>");
//test表の列数と同じ回数を繰り返す
for ($i=0;$i<$num;$i++){
//HTML文を出力 列名を <td>で囲んで出力
print("<td>".mysql_field_name($rs,$i)."</td>");
}
//test表の行数と同じ回数を繰り返す
while($row=mysql_fetch_array($rs)){
//HTML文を出力 表の行の開始<tr> を出力
print("<tr>");
//test表の列数と同じ回数を繰り返す
for($j=0;$j<$num;$j++){
//HTML文を出力 列の内容を <td>で囲んで出力
print("<td>".$row[$j]."</td>");
}
//HTML文を出力 表の改行</tr> を出力
print("</tr>");
}
//HTML文を出力 テーブルの終了を指定
print("</table>");
//結果レコードをメモリから開放
mysql_free_result($rs);
//DBへの接続を切断
mysql_close($dbHandle);
?>
<br>
<a href="myphp.php">メニュー</a><br>
<form action="myphp1.php" method="post">
<input type="hidden" name="sort" value="id">
<input type="hidden" name="sc" value="asc">
<input type="submit" value="↓">
</form>
<form action="myphp1.php" method="post">
<input type="hidden" name="sort" value="id">
<input type="hidden" name="sc" value="desc">
<input type="submit" value="↑">
</form>
下記の場合、
初めての場合表が表示されずに、FORMのボタンをクリックして初めて表が作成されますね。
$sql = "select * from tab1 order by $_POST[sort] $_POST[sc]";
初めてでも表が表示されるようにするのはどうすればよいのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
リダイレクト元のURLの取得方法...
-
phpにcssを適応させたい...
-
phpでmysqlから画像パスを出力する
-
PHPで五角形、または多角形のグ...
-
XMLのロードに失敗する
-
PHPのif文でその処理を途中で抜...
-
【file_exists】ファイルが存在...
-
onedrive にexcelファイルをア...
-
拡張子php画像をjpg画像等に変...
-
youtubeに音声のみのmp4ファイ...
-
PHPのMySQLモジュールのインス...
-
pixivのイラスト投稿の仕方を教...
-
javascriptからphpへ変数
-
PHPで作るフレーム、どんな風に...
-
PHPで外部プログラムのバックグ...
-
FTPでのファイルとディレクトリ...
-
ファイルアップロードの上限を...
-
フレームワークの選定について
-
ヒアドキュメントの中で別ファ...
-
PHP8を使うと、大量のWarningが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CSV出力にHTMLが入ってしまう
-
TCPDFについて
-
リダイレクト元のURLの取得方法...
-
PHPでダブルバッファリング(画...
-
ob_end_clean と ob_clean の違...
-
phpにcssを適応させたい...
-
PHPSpreadsheetによる書き出し...
-
PHPで`headers already sent`と...
-
PHPで取得したHTML内のdiv要素...
-
image関数でMS Pゴシックを使い...
-
PHP/phpMyAdmin/データベースな...
-
mPDFでのPDF出力がうまくいかな...
-
画像をDBに保存し、表示させ...
-
エクスプローラーでフォルダを...
-
json_encode日本語表示/PHP5.2.5
-
webroot以外の画像の表示
-
¥マークを出力したいがバック...
-
phpで数字の値を画像で表示した...
-
phpexcelにてsubmitボタンを押...
-
PHP header関数が使えない
おすすめ情報