• 締切済み

PHP/phpMyAdmin/データベースなどでソートを実行する方法

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); ?>

  • PHP
  • 回答数2
  • ありがとう数2

みんなの回答

  • inu2
  • ベストアンサー率33% (1229/3720)
回答No.2

phpMyAdminは関係ないっすね・・・ SQLで処理するのが手っ取り早くて簡単です。 たぶん、例としてあげたサイトもその方法を使ってるかと思います。 配置されてる ボタンに、カラム名とソート方向をhiddenなどで仕込んでおいて。SQL生成時に ORDER BY `カラム名` ASC(又はDESC) って入れればいいだけです。 ただし、hiddenで投げられた値をバカ丸出しでそのままSQLに突っ込まないこと。 例えば。 $sql = 'SELECT * FROM tbl1 ORDER BY `'.$_POST['order']'.` '. $_POST['sort'] ; とかやると、あっという間にSQLインジェクション食らってハッキングされます。

mutsukiame
質問者

お礼

下記の場合、 初めての場合表が表示されずに、FORMのボタンをクリックして初めて表が作成されますね。 $sql = "select * from tab1 order by $_POST[sort] $_POST[sc]"; 初めてでも表が表示されるようにするのはどうすればよいのでしょうか。

mutsukiame
質問者

補足

有難う御座います。 下記のようにすると、ボタンでソートできるようになったのですが、これはバカ丸出しの方法なんですよね?? どのようにして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>

  • xyz951
  • ベストアンサー率18% (15/79)
回答No.1

SQLで処理するなら order by id を変えるだけ

mutsukiame
質問者

補足

ご回答有難う御座います。 ボタンを押すとそれぞれのフィールド(タイトルや作者など)でソートするには、order byでは駄目ですよね?? もしかして、order byの項目によってそれぞれページを作るということでしょうか。

関連するQ&A

  • MySQL+PHPでリストから詳細表示

    MySQL+PHPで顧客情報のデータベースを作っているところで詰まってしまいました。下のようなテーブルがあります。 number name furi ・・・ ------------------------- 1 北  kita 2  南 minami 3    東 higashi 4    西 nisi このテーブルのリスト一部分を表示して 詳細ボタンを押すと顧客情報の詳細が表示 できるようにしたいのですが、どのように すればいいかまったくわかりません。 一覧表示      名前 フリガナ   詳細  北   kita 詳細  南   minami  詳細 西   nisi こんな感じで詳細を押すと、顧客情報の詳細が 表示されるようにしたいのですが。 一覧を表示させるPHPはこんなかんじで作りました。 //SQL文 tab1表から全行を取り出し、number列の昇順に整列する $sql = "select * from addrmain order by number"; //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
  • PHPでのデータ表示画面⇒CSV出力について

    先日より質問に対しコメントありがとうございます。 教えていただいた内容と自分でやった結果3つのSQLでデータを出力し出力順を揃えた方法で表ができました。 これをCSV形式で出力したいのですがこのまま出力できるのでしょうか?それとも別途方法をとる必要があるのでしょうか。 自分の中で今ひとつまとまらないので改めて質問させていただきます。 ソースへの指摘併せコメントよろしくお願いします。 ※現ソース <HTML> <BODY> <?PHP //DB接続部省略 $sql="SELECT I.ITEM_ID,I.ITEM_NAME FROM ITEMS AS I,LIST AS L・・・(略)"; $sql2="SELECT A.SHOP_ID,A.SHOP_NAME,A.ITEM_NAME, IF(L.ITEM_ID=A.ITEM_ID,'○','') FROM・・・(略)"; $sql3="SELECT S.SHOP_ID,S.SHOP_NAME FROM SHOP AS S ・・・(略)"; $rs=mysql_query($sql,$db); $rs2=mysql_query($sql2,$db); $rs3=mysql_query($sql3,$db); $line=mysql_num_rows($rs); $line2=mysql_num_rows($rs2); $line3=mysql_num_rows($rs3); print("<TABLE border=1>"); print("<TR>"); print("<TD>店舗名</TD>"); for($i=0;$i<$line;$i++) { $row=mysql_fetch_row($rs); print("<TD>".$row[1]."</TD>"); } print("</TR>"); print("<TR>"); for($i=0;$i<$line3;$i++) { $row3=mysql_fetch_row($rs3); print("<TD>".$row3[2]."</TD>"); for($j=0;$j<$line;$j++) { $row2=mysql_fetch_row($rs2); if($row2[3] == "") { print("<TD width=25> </TD>"); } else { print("<TD width=25>".$row2[3]."</TD>"); } } print("</TR>"); } print("</TABLE>"); mysql_free_result($rs); mysql_free_result($rs2); mysql_free_result($rs3); mysql_close($db); ?> </BODY> </HTNL>

    • ベストアンサー
    • PHP
  • mysqlからmysqliへの変更点

    お世話になります。 PHPでmysqlのデータをhtmlで表示するソースを組んでいます。 初心者なもので、サンプルを見ながら組んでいるのですが、 そのサンプルがmysql_queryなどを使っていました。 しかし、今は推奨されず、mysqli_queryなどを使うとか。 そこで、単純にiを付け加えただけなのですが、そう簡単に 行きませんでした。 どの部分をどのように修正すればよいのかを教えてください。 ------------------------------------------------- <?php header("Content-Type:text/html;charset=SHIFT_JIS"); ?> <HTML> <HEAD> <TITLE></TITLE> </HEAD> <BODY> <?php $srv = "localhost"; // サーバー名 $id = "xxxxx"; // ユーザーID $passwd = "xxxxx"; // パスワード $dbn = "sample"; // データベース名 $sql = "SELECT * FROM sample1"; // SQL文 // データベースに接続する $db = mysql_connect($srv,$id,$passwd); mysql_select_db($dbn,$db); $rs = mysql_query($sql,$db); $num = mysql_num_fields($rs); //--- テーブルのレイアウト --- 開始 -----------------------> print("<TABLE border='1'><TR>"); for($i=0; $i<$num; $i++) { print("<TH>".mb_convert_encoding(mysql_field_name($rs,$i),"SJIS","EUC-JP")."</TH>"); } print("</TR>"); while($row = mysql_fetch_array($rs)) { print("<TR>"); for($j=0; $j<$num; $j++) { print("<TD>".mb_convert_encoding($row[$j],"SJIS","EUC-JP")."</TD>"); } print("</TR>"); } print("</TABLE>"); mysql_free_result($rs); mysql_close($db); //--- 終了 ---> ?> </BODY> </HTML> ---------------------------------------------- 他サイト様からの引用ですが、何卒よろしくお願いいたします。

    • 締切済み
    • PHP
  • php + mysql でフォーム作成時のエラー

    データベースから取り出したデータをラジオボタンで選択し、それをデータベース(別のテーブル)に追加させる機能を作りたいです。 非常に初歩的なことだとは思うのですがご教授ください。 MySQL 4.0.27 PHP 5.2.11 <FORM ACTION="cone3.php" METHOD="post"> <?php $srv = ""; // サーバー名 $id = ""; // ユーザーID $passwd = "; // パスワード $dbn = ""; // データベース名 $sql = "SELECT code, lname, lecturer, kind, gradetype FROM Lecture"; // SQL文 // データベースに接続する $db = mysql_connect($srv,$id,$passwd); mysql_select_db($dbn,$db); $rs = mysql_query($sql,$db); //--- テーブルのレイアウト --- 開始 -----------------------> print("<TABLE><TR>"); print("<TR><th> </th><th>講義名</th><th>教員</th><th>科目区分</th><th>配当学年</th></tr>"); while($row = mysql_fetch_array($rs)) { print '<tr><td><input type="radio" name="regist" value="$row['code']"></td>'; print '<td>' . $row['lname'] . '</td>'; print '<td>' . $row['lecturer'] . '</td>'; print '<td>' . $row['kind'] . '</td>'; print '<td>' . $row['gradetype'] . '</td>'; print '</tr>'; print ("</TR>"); } print("</TABLE>"); print_r($_POST); echo "<br />\n"; mysql_free_result($rs); mysql_close($db); //--- 終了 ---> ?> <input type="submit" name="submit" value="送信"> </form> 以上のようなソースでラジオボタンで配列の$row[code]の値を送りたいんですがうまくいきません。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHP+MYSQLで3×5のテーブル表示について

    こんにちは。 PHP+MYSQLでページング処理で画像を出力の勉強をしています。 さっそく質問です。PHP+MYSQLを使って 元テーブルがID番号、名前、性別だとして、 1名分の表示は上記フィールドのデータを縦に3行作った後、 横の列に移るという作業をして、結果縦横に3×5並べる にはどう書けば良いいでしょうか? プログラムのイメージは以下になります。 めくっていく頁のはじめの行($i=$startline)から表示する時、 表示を1列×3行のまとまり□を縦横に3×5出力する場合、 mysqlに接続した後、 $rs = mysql_db_query($db,$sql); while($row=mysql_fetch_array($rs) ){ print("<table><tr>"); print("<td>"); print("<td>"); for($i=0;$i<4;$i++){ print("<tr>"); print("<td>"); print($row[$i]); print("</tr>"); print("</td>"); print("</td>"); } print("</td>"); print("</tr></table>"); こういう形の後、ページングの$pageのurlを作って、$_get[]に 飛ばすというイメージです。 よろしくお願いします。 以上

    • 締切済み
    • PHP
  • PHP実行時の警告について

    こんばんわよろしくお願いします。 aaacafeのレンタルサーバーでPHPのバージョンは4.2.3です。 Mysqlに接続して結果を一行づつ表示したいのですが 実行時に下記の2行警告が出てヘッダ部分しか表示しません。 自分で調べてぼんやりとは原因はわかったのですが、 具体的にどう直してよいかわかりません。 ご教示お願いします。 Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource 以下ソースです。 <?PHP $sql = ""; $sql .= "select * from LIVE"; $sql .= " ORDER BY DATE DESC"; ?> <HTML> <HEAD> <TITLE>接続テスト</TITLE> </HEAD> <BODY> <?php //SQL発行 $rs = mysql_query($sql, $conn); echo "<table cellSpacing=0 cellPadding=0>\n"; echo "<tr bgcolor=yellow>"; echo "<th >日付</th>"; echo "<th>ツアータイトル</th>"; echo "<th>会場</th>"; echo "<th>アーティスト</th>"; echo "</tr>\n"; ■この行→ while( $rec = mysql_fetch_array( $rs, MYSQL_ASSOC ) ){ echo "<tr>\n"; echo "<td>" . _hs($rec['DATE']) . "</td>\n"; echo "<td>" . _hs($rec['TITLE']) . "</td>\n"; echo "<td>" . _hs($rec['PLACE']) . "</td>\n"; echo "<td>" . _hs($rec['ARTIST']) . "</td>\n"; echo "</tr>\n"; } //結果セットの解放 ■この行→ mysql_free_result( $rs ); //切断 mysql_close($conn); echo "</table>"; ?> </BODY> </HTML>

    • ベストアンサー
    • PHP
  • PHPでのMYSQL接続のデータ表示

    PHPのバージョンは4.2.3です。 index.php という一覧表示画面から 一意なKey文字列を受け取りそのデータに合致する データの詳細を表示する画面です。 実データ部分が表示されず困っています。 実行時のPHPのエラーも出力されないので いまいちどこが悪いのかわかりません アドバイスよろしくお願いします。 <?php require_once( "common.php" ); require_once( "const.php" ); if(! $conn = mysql_connect( 'ホスト名','ユーザー名','PASS')){ die( 'MYSQL接続失敗'); } $sql = ""; $sql .= "select * from LIVE "; $sql .= "ORDER BY Date DESC "; $sql .= "WHERE ID=".$_REQUEST[ "KEY" ]; echo $sql; mysql_select_db("DB名",$conn); $rs = mysql_query($sql, $conn); $DATE=$rs['DATE']; $TITLE=$rs['TITLE']; $PLACE=$rs['PLACE']; $ARTIST=$rs['ARTIST']; echo $DATE; echo $TITLE; echo $PLACE; echo $ARTIST; //$rec = mysql_fetch_array( $rs, MYSQL_ASSOC ); ?> <HTML> <HEAD><TITLE>ライブ予定</TITLE></HEAD> <BODY><H1 ALIGN="CENTER">ライブ予定詳細</H1> <A HREF="./">戻る</A> <TABLE BORDER="1" ALIGN="CENTER" WIDTH="100%"> <TR><TD BGCOLOR="#FFFFCC">日付</TD> <TD><?php HESC($rec['DATE']) ?></TD></TR> <TR><TD BGCOLOR="#FFFFCC">タイトル</TD> <TD><?php HESC($rec['TITLE']) ?></TD></TR> <TR><TD BGCOLOR="#FFFFCC">場所</TD> <TD><?php HESC($rec['PLACE']) ?></TD></TR> <TR><TD BGCOLOR="#FFFFCC">アーティスト</TD> <TD><?php HESC($rec['ARTIST']) ?></TD></TR> <TR><TD BGCOLOR="#FFFFCC">本文</TD> <TD></TD></TR> </TABLE> </BODY></HTML>

    • ベストアンサー
    • PHP
  • PHPとMySQLの文字化けの対応法は?

    OSはWinXPで、MySQL+PHPのアプリを作成しているところです。 <html> <head><title>配列データの取得</title></head> <body> <table border="1"> <tr><td>題名</td><td>著者</td><td>出版社</td></tr> <?php $host = "localhost"; if (!$conn = mysql_connect($host, "user", "pass")){ die("MySQL接続エラー.<br />"); } mysql_select_db("kisop", $conn); $sql = "SELECT * FROM book_table LIMIT 10"; $res = mysql_query($sql,$conn); while($row = mysql_fetch_array($res)) { print("<tr>"); print("<td>".$row["btitle"]."</td>"); print("<td>".$row["bauth"]."</td>"); print("<td>".$row["bpub"]."</td>"); print("</tr>\n"); } mysql_free_result($res); ?> </table> </body> </html> と、こんな演習をしているのですが、ブラウザに表示させると文字化けしました。 HTML文はEUC、MySQLのデータは、シフトJISで入っていたようです。 そのため、「題名」「著者」などの見出しと、取り出したデータを同時に文字化けさせずに、表示できない 状態です(泣)。 MySQLからデータを取り出すときに、mb_convert_encodingで文字コードを変換してやれば 化けないでしょうが、出力しようとするデータのすべてを変換しなければなりません。 プログラマーさんたちは、文字化けの現象について、どう対応されているのでしょうか? いちいち、mb_convert_encodingで、変換しているものなのでしょうか? 定石のようなものを知りたいところです。 たとえば、HTML文は文字コード○○を使うものだ、設定ファイルを書き換えておく、などなど。 よろしくおねがいします。

    • ベストアンサー
    • PHP
  • phpでのアンケート編集

    社員旅行のアンケート編集のphpです。 (???)のところがどうしてもわからなくて上手く動きません。 どなたか回答お願いします。 <?php session_start(); ?> <html> <head> <body> <font size=5><b>社員旅行アンケート集計</b></font><br><br> <?php $db = mysql_connect("localhost","",""); mysql_select_db("syain_db"); $query = "SELECT * FROM trvl_t"; $result = mysql_query($query); if(mysql_num_rows($result) == 0) print"<br>無し"; else{ for($i = 0;$i <4;$i++) $cnt[$i] = 0; while($row = mysql_fetch_array($result))(???) mysql_close($db); echo "<table border =1>"; echo "<tr><td>旅行先</td><td>希望者数</td></tr>"; for($i=0;$i<4;$i++){ echo "<tr align=center>"; if($i == 0) echo "<td>北海道</td>"; elseif($i == 1) echo"<td>沖縄</td>"; elseif($i == 2) echo"<td>韓国</td>"; elseif($i == 3) echo"<td>香港</td>"; echo "<td>".(???)."</td>"; echo"</tr>"; } echo "</table>"; } ?>

    • ベストアンサー
    • PHP
  • PHPからMySQLへの検索

    PHPからデータベースの検索について勉強をはじめたばかりで初歩的な質問かと思いますが過去ログを読んでも解決しなかったため質問いたします。 たとえばデータベースに教授名や授業名などを収納しておいてPHPで教授名を入力すると授業名等が表示されるようにするスクリプトを作ろうと思っているのですがうまくいきません。 少なくともMySQLで『田中』という教授名は入っているので検索すれば出てくるはずなのですが検索件数が0件になってしまいます。 テキストボックスに入力された情報を受け渡すところに原因がある気がするのですが原因はわかりませんでした。 おわかりになりましたらご教授ください http://iskiso3.hustle.ne.jp/test.php <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-type" content="text/html; charset=EUC-JP"> <meta http-equiv="Content-Style-Type" content="text/css"> <title>テスト</title> </head> <form action="test.php" method="post"> 教授名を入力してください<br> <input type="text" name="namae" size="30"> <input type="submit" value="送信"> </form> <body> <?php $name = $_POST['namae']; $con = mysql_connect("mysql3.naid.jp" , "ID" , "PASS") or die ('DB Connection Error= '. mysql_error()); mysql_select_db("iskiso3", $con) or die ('DB Connection Error= '. mysql_error()); $sql = "select * from jugyou where kyouju like "*$name*" "; $result = mysql_query($sql,$con); if ( $result == $FALSE ) { die("Search Result: 0 items"); } $num = mysql_num_rows($result); print "<table><tr><td>科目名</td><td>教授名</td><td>内線</td></tr>"; for ($i=0; $i<$num; $i++) { $r = mysql_fetch_row($result); print "<tr><td>$r[0]</td><td>$r[1]</td><td>$r[2]</td></tr>"; } print "</table>"; ?> </body> </html>

    • ベストアンサー
    • MySQL

専門家に質問してみよう