home *** CD-ROM | disk | FTP | other *** search
/ Cricao de Sites - 650 Layouts Prontos / WebMasters.iso / Servidores / xampp-win32-1.6.7-installer.exe / phpMyAdmin / libraries / mult_submits.inc.php < prev    next >
Encoding:
PHP Script  |  2008-06-23  |  16.1 KB  |  439 lines

  1. <?php
  2. /* vim: set expandtab sw=4 ts=4 sts=4: */
  3. /**
  4.  *
  5.  * @version $Id: mult_submits.inc.php 11326 2008-06-17 21:32:48Z lem9 $
  6.  */
  7. if (! defined('PHPMYADMIN')) {
  8.     exit;
  9. }
  10.  
  11. /**
  12.  * Prepares the work and runs some other scripts if required
  13.  */
  14. if (! empty($submit_mult)
  15.  && $submit_mult != $strWithChecked
  16.  && (! empty($selected_db)
  17.   || ! empty($selected_tbl)
  18.   || ! empty($selected_fld)
  19.   || ! empty($rows_to_delete))) {
  20.     define('PMA_SUBMIT_MULT', 1);
  21.     if (isset($selected_db) && !empty($selected_db)) {
  22.         $selected     = $selected_db;
  23.         $what         = 'drop_db';
  24.     } elseif (isset($selected_tbl) && !empty($selected_tbl)) {
  25.         if ($submit_mult == $strPrintView) {
  26.             require './tbl_printview.php';
  27.         } else {
  28.            $selected = $selected_tbl;
  29.            switch ($submit_mult) {
  30.                case 'drop_db':
  31.                    $what = 'drop_db';
  32.                    break;
  33.                case $strDrop:
  34.                    $what = 'drop_tbl';
  35.                    break;
  36.                case $strEmpty:
  37.                    $what = 'empty_tbl';
  38.                    break;
  39.                case $strCheckTable:
  40.                    unset($submit_mult);
  41.                    $query_type = 'check_tbl';
  42.                    $mult_btn   = $strYes;
  43.                    break;
  44.                case $strOptimizeTable:
  45.                    unset($submit_mult);
  46.                    $query_type = 'optimize_tbl';
  47.                    $mult_btn   = $strYes;
  48.                    break;
  49.                case $strRepairTable:
  50.                    unset($submit_mult);
  51.                    $query_type = 'repair_tbl';
  52.                    $mult_btn   = $strYes;
  53.                    break;
  54.                case $strAnalyzeTable:
  55.                    unset($submit_mult);
  56.                    $query_type = 'analyze_tbl';
  57.                    $mult_btn   = $strYes;
  58.                    break;
  59.            } // end switch
  60.         }
  61.     } elseif (isset($selected_fld) && !empty($selected_fld)) {
  62.         $selected     = $selected_fld;
  63.         switch ($submit_mult) {
  64.             case $strDrop:
  65.                 $what     = 'drop_fld';
  66.                 break;
  67.             case $strPrimary:
  68.                 // Gets table primary key
  69.                 PMA_DBI_select_db($db);
  70.                 $result      = PMA_DBI_query('SHOW KEYS FROM ' . PMA_backquote($table) . ';');
  71.                 $primary     = '';
  72.                 while ($row = PMA_DBI_fetch_assoc($result)) {
  73.                     // Backups the list of primary keys
  74.                     if ($row['Key_name'] == 'PRIMARY') {
  75.                         $primary .= $row['Column_name'] . ', ';
  76.                     }
  77.                 } // end while
  78.                 PMA_DBI_free_result($result);
  79.                 if (empty($primary)) {
  80.                     // no primary key, so we can safely create new
  81.                     unset($submit_mult);
  82.                     $query_type = 'primary_fld';
  83.                     $mult_btn   = $strYes;
  84.                 } else {
  85.                     // primary key exists, so lets as user
  86.                     $what = 'primary_fld';
  87.                 }
  88.                 break;
  89.             case $strIndex:
  90.                 unset($submit_mult);
  91.                 $query_type = 'index_fld';
  92.                 $mult_btn   = $strYes;
  93.                 break;
  94.             case $strUnique:
  95.                 unset($submit_mult);
  96.                 $query_type = 'unique_fld';
  97.                 $mult_btn   = $strYes;
  98.                 break;
  99.             case $strIdxFulltext:
  100.                 unset($submit_mult);
  101.                 $query_type = 'fulltext_fld';
  102.                 $mult_btn   = $strYes;
  103.                 break;
  104.             case $strChange:
  105.                 require './tbl_alter.php';
  106.                 break;
  107.             case $strBrowse:
  108.                 $sql_query = '';
  109.                 foreach ($selected AS $idx => $sval) {
  110.                     if ($sql_query == '') {
  111.                         $sql_query .= 'SELECT ' . PMA_backquote(urldecode($sval));
  112.                     } else {
  113.                         $sql_query .=  ', ' . PMA_backquote(urldecode($sval));
  114.                     }
  115.                 }
  116.                 $sql_query .= ' FROM ' . PMA_backquote(htmlspecialchars($table));
  117.                 require './sql.php';
  118.                 break;
  119.         }
  120.     } else {
  121.         $what = 'row_delete';
  122.         $selected = $rows_to_delete;
  123.     }
  124. } // end if
  125.  
  126.  
  127. /**
  128.  * Displays the confirmation form if required
  129.  */
  130. if (!empty($submit_mult) && !empty($what)) {
  131.     $js_to_run = 'functions.js';
  132.     unset($message);
  133.     if (strlen($table)) {
  134.         require './libraries/tbl_common.php';
  135.         $url_query .= '&goto=tbl_sql.php&back=tbl_sql.php';
  136.         require './libraries/tbl_info.inc.php';
  137.     } elseif (strlen($db)) {
  138.         require './libraries/db_common.inc.php';
  139.         require './libraries/db_info.inc.php';
  140.     }
  141.     // Builds the query
  142.     $full_query     = '';
  143.     if ($what == 'drop_tbl') {
  144.         $full_query_views = '';
  145.     }
  146.     $selected_cnt   = count($selected);
  147.     $i = 0;
  148.     foreach ($selected AS $idx => $sval) {
  149.         switch ($what) {
  150.             case 'row_delete':
  151.                 $full_query .= htmlspecialchars(urldecode($sval))
  152.                     . ';<br />';
  153.                 break;
  154.             case 'drop_db':
  155.                 $full_query .= 'DROP DATABASE '
  156.                     . PMA_backquote(htmlspecialchars(urldecode($sval)))
  157.                     . ';<br />';
  158.                 $reload = 1;
  159.                 break;
  160.  
  161.             case 'drop_tbl':
  162.                 $current = urldecode($sval);
  163.                 if (!empty($views) && in_array($current, $views)) {
  164.                     $full_query_views .= (empty($full_query_views) ? 'DROP VIEW ' : ', ')
  165.                         . PMA_backquote(htmlspecialchars($current));
  166.                 } else {
  167.                     $full_query .= (empty($full_query) ? 'DROP TABLE ' : ', ')
  168.                         . PMA_backquote(htmlspecialchars($current));
  169.                 }
  170.                 break;
  171.  
  172.             case 'empty_tbl':
  173.                 if (PMA_MYSQL_INT_VERSION >= 40000) {
  174.                     $full_query .= 'TRUNCATE ';
  175.                 } else {
  176.                     $full_query .= 'DELETE FROM ';
  177.                 }
  178.                 $full_query .= PMA_backquote(htmlspecialchars(urldecode($sval)))
  179.                             . ';<br />';
  180.                 break;
  181.  
  182.             case 'primary_fld':
  183.                 if ($full_query == '') {
  184.                     $full_query .= 'ALTER TABLE '
  185.                         . PMA_backquote(htmlspecialchars($table))
  186.                         . '<br />  DROP PRIMARY KEY,'
  187.                         . '<br />   ADD PRIMARY KEY('
  188.                         . '<br />     '
  189.                         . PMA_backquote(htmlspecialchars(urldecode($sval)))
  190.                         . ',';
  191.                 } else {
  192.                     $full_query .= '<br />     '
  193.                         . PMA_backquote(htmlspecialchars(urldecode($sval)))
  194.                         . ',';
  195.                 }
  196.                 if ($i == $selected_cnt-1) {
  197.                     $full_query = preg_replace('@,$@', ');<br />', $full_query);
  198.                 }
  199.                 break;
  200.  
  201.             case 'drop_fld':
  202.                 if ($full_query == '') {
  203.                     $full_query .= 'ALTER TABLE '
  204.                         . PMA_backquote(htmlspecialchars($table))
  205.                         . '<br />  DROP '
  206.                         . PMA_backquote(htmlspecialchars(urldecode($sval)))
  207.                         . ',';
  208.                 } else {
  209.                     $full_query .= '<br />  DROP '
  210.                         . PMA_backquote(htmlspecialchars(urldecode($sval)))
  211.                         . ',';
  212.                 }
  213.                 if ($i == $selected_cnt-1) {
  214.                     $full_query = preg_replace('@,$@', ';<br />', $full_query);
  215.                 }
  216.                 break;
  217.         } // end switch
  218.         $i++;
  219.     }
  220.     if ($what == 'drop_tbl') {
  221.         if (!empty($full_query)) {
  222.             $full_query .= ';<br />' . "\n";
  223.         }
  224.         if (!empty($full_query_views)) {
  225.             $full_query .= $full_query_views . ';<br />' . "\n";
  226.         }
  227.         unset($full_query_views);
  228.     }
  229.  
  230.     // Displays the form
  231.     ?>
  232. <!-- Do it really ? -->
  233. <form action="<?php echo $action; ?>" method="post">
  234. <input type="hidden" name="query_type" value="<?php echo $what; ?>" />
  235.     <?php
  236.     if (strpos(' ' . $action, 'db_') == 1) {
  237.         echo PMA_generate_common_hidden_inputs($db);
  238.     } elseif (strpos(' ' . $action, 'tbl_') == 1
  239.               || $what == 'row_delete') {
  240.         echo PMA_generate_common_hidden_inputs($db, $table);
  241.     } else  {
  242.         echo PMA_generate_common_hidden_inputs();
  243.     }
  244. ?>
  245. <input type="hidden" name="reload" value="<?php echo isset($reload) ? PMA_sanitize($reload) : 0; ?>" />
  246. <?php
  247.     foreach ($selected as $idx => $sval) {
  248.         echo '<input type="hidden" name="selected[]" value="' . htmlspecialchars($sval) . '" />' . "\n";
  249.     }
  250.     if ($what == 'drop_tbl' && !empty($views)) {
  251.         foreach ($views as $current) {
  252.            echo '<input type="hidden" name="views[]" value="' . htmlspecialchars($current) . '" />' . "\n";
  253.        }
  254.     }
  255.     if ($what == 'row_delete') {
  256.         echo '<input type="hidden" name="original_sql_query" value="' . htmlspecialchars($original_sql_query) . '" />' . "\n";
  257.         echo '<input type="hidden" name="original_url_query" value="' . htmlspecialchars($original_url_query) . '" />' . "\n";
  258.     }
  259.     ?>
  260. <fieldset class="confirmation">
  261.     <legend><?php echo ($what == 'drop_db' ? $strDropDatabaseStrongWarning . ' ' : '') . $strDoYouReally; ?>:</legend>
  262.     <tt><?php echo $full_query; ?></tt>
  263. </fieldset>
  264. <fieldset class="tblFooters">
  265.     <input type="submit" name="mult_btn" value="<?php echo $strYes; ?>" id="buttonYes" />
  266.     <input type="submit" name="mult_btn" value="<?php echo $strNo; ?>" id="buttonNo" />
  267. </fieldset>
  268.     <?php
  269.     require_once './libraries/footer.inc.php';
  270. } // end if
  271.  
  272.  
  273. /**
  274.  * Executes the query
  275.  */
  276. elseif ($mult_btn == $strYes) {
  277.  
  278.     if ($query_type == 'drop_db' || $query_type == 'drop_tbl' || $query_type == 'drop_fld') {
  279.         require_once './libraries/relation_cleanup.lib.php';
  280.     }
  281.  
  282.     $sql_query      = '';
  283.     if ($query_type == 'drop_tbl') {
  284.         $sql_query_views = '';
  285.     }
  286.     $selected_cnt   = count($selected);
  287.     $run_parts      = FALSE; // whether to run query after each pass
  288.     $use_sql        = FALSE; // whether to include sql.php at the end (to display results)
  289.  
  290.     if ($query_type == 'primary_fld') {
  291.         // Gets table primary key
  292.         PMA_DBI_select_db($db);
  293.         $result      = PMA_DBI_query('SHOW KEYS FROM ' . PMA_backquote($table) . ';');
  294.         $primary     = '';
  295.         while ($row = PMA_DBI_fetch_assoc($result)) {
  296.             // Backups the list of primary keys
  297.             if ($row['Key_name'] == 'PRIMARY') {
  298.                 $primary .= $row['Column_name'] . ', ';
  299.             }
  300.         } // end while
  301.         PMA_DBI_free_result($result);
  302.     }
  303.  
  304.     $rebuild_database_list = false;
  305.  
  306.     for ($i = 0; $i < $selected_cnt; $i++) {
  307.         switch ($query_type) {
  308.             case 'row_delete':
  309.                 $a_query = urldecode($selected[$i]);
  310.                 $run_parts = TRUE;
  311.                 break;
  312.  
  313.             case 'drop_db':
  314.                 PMA_relationsCleanupDatabase($selected[$i]);
  315.                 $a_query   = 'DROP DATABASE '
  316.                            . PMA_backquote(urldecode($selected[$i]));
  317.                 $reload    = 1;
  318.                 $run_parts = TRUE;
  319.                 $rebuild_database_list = true;
  320.                 break;
  321.  
  322.             case 'drop_tbl':
  323.                 PMA_relationsCleanupTable($db, $selected[$i]);
  324.                 $current = urldecode($selected[$i]);
  325.                 if (!empty($views) && in_array($current, $views)) {
  326.                     $sql_query_views .= (empty($sql_query_views) ? 'DROP VIEW ' : ', ')
  327.                               . PMA_backquote($current);
  328.                 } else {
  329.                     $sql_query .= (empty($sql_query) ? 'DROP TABLE ' : ', ')
  330.                                . PMA_backquote($current);
  331.                 }
  332.                 $reload    = 1;
  333.                 break;
  334.  
  335.             case 'check_tbl':
  336.                 $sql_query .= (empty($sql_query) ? 'CHECK TABLE ' : ', ')
  337.                            . PMA_backquote(urldecode($selected[$i]));
  338.                 $use_sql    = TRUE;
  339.                 break;
  340.  
  341.             case 'optimize_tbl':
  342.                 $sql_query .= (empty($sql_query) ? 'OPTIMIZE TABLE ' : ', ')
  343.                            . PMA_backquote(urldecode($selected[$i]));
  344.                 $use_sql    = TRUE;
  345.                 break;
  346.  
  347.             case 'analyze_tbl':
  348.                 $sql_query .= (empty($sql_query) ? 'ANALYZE TABLE ' : ', ')
  349.                            . PMA_backquote(urldecode($selected[$i]));
  350.                 $use_sql    = TRUE;
  351.                 break;
  352.  
  353.             case 'repair_tbl':
  354.                 $sql_query .= (empty($sql_query) ? 'REPAIR TABLE ' : ', ')
  355.                            . PMA_backquote(urldecode($selected[$i]));
  356.                 $use_sql    = TRUE;
  357.                 break;
  358.  
  359.             case 'empty_tbl':
  360.                 if (PMA_MYSQL_INT_VERSION >= 40000) {
  361.                     $a_query = 'TRUNCATE ';
  362.                 } else {
  363.                     $a_query = 'DELETE FROM ';
  364.                 }
  365.                 $a_query .= PMA_backquote(htmlspecialchars(urldecode($selected[$i])));
  366.                 $run_parts = TRUE;
  367.                 break;
  368.  
  369.             case 'drop_fld':
  370.                 PMA_relationsCleanupColumn($db, $table, $selected[$i]);
  371.                 $sql_query .= (empty($sql_query) ? 'ALTER TABLE ' . PMA_backquote($table) : ',')
  372.                            . ' DROP ' . PMA_backquote(urldecode($selected[$i]))
  373.                            . (($i == $selected_cnt-1) ? ';' : '');
  374.                 break;
  375.  
  376.             case 'primary_fld':
  377.                 $sql_query .= (empty($sql_query) ? 'ALTER TABLE ' . PMA_backquote($table) . (empty($primary) ? '' : ' DROP PRIMARY KEY,') . ' ADD PRIMARY KEY( ' : ', ')
  378.                            . PMA_backquote(urldecode($selected[$i]))
  379.                            . (($i == $selected_cnt-1) ? ');' : '');
  380.                 break;
  381.  
  382.             case 'index_fld':
  383.                 $sql_query .= (empty($sql_query) ? 'ALTER TABLE ' . PMA_backquote($table) . ' ADD INDEX( ' : ', ')
  384.                            . PMA_backquote(urldecode($selected[$i]))
  385.                            . (($i == $selected_cnt-1) ? ');' : '');
  386.                 break;
  387.  
  388.             case 'unique_fld':
  389.                 $sql_query .= (empty($sql_query) ? 'ALTER TABLE ' . PMA_backquote($table) . ' ADD UNIQUE( ' : ', ')
  390.                            . PMA_backquote(urldecode($selected[$i]))
  391.                            . (($i == $selected_cnt-1) ? ');' : '');
  392.                 break;
  393.  
  394.             case 'fulltext_fld':
  395.                 $sql_query .= (empty($sql_query) ? 'ALTER TABLE ' . PMA_backquote($table) . ' ADD FULLTEXT( ' : ', ')
  396.                            . PMA_backquote(urldecode($selected[$i]))
  397.                            . (($i == $selected_cnt-1) ? ');' : '');
  398.                 break;
  399.         } // end switch
  400.  
  401.         // All "DROP TABLE", "DROP FIELD", "OPTIMIZE TABLE" and "REPAIR TABLE"
  402.         // statements will be run at once below
  403.         if ($run_parts) {
  404.             $sql_query .= $a_query . ';' . "\n";
  405.             if ($query_type != 'drop_db') {
  406.                 PMA_DBI_select_db($db);
  407.             }
  408.             $result = @PMA_DBI_query($a_query) or PMA_mysqlDie('', $a_query, FALSE, $err_url);
  409.         } // end if
  410.     } // end for
  411.  
  412.     if ($query_type == 'drop_tbl') {
  413.         if (!empty($sql_query)) {
  414.         $sql_query .= ';';
  415.     } elseif (!empty($sql_query_views)) {
  416.         $sql_query = $sql_query_views . ';';
  417.             unset($sql_query_views);
  418.         }
  419.     }
  420.  
  421.     if ($use_sql) {
  422.         require './sql.php';
  423.     } elseif (!$run_parts) {
  424.         PMA_DBI_select_db($db);
  425.         $result = PMA_DBI_query($sql_query);
  426.         if (!empty($sql_query_views)) {
  427.             $sql_query .= ' ' . $sql_query_views . ';';
  428.             PMA_DBI_query($sql_query_views);
  429.             unset($sql_query_views);
  430.         }
  431.     }
  432.     if ($rebuild_database_list) {
  433.         // avoid a problem with the database list navigator
  434.         // when dropping a db from server_databases
  435.         $GLOBALS['PMA_List_Database']->build();
  436.     }
  437. }
  438. ?>
  439.