За последние 24 часа нас посетили 34370 программистов и 1695 роботов. Сейчас ищут 727 программистов ...

Нужен универсальный сортировщик mysql таблицы

Тема в разделе "PHP Free-Lance", создана пользователем Ivanbaston, 8 июл 2009.

  1. Ivanbaston

    Ivanbaston Активный пользователь

    С нами с:
    11 май 2009
    Сообщения:
    9
    Симпатии:
    0
    Apple, заглянул в кассу и оплатил :)
    Спасибо за скрипт!
     
  2. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Спасибо за тортик.
    Обращайтесь к нам ещё =)
     
  3. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    холивар!

    PHP:
    1. <?
    2. $cnf=array(
    3. "db_host"=>"",
    4. "db_name"=>"",
    5. "db_pass"=>"",
    6. "db_encode"=>"cp1251",
    7. "db_user"=>"",
    8. "table_name"=>"",
    9. );
    10.  
    11. $db_link=@mysql_connect($cnf['db_host'],$cnf['db_user'],$cnf['db_pass']) or trigger_error("Не могу подключится к mysql",E_USER_ERROR);
    12. @mysql_select_db($cnf['db_name'],$db_link) or trigger_error("БД не найдена",E_USER_ERROR);
    13. mysql_query("SET NAMES `{$cnf['db_encode']}`");
    14.  
    15. $_GET['field']=!$_GET['field']?false:$_GET['field'];
    16. $sql=mysql_query("SELECT * FROM `{$cnf['table_name']}` ".($_GET['field']?"ORDER BY ".mysql_real_escape_string($_GET['field'])." ".($_GET['desc']?"DESC":"")  :"")) or trigger_error("Неправильный запрос к БД <br>".mysql_error(),E_USER_ERROR);
    17.  
    18. print "<table border=1 align=center>";
    19.  
    20. if(mysql_num_rows($sql)){
    21.   $i=0;
    22.   while($row=mysql_fetch_assoc($sql)){
    23.        print "<tr>";
    24.        if(!$i){
    25.            $fields=array_keys($row);
    26.            foreach($fields as $key=>$val){
    27.                print "<td>";
    28.                if($_GET['field']==$val) print $val;
    29.                else print "<a href='{$_SERVER['PHP_SELF']}?field={$val}'>{$val}</a>";
    30.  
    31.                print "<br> ";
    32.  
    33.                if(!$_GET['desc'] && $_GET['field']==$val) print " <a href='{$_SERVER['PHP_SELF']}?desc=1&field={$val}'>Up</a> <b>Down</b>";
    34.                else if($_GET['field']==$val) print " <b>Up</b> <a href='{$_SERVER['PHP_SELF']}?field={$val}'>Down</a>";
    35.                else print " <a href='{$_SERVER['PHP_SELF']}?desc=1&field={$val}'>Up</a> <a href='{$_SERVER['PHP_SELF']}?field={$val}'>Down</a>";
    36.                print "</td>";
    37.            }
    38.            print "<tr>";
    39.        }
    40.        foreach($row as $key=>$val)
    41.            print "<td>{$val}</td>";
    42.        $i++;
    43.   }
    44. }else{
    45.     print "<tr><td>Ошибка: Нет данных в таблице</td>";
    46. }
    47. print "</table>";
    48. ?>
    Зы. Фии какая на форуме подсветка страшная
     
  4. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Какие два принципиально разных подхода к одной и той же задаче :)

    Не люблю красные строки =)
     
  5. akrinel

    akrinel Активный пользователь

    С нами с:
    26 янв 2009
    Сообщения:
    955
    Симпатии:
    1
    Адрес:
    Spb
    Мой варант, немного длиннее зато можно выбрать таблицу в процессе работы скрипта и есть проверка на ошибки :p


    index.php:

    PHP:
    1.  
    2. <?php
    3.     require_once dirname(__FILE__).'/db.php';
    4. ?>
    5. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    6. <html xmlns="http://www.w3.org/1999/xhtml" lang="ru" xml:lang="ru">
    7. <head>
    8.     <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    9.     <meta http-equiv="Content-language" content="ru-RU" />
    10.     <title>Работа с БД</title>
    11.     <style type="text/css">
    12.         p.error{
    13.             color: red;
    14.         }
    15.     </style>
    16. </head>
    17. <body>
    18. <?php
    19.     try{
    20.         $db  =  new  DBViewer();
    21.     }
    22.     catch(Exception $e){
    23.         echo  '<p class="error">Неверные данные для коннекта к БД</p>';
    24.     }
    25.  
    26.  
    27.     $table  =  isset($_GET['table']) && $db->tableExist($_GET['table'])
    28.                ?  $_GET['table']
    29.                :  0;
    30.                
    31.     $html  =  '';
    32.  
    33.     // Таблица не выбрана, выводим список таблиц.
    34.     if(!$table){
    35.  
    36.         $tables  =  $db->getTables();
    37.                
    38.         if(!empty($tables)){
    39.  
    40.             $html  =  '<h2>Выберите таблицу:</h2><ul>';
    41.  
    42.             foreach($tables  as  $table){
    43.                 $html  .=  '<li><a href="index.php?table='.$table.'">'.$table.'</a></li>';
    44.             }
    45.  
    46.             $html  .=  '</ul>';
    47.         }
    48.         else{
    49.             $html  =  '<p class="error">В базе данных таблицы отсутствуют.</p>';
    50.         }
    51.     }
    52.     // Таблица выбрана вывводим таблицу
    53.     else{
    54.         $sortColumn  =  isset($_GET['column'])  ?  $_GET['column']  :  null;
    55.         $sortOrder  =  isset($_GET['order']) && $_GET['order'] == 'asc'  ?  'asc'  :  'desc';
    56.  
    57.         $rows  =  $db->getTableData($table, $sortColumn, $sortOrder);
    58.         $headerTds  =  array_keys($rows[0]);
    59.  
    60.  
    61.  
    62.         // Формируем данные для вывода
    63.         $html2Tbody  =  '';
    64.         foreach($rows  as  $row){
    65.  
    66.             $html2Tbody  .=  '<tr>';
    67.  
    68.             foreach($row as  $td){
    69.                 $html2Tbody  .=  '<td>'.$td.'</td>';
    70.             }
    71.  
    72.             $html2Tbody  .=  '</tr>';
    73.         }
    74.        
    75.         // Формируем заголовок
    76.         $html2Thead  =  '<tr>';
    77.  
    78.         foreach($headerTds  as  $colName){
    79.  
    80.             if($sortColumn == $colName){
    81.                 if($sortOrder == 'asc'){
    82.                     $sort  =  'по возрастанию&nbsp;<a href="index.php?table='.$table.'&column='.$colName.'&order=desc">по убыванию</a>';
    83.                 }
    84.                 else{
    85.                     $sort  =  '<a href="index.php?table='.$table.'&column='.$colName.'&order=asc">по возрастанию</a>&nbsp;по убыванию';
    86.                 }
    87.             }
    88.             else{
    89.                     $sort  =  '<a href="index.php?table='.$table.'&column='.$colName.'&order=asc">по возрастанию</a>
    90.                                <a href="index.php?table='.$table.'&column='.$colName.'&order=desc">по убыванию</a>';         
    91.             }
    92.            
    93.             $html2Thead  .=  '<th>'.$colName.'<br />'.$sort.'</th>';
    94.         }
    95.        
    96.         $html  =  '<table><thead>'.$html2Thead.'</thead><tbody>'.$html2Tbody.'</tbody></table>';
    97.     }
    98.  
    99.     echo  $html;
    100. ?>
    101. </body>
    102. </html>
    103.  
    config.php
    PHP:
    1.  
    2. <?php
    3. /**
    4.  * Конфигурация для работы с БД
    5.  */
    6. return  array(
    7.  
    8.     // Хост
    9.     'host'=>'localhost',
    10.  
    11.     // Имя пользователя
    12.     'user'=>'root',
    13.  
    14.     // Пароль
    15.     'pass'=>'pass',
    16.  
    17.     // Название Базы данных
    18.     'db'=>'okpacka',
    19.    
    20.     // Кодировка
    21.     'encode'=>'utf8'
    22. );
    23. ?>
    24.  

    db.php
    PHP:
    1.  
    2. <?php
    3.  /**
    4.   * Выводим данные по таблицам и содержимое собственно таблиц.
    5.   * Быдло код инсайд.
    6.   *
    7.   * @author akrinel
    8.   * @copyright Граждане планеты Земле. И Бендер.
    9.   */
    10.  class  DBViewer{
    11.    
    12.     /**
    13.      * Ссылка на ресурс работы с БД
    14.      *
    15.      * @var  resource
    16.      */
    17.     private  $connect;
    18.  
    19.  
    20.     public  function  __construct(){
    21.         $confFilePath  =  dirname(__FILE__).'/config.php';
    22.  
    23.         if(!file_exists($confFilePath)){
    24.             throw new Exception;
    25.         }
    26.  
    27.         $params  =  require_once $confFilePath;
    28.  
    29.         $this->connect  =  mysql_connect($params['host'], $params['user'], $params['pass']);
    30.  
    31.         if(!$this->connect){
    32.             throw  new  Exception;
    33.         }
    34.        
    35.         if(!mysql_select_db($params['db'], $this->connect)){
    36.             throw  new  Exception;
    37.         }
    38.        
    39.         // Если таблица не  в формате UTF-8 закоментировать
    40.         mysql_query('SET NAMES '.$params['encode'], $this->connect);
    41.     }
    42.    
    43.    
    44.     /**
    45.      * Проверяем существует ли данная таблица
    46.      *
    47.      * @param  String  $tableName  название таблицы
    48.      * @return  bool
    49.      */
    50.     public  function  tableExist($tableName){
    51.    
    52.         $tableName  =  mysql_escape_string($tableName);
    53.         $result  =  mysql_query('SHOW TABLES LIKE "'.$tableName.'"', $this->connect);
    54.        
    55.         return  mysql_num_rows($result) == 1
    56.             ?  true
    57.             :  false;
    58.     }
    59.    
    60.    
    61.    
    62.     /**
    63.      * Отдаем список таблиц
    64.      *
    65.      * @return Array
    66.      */
    67.     public  function  getTables(){
    68.    
    69.         $tables  =  array();
    70.        
    71.         $result  =  mysql_query('SHOW TABLES');
    72.        
    73.  
    74.         while($row  =  mysql_fetch_row($result)){
    75.             $tables[]  =  $row[0];
    76.         }
    77.        
    78.         return  $tables;
    79.     }
    80.    
    81.    
    82.     /**
    83.      * Получаем данные из таблицы
    84.      *
    85.      * @param String  $tableName название таблицы
    86.      * @param String  $column столбец для сортировки
    87.      * @param String  $order порядок сортировки
    88.      * @return Array
    89.      */
    90.     public  function  getTableData($tableName, $column, $order){
    91.    
    92.         $rows  =  array();
    93.        
    94.         if($this->columnExist($column, $tableName)){
    95.             $sort  =  'ORDER BY `'.$column.'` ';
    96.  
    97.             if($order  ==  'asc'){
    98.                 $sort  .=  'ASC';
    99.             }
    100.             else{
    101.                 $sort  .=  'DESC';
    102.             }
    103.         }
    104.         else{
    105.             $sort  =  '';
    106.         }
    107.        
    108.  
    109.         $result  =  mysql_query('SELECT * FROM `'.$tableName.'`'.$sort, $this->connect);
    110.        
    111.  
    112.  
    113.         while($row  =  mysql_fetch_assoc($result)){
    114.             $rows[]  =  $row;
    115.         }
    116.        
    117.         return  $rows;
    118.     }
    119.    
    120.    
    121.     /**
    122.      * Существует ли такой столбец
    123.      *
    124.      * @param  String  $columnName  имя столбца
    125.      * @param  String  $tableName  название таблицы
    126.      * @return  bool
    127.      */
    128.     public  function  columnExist($columnName, $tableName){
    129.         $columnName  =  mysql_escape_string($columnName);
    130.         $result  =  mysql_query('SHOW COLUMNS FROM `'.$tableName.'` LIKE "'.$columnName.'"', $this->connect);
    131.  
    132.         return  mysql_num_rows($result) == 1
    133.             ?  true
    134.             :  false;      
    135.     }
    136. }
    137. ?>
    138.  
    P.S. Долго писал ибо параллельно смотрел сериал Сверхъестественное и питалсо :)
     
  6. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Сверхъестественное и писалсо?
     
  7. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    Appleпраздравляю с днем варенья)
     
  8. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    Apple, +1. C днюхой!
    А давайте устроим праздник и зафлудим тут все нафиг, а?
     
  9. akrinel

    akrinel Активный пользователь

    С нами с:
    26 янв 2009
    Сообщения:
    955
    Симпатии:
    1
    Адрес:
    Spb
    Kreker питалсо == насыщал свой организм белками, жирами, углеводами и прочими полезными вещами.
     
  10. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Пасиба, чуваки :)