Шустрая MySQL консолька

Димон

Новичок
Шустрая MySQL консолька

Надоело мне пользоваться у моего хостера спец.оболочкой для управления БД, которая постоянно "уходит в раздумья", поэтому решил набросать простенькую консольку для управления моим аккаунтом.
Функций минимум: ввод SQL-запроса, журнал историй запросов, и, естественно "экран" вывода. Кнопки 2: отправить запрос и очистить журнал историй. Запрос можно заканчивать ; ,а можно и нет.
Привязана к библиотеке mysql, поэтому комбинированные запросы и результаты процедур "не хавает". Но кому, если что понадобиться пусть пошаманит.
PHP:
<?php
// ЭМУЛЯТОР КОНСОЛИ MySQL
////////////////////////////////////////
################
# START MySQL
################

class Database
  {
    protected $host = 'hostname';             // имя хоста
    protected $user_admin = 'username';  // логин
    protected $pass_admin = 'password';  // пароль
    protected $db_name = 'basename';     // имя базы для работы

    public function startAdmin()
      {
        mysql_pconnect($this->host, $this->user_admin, $this->pass_admin) or die('Не могу установить соединение');
        mysql_select_db($this->db_name) or die('Не могу выбрать базу');
      }
    
    public function query($q)
      {       
        if(!$result = mysql_query($q))
          {
            echo mysql_error();
            echo '<br>[QUERY] ' . $q;
          }
        return $result;
      }  
  }
$db = new Database;
$db->startAdmin();

#############
# REQUEST
#############

if(isset($_POST['request']))
  {
    $status = 'nothing received';     
    $query = trim(addslashes($_POST['query']));
    if(strlen($query) > 0)
      {
        if(substr($query, -1) == ';') $query = substr($query, 0, strlen($query) - 1);      
        if(($result = $db->query($query)) == true)
          {
            while($Data[] = mysql_fetch_row($result));
            array_pop($Data);
            
            $rows = count($Data);
            $cols = count($Data[0]);
            
            echo "<table border='0' style='border-collapse: collapse;'>";
            for($i = -1; $i < $rows; $i++)
              { 
                echo "<tr>";
                for($j = 0; $j < $cols; $j++)
                  {
                    if($i == -1) echo "<td style='border: 1px dashed black; padding: 5px;'>"
                                        . mysql_field_name($result, $j) . "</td>";
                    else echo "<td style='border: 1px dashed black; padding: 5px;'>"
                                . $Data[$i][$j] . "</td>";
                  }
                echo "</tr>";  
              }
            echo "</table>";  
  
            $status = 'ok'; 
          }
        else $status = 'request error';
      }
     else $status = 'request is empty'; 
  
    echo '<br><b>' . $status . '</b>';
    exit();
  }
##########################################################
?>

<title>MySQL_manager</title>
<style type='text/css'>
BODY {
 font: normal 13px "Lucida Console", Tahoma; background-color: #eee;
}
TABLE, TH, TD { font: normal 13px "Lucida Console", Tahoma; }
FORM { margin: 0px; }
P { margin: 0px; padding: 0px; }
.block { border: 1px solid #ccc; background-color: white; padding: 10px; }
#inputBlock { width: 80%; height: 200px; }
#displayBlock { width: 100%; height: 400px; }
#historyBlock { width: 100%; height: 177px; overflow: auto; }
</style>

<script type='text/javascript'>
function historyAdd()
  { 
    var Value = document.forms[0].elements[0].value;
    if(Value.length > 0)
      {
        var Str = "<span onclick='document.forms[0].elements[0].value = this.firstChild.nodeValue' style='cursor: pointer'>" + Value + "</span><br>-----";    
        var El = document.createElement('p');
        El.innerHTML = Str;    
        document.getElementById('historyBlock').appendChild(El);
      }
  }
</script>

<table border='0' width='100%'>
 <tr valign='top'>

<!--// Input block -->
  <td width='70%'>
      <form method='post' target='monitor' onsubmit='historyAdd()'>
       <textarea id='inputBlock' class='block' name='query'></textarea>
       <input type='submit' value='    GO    ' name='request'>  
      </form>
  </td>

<!--// History block -->
  <td>
      <div id='historyBlock' class='block'></div>
      <div align='right'>
        <button onclick="document.getElementById('historyBlock').innerHTML=''"> reset history </button>
      </div>  
  </td>
 </tr> 
  
<!--// Display block -->
 <tr> 
  <th colspan='2'>  
     <iframe name='monitor' id='displayBlock' class='block' frameborder='0'></iframe>
  </th>
 </tr>
</table>
 

Alexandre

PHPПенсионер
Надоело мне пользоваться у моего хостера спец.оболочкой для управления БД,
phpMyAdmin рулит
которая постоянно "уходит в раздумья",
очевидно виновата не сама оболочка, а загруженность хостинга, меняй провайдера.
 

Димон

Новичок
Автор оригинала: *****
и эта тулза действительно работает?
что-то не верится.
Здесь не надо верить - возьми и запусти у себя.

Можещь еще усомниться и в работоспособности этой конструкции:
$string = strrev(substr(strrev(substr($string, 0, 45)), strpos(strrev(substr($string, 0, 45)), ' '))) . "...";

...Написано тока ради примера....

А вообще "тулза" получилась удобная. Но, как говориться, кому что ближе.
 

Фанат

oncle terrible
Команда форума
Димон, для примера чего?

Запускать мне не надо. Я немного знаю PHP и MySQL. Чтобы понять, как это работает, и без запусков.
И чтобы понять, как оно не работает - тоже.

поработаешь чуть больше со своей тулзой - тоже поймешь.
 

Димон

Новичок
Для Фaната:
Да, приношу извинения. Действительно так не работает.
У меня обращение к базе идет через класс, который "обсасывает" все переменные перед обращением к базе. А здесь я указал напрямую.
 

Фанат

oncle terrible
Команда форума
Ну так и как в итоге все это будет работать - с классом или без класса?

Консоль оно, кстати, не эмулирует.
Врямя запроса не выводит. Ошибку запроса не выводит. Запрос не выводит.

Все, чего у тебя интересного в "тулзе" - это хистори. Остальное сделано ужасно.
 

Димон

Новичок
Спасибо за комплимент.
А ошибку она выводит. И запрос тоже выводит:
=============================
if(!$result = mysql_query($q))
{
echo mysql_error();
echo '<br>[QUERY] ' . $q;
}
=============================

А, чтобы не было "ужасно" можно голых девок на background поставить :)
 
Сверху