

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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CSV出力にHTMLが入ってしまう
-
ob_end_clean と ob_clean の違...
-
PHPからメールを送る@さくらイ...
-
centos6のlogにscript not foun...
-
【file_exists】ファイルが存在...
-
phpでアドレス形式をチェックす...
-
バッチを用いたフォルダの自動移動
-
glide3x.dllがないと表示されま...
-
文字列全体に対する置き換え [...
-
エラーコードの意味を教えてく...
-
トランザクションが原因?DBに...
-
ApacheでのSSIを利用する際の拡...
-
PHPのメールフォーム文字化けに...
-
CakePHPはなぜ普及しない
-
php.iniがない
-
php.ini を設定を変更すると再...
-
HYのAM11:00のラップの部分の歌...
-
phpメールフォームから送信・登...
-
sql文について質問です。エラー...
-
htmlでsubmitで指定したAction...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ob_end_clean と ob_clean の違...
-
CSV出力にHTMLが入ってしまう
-
PHPリンク
-
画面にそのままを出力したい
-
PHPがどうしても反映されません
-
Smarty/pluginsファルダ内 fun...
-
特定のURLに移動するには?
-
セッション管理に関する質問
-
php 画像表示(imgタグ)
-
mPDFでのPDF出力がうまくいかな...
-
PHPにおける時間計算、時間足し...
-
PHPでPDFを作成するためのライ...
-
CGIからPHPへの書き換え
-
PHPで`headers already sent`と...
-
phpexcelにてsubmitボタンを押...
-
ブラウザのページキャッシュ機...
-
PHPでの出力ページサイズについて
-
phpとdb
-
PHPで取得したHTML内のdiv要素...
-
検索結果の出力後、それをTXTに...
おすすめ情報