Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [skrypt] MySQL CLWC
Forum PHP.pl > Inne > Oceny
phpion
Hejka!

Właśnie napisałem dla siebie nowego softa. Pisany był on z myślą o zastępstwie dla PHPMyAdmina jako linia polecen przez przeglądarkę internetową. Wszystkie polecenia wydajemy poprzez ich wpisywanie - nic nie wyklikujemy.

Jeśli chodzi o cechy skryptu:
- klasa do obsługi zapytań napisana pod PHP5 (z obiektowym PHP dopiero zaczynam więc proszę o uwagi w tej kwestii)
- możliwość ustawienia poziomu bezpieczeństwa jednym poleceniem
- możliwość ręcznego zablokowania niektórych zapytań (np. DROP, TRUNCATE, DELETE...)
- obsługa wielu zapytań m.in. SELECT, SHOW, DESCRIBE...
- wykorzystuje mintAjax
- połączenie z bazą danych jest sygnalizowane poprzez prostą animację (prawy dolny róg)
- historia poleceń (strzałka w górę / w dół na linii poleceń)
- wyświetlenie ewentualnego błędu składniowego zapytania

Demo online: http://phpworkstation.com/MySQL_CLWC
Download: http://phpworkstation.com/MySQL_CLWC.rar

Brakuje dokumentacji ale tak jak wspomniałem wcześniej pisałem to pod siebie. Jeśli jednak ktoś chciałby wykorzystać to u siebie to nie ma problemu smile.gif

Prosiłbym o ewentualne uwagi oraz sugestie.

/*
EDIT
w demo dostępna jest tylko moja testowa baza (dane zaszyte na stałe w kodzie) więc nie połączycie się ze swoimi winksmiley.jpg
*/

PS:
w demo możecie wykonań np.
- SELECT * FROM testowa;
- DESCRIBE testowa;
- INSERT INTO testowa SET pole="Lalala", tekst="Lololo", liczba=1;
- UPDATE testowa SET pole="Hehehe" LIMIT 1;

PS2:
Gdyby ktoś zauważył jakąkolwiek lukę w bezpieczeństwie (np. niezablokowane jakieś zapytanie) prosiłbym o info winksmiley.jpg
kwiateusz
1. Ustawiłbyś kodowanie bo musiałem ręcznie ustawić utf
2. Jak sie z tym połączyć?? bo nie ma w co kliknąć a firebug 2 errory wywala w js (mówie o demie)
phpion
No kodowanie i dla plików i w samym charset jest UTF-8 więc nie wiem o co chodzi.
Co do braku buttona - dodane. Nie wiedziałem, że pod IE i FF bez tego nie zadziała :/

PS: wykonanie zapytania jest opóźnione o 2 sekundy.

/*
Edit:
Kodowanie zmienione jednak komunikaty przychodzące z Ajaxa, pomimo iconv("UTF-8", "ISO-8859-2", $echo), nie są wyświetlane poprawnie :/
Opóźnienie usunięte - w sumie było tylko po to aby pokazać animowanego gif'a na dole tongue.gif
*/

Poniżej wklejam kody PHP:
class.CLWC.php
  1. <?php
  2. abstract class CLWC {
  3. const YOU_DONT_HAVE_PERMISSION = "Nie masz praw do wykonywania tego zapytania";
  4. const QUERY_HAS_BEEN_DONE = "Zapytanie zostało wykonane";
  5.  
  6. protected $dbHandler;
  7. protected $query;
  8. protected $disabledQueries;
  9.  
  10. public function __construct() {
  11. $this->dbHandler = false;
  12. $this->disabledQueries = array();
  13. }
  14.  
  15. abstract public function query($query);
  16. abstract protected function execute();
  17.  
  18. public function addDisabledQuery($query) {
  19. $query = strtoupper($query);
  20.  
  21. if (!$this->isQueryDisabled($query)) {
  22. $this->disabledQueries[] = $query;
  23. }
  24. }
  25.  
  26. public function setSecurityLevel($level) {
  27. switch ($level) {
  28. case 1:
  29. $this->addDisabledQuery("DELETE");
  30. break;
  31. case 2:
  32. $this->setSecurityLevel(1);
  33. $this->addDisabledQuery("DROP");
  34. $this->addDisabledQuery("TRUNCATE");
  35. break;
  36. }
  37. }
  38.  
  39. protected function isConnected() {
  40. return ($this->dbHandler) ? true : false;
  41. }
  42.  
  43. protected function isQueryDisabled($query) {
  44. return in_array($query, $this->disabledQueries) ? true : false;
  45. }
  46.  
  47. protected function getQuery($query) {
  48. $query = trim($query);
  49. $explode = explode(" ", $query);
  50.  
  51. return strtoupper($explode[0]);
  52. }
  53.  
  54. protected function error($error) {
  55. die($error);
  56. }
  57. }
  58. ?>

class.MySQL_CLWC.php
  1. <?php
  2. class MySQL_CLWC extends CLWC {
  3. public function __construct($host, $user, $pass, $base) {
  4. parent::__construct();
  5.  
  6. $this->dbHandler = @mysql_connect($host, $user, $pass) or $this->error(mysql_error());
  7. @mysql_select_db($base, $this->dbHandler) or $this->error(mysql_error());
  8. }
  9.  
  10. public function query($query) {
  11. if ($this->isConnected()) {
  12. if (!$this->isQueryDisabled($this->getQuery($query))) {
  13. $this->query = $query;
  14. $this->execute();
  15. }
  16. else {
  17. $this->error(parent::YOU_DONT_HAVE_PERMISSION);
  18. }
  19. }
  20. }
  21.  
  22. protected function execute() {
  23. if ($q = @mysql_query($this->query)) {
  24. if (in_array($this->getQuery($this->query), array("SELECT", "SHOW", "DESCRIBE"))) {
  25. $headers = true;
  26. $class = "white";
  27.  
  28. $echo = "<table cellspacing="0">";
  29.  
  30. while($r = mysql_fetch_array($q, MYSQL_ASSOC)) {
  31. if ($headers) {
  32. $echo .= "<tr>";
  33.  
  34. foreach ($r as $index => $value) {
  35. $echo .= "<th>".$index.":</th>";
  36. }
  37.  
  38. $echo .= "</tr>";
  39.  
  40. $headers = false;
  41. }
  42.  
  43. $echo .= "<tr>";
  44.  
  45. $class = ($class == "white") ? "silver" : "white";
  46.  
  47. foreach ($r as $value) {
  48. $echo .= "<td class="".$class."">".$value."</td>";
  49. }
  50.  
  51. $echo .= "</tr>";
  52. }
  53.  
  54. $echo .= "</table>";
  55. }
  56. else {
  57. $echo = parent::QUERY_HAS_BEEN_DONE;
  58. }
  59. }
  60. else {
  61. $echo = $this->error(mysql_error());
  62. }
  63.  
  64. echo iconv("UTF-8", "ISO-8859-2", $echo);
  65. }
  66.  
  67. public function __destruct() {
  68. if ($this->isConnected()) {
  69. @mysql_close($this->dbHandler);
  70. }
  71. }
  72. }
  73. ?>
Turgon
Cytat
Zapytanie zosta

Po wykonaniu zapytania.... Hmm?
phpion
:[
To kodowanie już mnie zaczyna powoli wpieniać :[ do tej pory używałem Quanty i wszystko było ok, po przejściu na Eclipse i ustawieniu na UTF-8 się dupi :[ szkurde...
No ale odnośnie pytania: powinno być 'Zapytanie zostało wykonane'. Zapewne wykonałeś INSERT (bo doszedł nowy rekord) więc w wyniku otrzymałeś info, że zapytanie zostało wykonane smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.