[ Index ]
 

Code source de phpMyAdmin 2.10.3

Accédez au Source d'autres logiciels libres

Classes | Fonctions | Variables | Constantes | Tables

title

Body

[fermer]

/ -> db_search.php (source)

   1  <?php
   2  /* $Id: db_search.php 9602 2006-10-25 12:25:01Z nijel $ */
   3  // vim: expandtab sw=4 ts=4 sts=4:
   4  /**
   5   * Credits for this script goes to Thomas Chaumeny <chaume92 at aol.com>
   6   */
   7  
   8  require_once ('./libraries/common.lib.php');
   9  
  10  /**
  11   * Gets some core libraries and send headers
  12   */
  13  require ('./libraries/db_common.inc.php');
  14  // If config variable $cfg['Usedbsearch'] is on FALSE : exit.
  15  if (!$cfg['UseDbSearch']) {
  16      PMA_mysqlDie($strAccessDenied, '', FALSE, $err_url);
  17  } // end if
  18  $url_query .= '&amp;goto=db_search.php';
  19  $url_params['goto'] = 'db_search.php';
  20  
  21  /**
  22   * Get the list of tables from the current database
  23   */
  24  $tables     = PMA_DBI_get_tables($GLOBALS['db']);
  25  $num_tables = count( $tables );
  26  
  27  /**
  28   * Displays top links
  29   */
  30  $sub_part = '';
  31  require ('./libraries/db_links.inc.php');
  32  
  33  
  34  /**
  35   * 1. Main search form has been submitted
  36   */
  37  if (isset($_REQUEST['submit_search'])) {
  38  
  39      /**
  40       * Builds the SQL search query
  41       *
  42       * @param   string   the table name
  43       * @param   string   the string to search
  44       * @param   integer  type of search (1 -> 1 word at least, 2 -> all words,
  45       *                                   3 -> exact string, 4 -> regexp)
  46       *
  47       * @return  array    3 SQL querys (for count, display and delete results)
  48       *
  49       * @global  string   the url to return to in case of errors
  50       */
  51      function PMA_getSearchSqls($table, $search_str, $search_option)
  52      {
  53          global $err_url, $charset_connection;
  54  
  55          // Statement types
  56          $sqlstr_select = 'SELECT';
  57          $sqlstr_delete = 'DELETE';
  58  
  59          // Fields to select
  60          $res                  = PMA_DBI_query('SHOW ' . (PMA_MYSQL_INT_VERSION >= 40100 ? 'FULL ' : '') . 'FIELDS FROM ' . PMA_backquote($table) . ' FROM ' . PMA_backquote($GLOBALS['db']) . ';');
  61          while ($current = PMA_DBI_fetch_assoc($res)) {
  62              if (PMA_MYSQL_INT_VERSION >= 40100) {
  63                  list($current['Charset']) = explode('_', $current['Collation']);
  64              }
  65              $current['Field'] = PMA_backquote($current['Field']);
  66              $tblfields[]      = $current;
  67          } // while
  68          PMA_DBI_free_result($res);
  69          unset($current, $res);
  70          $tblfields_cnt         = count($tblfields);
  71  
  72          // Table to use
  73          $sqlstr_from = ' FROM ' . PMA_backquote($GLOBALS['db']) . '.' . PMA_backquote($table);
  74  
  75          // Beginning of WHERE clause
  76          $sqlstr_where    = ' WHERE';
  77  
  78          $search_words    = (($search_option > 2) ? array($search_str) : explode(' ', $search_str));
  79          $search_wds_cnt  = count($search_words);
  80  
  81          $like_or_regex   = (($search_option == 4) ? 'REGEXP' : 'LIKE');
  82          $automatic_wildcard   = (($search_option <3) ? '%' : '');
  83  
  84          for ($i = 0; $i < $search_wds_cnt; $i++) {
  85              // Eliminates empty values
  86              // In MySQL 4.1, if a field has no collation we get NULL in Charset
  87              // but in MySQL 5.0.x we get ''
  88              if (!empty($search_words[$i])) {
  89                  for ($j = 0; $j < $tblfields_cnt; $j++) {
  90                      if (PMA_MYSQL_INT_VERSION >= 40100 && $tblfields[$j]['Charset'] != $charset_connection && $tblfields[$j]['Charset'] != 'NULL' && $tblfields[$j]['Charset'] != '') {
  91                          $prefix = 'CONVERT(_utf8 ';
  92                          $suffix = ' USING ' . $tblfields[$j]['Charset'] . ') COLLATE ' . $tblfields[$j]['Collation'];
  93                      } else {
  94                          $prefix = $suffix = '';
  95                      }
  96                      $thefieldlikevalue[] = $tblfields[$j]['Field']
  97                                           . ' ' . $like_or_regex . ' '
  98                                           . $prefix
  99                                           . '\''
 100                                           . $automatic_wildcard
 101                                           . $search_words[$i]
 102                                           . $automatic_wildcard . '\''
 103                                           . $suffix;
 104                  } // end for
 105  
 106                  $fieldslikevalues[]      = ($search_wds_cnt > 1)
 107                                           ? '(' . implode(' OR ', $thefieldlikevalue) . ')'
 108                                           : implode(' OR ', $thefieldlikevalue);
 109                  unset($thefieldlikevalue);
 110              } // end if
 111          } // end for
 112  
 113          $implode_str  = ($search_option == 1 ? ' OR ' : ' AND ');
 114          $sqlstr_where .= ' ' . implode($implode_str, $fieldslikevalues);
 115          unset($fieldslikevalues);
 116  
 117          // Builds complete queries
 118          $sql['select_fields'] = $sqlstr_select . ' * ' . $sqlstr_from . $sqlstr_where;
 119          // here, I think we need to still use the COUNT clause, even for
 120          // VIEWs, anyway we have a WHERE clause that should limit results
 121          $sql['select_count']  = $sqlstr_select . ' COUNT(*) AS count' . $sqlstr_from . $sqlstr_where;
 122          $sql['delete']        = $sqlstr_delete . $sqlstr_from . $sqlstr_where;
 123  
 124          return $sql;
 125      } // end of the "PMA_getSearchSqls()" function
 126  
 127  
 128      /**
 129       * Displays the results
 130       */
 131      if (!empty($_REQUEST['search_str']) && !empty($_REQUEST['search_option'])) {
 132  
 133          $original_search_str = $_REQUEST['search_str'];
 134          $search_str          = PMA_sqlAddslashes($_REQUEST['search_str'], TRUE);
 135  
 136          // Get the true string to display as option's comment
 137          switch ($_REQUEST['search_option']) {
 138              case 1:
 139                  $option_str = ' (' . $strSearchOption1 . ')';
 140                  $search_option = 1;
 141                  break;
 142              case 2:
 143                  $option_str = ' (' . $strSearchOption2 . ')';
 144                  $search_option = 2;
 145                  break;
 146              case 3:
 147                  $option_str = ' (' . $strSearchOption3 . ')';
 148                  $search_option = 3;
 149                  break;
 150              case 4:
 151                  $option_str = ' (' . $strSearchOption4 . ')';
 152                  $search_option = 4;
 153                  break;
 154          } // end switch
 155  
 156          $this_url_params = array(
 157              'db'    => $GLOBALS['db'],
 158              'goto'  => 'db_sql.php',
 159              'pos'   => 0,
 160              'is_js_confirmed' => 0,
 161          );
 162  
 163          // Displays search string
 164          echo '<br />' . "\n"
 165              .'<table class="data">' . "\n"
 166              .'<caption class="tblHeaders">' . "\n"
 167              .sprintf($strSearchResultsFor,
 168                  htmlspecialchars($original_search_str), $option_str) . "\n"
 169              .'</caption>' . "\n";
 170  
 171          $num_search_result_total = 0;
 172          $odd_row = true;
 173  
 174          foreach ( $_REQUEST['table_select'] as $each_table ) {
 175              // Gets the SQL statements
 176              $newsearchsqls = PMA_getSearchSqls($each_table,
 177                  $search_str, $search_option);
 178  
 179              // Executes the "COUNT" statement
 180              $res_cnt = PMA_DBI_fetch_value($newsearchsqls['select_count']);
 181              $num_search_result_total += $res_cnt;
 182  
 183              echo '<tr class="' . ( $odd_row ? 'odd' : 'even' ) . '">'
 184                  .'<td>' . sprintf($strNumSearchResultsInTable, $res_cnt,
 185                      htmlspecialchars($each_table)) . "</td>\n";
 186  
 187              if ($res_cnt > 0) {
 188                  $this_url_params['sql_query'] = $newsearchsqls['select_fields'];
 189                  echo '<td>' . PMA_linkOrButton(
 190                          'sql.php' . PMA_generate_common_url($this_url_params),
 191                          $strBrowse, '') .  "</td>\n";
 192  
 193                  $this_url_params['sql_query'] = $newsearchsqls['delete'];
 194                  echo '<td>' . PMA_linkOrButton(
 195                          'sql.php' . PMA_generate_common_url($this_url_params),
 196                          $strDelete, $newsearchsqls['delete']) .  "</td>\n";
 197  
 198              } else {
 199                  echo '<td>&nbsp;</td>' . "\n"
 200                      .'<td>&nbsp;</td>' . "\n";
 201              }// end if else
 202              $odd_row = ! $odd_row;
 203              echo '</tr>' . "\n";
 204          } // end for
 205  
 206          echo '</table>' . "\n";
 207  
 208          if ( count($_REQUEST['table_select']) > 1 ) {
 209              echo '<p>' . sprintf($strNumSearchResultsTotal,
 210                  $num_search_result_total) . '</p>' . "\n";
 211          }
 212      } // end if (!empty($search_str) && !empty($search_option))
 213  
 214  } // end 1.
 215  
 216  
 217  /**
 218   * 2. Displays the main search form
 219   */
 220  echo "\n";
 221  $searched          = (isset($original_search_str))
 222                     ? htmlspecialchars($original_search_str)
 223                     : '';
 224  if (empty($search_option)) {
 225      $search_option = 1;
 226  }
 227  ?>
 228  <a name="db_search"></a>
 229  <form method="post" action="db_search.php" name="db_search">
 230  <?php echo PMA_generate_common_hidden_inputs($GLOBALS['db']); ?>
 231  <fieldset>
 232      <legend><?php echo $strSearchFormTitle; ?></legend>
 233  
 234      <table class="formlayout">
 235      <tr><td><?php echo $strSearchNeedle; ?></td>
 236          <td><input type="text" name="search_str" size="60"
 237                  value="<?php echo $searched; ?>" /></td>
 238      </tr>
 239      <tr><td align="right" valign="top">
 240              <?php echo $strSearchType; ?></td>
 241          <td><input type="radio" id="search_option_1" name="search_option"
 242                  value="1"<?php if ($search_option == 1) echo ' checked="checked"'; ?> />
 243              <label for="search_option_1">
 244                  <?php echo $strSearchOption1; ?></label><sup>1</sup><br />
 245              <input type="radio" id="search_option_2" name="search_option"
 246                  value="2"<?php if ($search_option == 2) echo ' checked="checked"'; ?> />
 247              <label for="search_option_2">
 248                  <?php echo $strSearchOption2; ?></label><sup>1</sup><br />
 249              <input type="radio" id="search_option_3" name="search_option"
 250                  value="3"<?php if ($search_option == 3) echo ' checked="checked"'; ?> />
 251              <label for="search_option_3">
 252                  <?php echo $strSearchOption3; ?></label><br />
 253              <input type="radio" id="search_option_4" name="search_option"
 254                  value="4"<?php if ($search_option == 4) echo ' checked="checked"'; ?> />
 255              <label for="search_option_4">
 256                  <?php echo $strSearchOption4; ?></label>
 257              <?php echo PMA_showMySQLDocu('Regexp', 'Regexp'); ?><br />
 258              <br />
 259              <sup>1</sup><?php echo $strSplitWordsWithSpace; ?></td>
 260      </tr>
 261      <tr><td align="right" valign="top">
 262              <?php echo $strSearchInTables; ?></td>
 263          <td rowspan="2">
 264  <?php
 265  echo '            <select name="table_select[]" size="6"  multiple="multiple">' . "\n";
 266  foreach ( $tables as $each_table ) {
 267      if ( isset($_REQUEST['unselectall'])) {
 268          $is_selected = '';
 269      } elseif ( ! isset($_REQUEST['table_select'])
 270            || in_array($each_table, $_REQUEST['table_select'])
 271            || isset($_REQUEST['selectall']) ) {
 272          $is_selected = ' selected="selected"';
 273      } else {
 274          $is_selected = '';
 275      }
 276  
 277      echo '                <option value="' . htmlspecialchars($each_table) . '"'
 278          . $is_selected . '>'
 279          . htmlspecialchars($each_table) . '</option>' . "\n";
 280  } // end while
 281  echo '            </select>' . "\n";
 282  $strDoSelectAll = '<a href="db_search.php?' . $url_query . '&amp;selectall=1#db_search"'
 283                  . ' onclick="setSelectOptions(\'db_search\', \'table_select[]\', true); return false;">' . $strSelectAll . '</a>'
 284                  . '&nbsp;/&nbsp;'
 285                  . '<a href="db_search.php?' . $url_query . '&amp;unselectall=1#db_search"'
 286                  . ' onclick="setSelectOptions(\'db_search\', \'table_select[]\', false); return false;">' . $strUnselectAll . '</a>';
 287  ?>
 288          </td>
 289      </tr>
 290      <tr><td align="right" valign="bottom">
 291              <?php echo $strDoSelectAll; ?></td></tr>
 292      </tr>
 293      </table>
 294  </fieldset>
 295  <fieldset class="tblFooters">
 296      <input type="submit" name="submit_search" value="<?php echo $strGo; ?>"
 297          id="buttonGo" />
 298  </fieldset>
 299  </form>
 300  
 301  
 302  <?php
 303  /**
 304   * Displays the footer
 305   */
 306  echo "\n";
 307  require_once ('./libraries/footer.inc.php');
 308  ?>


Généré le : Mon Nov 26 15:18:20 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics