Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[PHP, MySQL] Jak podejrzeć komunikację bazy danych i serwera?

Ostatnio zmodyfikowano 2012-11-30 21:56
Autor Wiadomość
jsc
Temat założony przez niniejszego użytkownika
[PHP, MySQL] Jak podejrzeć komunikację bazy danych i serwera?
» 2012-11-26 23:34:54
Mam problem ze skryptem PHP, który polega na tym, że baza danych wogóle nie reaguje na poczynania mojego skryptu i dlatego potrzebuję sposoby na podejrzenie komunikacji między tą bazą, a serwerem.
P-69965
malan
» 2012-11-27 02:07:29
Może Wireshark pomoże?
P-69968
jsc
Temat założony przez niniejszego użytkownika
» 2012-11-27 10:37:49
Nie pomaga, przechwytuje ruch między przeglądarką, a serwerem. Chyba potrzebuję podsłuchu na portach.
P-69972
malan
» 2012-11-27 16:42:46
Na moje to za bardzo kombinujesz. Zarzuć trochę kodu, powiedz co nie działa jak trzeba i może razem na coś wpadniemy :)
P-69983
jsc
Temat założony przez niniejszego użytkownika
» 2012-11-27 18:18:09
No to skoro chcesz to lecimy.

System budowy zapytania:
IOPlik.php (do pobierania szablonu zapytania ze snippeta)

<?php
// Biblioteka przeznaczone do wykonywania odczytów i zapisów między instancją witryny, a jej plikami

class IOPlik
{
private $plik;

public function __construct ($sciezka)
{
if (!(file_exists ($sciezka)))
{
die ('Podany plik nie isnieje');
}

$this -> plik = $sciezka;
}

public function szybkiDopisDoPliku ($tekst)
{
if (!(is_writable ($this -> plik)))
{
die ('Podany plik nie moze byc zapisywany');
}

file_put_contents ($this -> plik, $tekst, FILE_APPEND | LOCK_EX);
}

public function szybkiOdczytPliku ()
{
if (!(is_readable ($this -> plik)))
{
die ('Podany plik nie moze byc czytany');
}

return file_get_contents ($this -> plik, LOCK_EX);
}

public function __toString ()
{
if (!(is_readable ($this -> plik)))
{
die ('Podany plik nie moze byc czytany');
}

return file_get_contents ($this -> plik, LOCK_EX);
}
}
?>

szablon.php (przekształca szablon we właściwe zapytanie)

<?php
 // Biblioteka przeznaczone do obsługi szablonów dancych

class szablon
{
private $tresc = "";

private $poczatekWzorca = '/^\(\$';
private $dopuszczalneZnaki = '[a-zA-Z]+';
//Każdy znak, ktory nie jest alfanumeryczny nie przejdzie tego testu
private $koniecWzorca = '\)$/D';

private function wzorzec ()
{
return $this -> poczatekWzorca . $this -> dopuszczalneZnaki . $this -> koniecWzorca;
}

public function __construct ($zawartosc)
{
$this -> tresc = $zawartosc;
}

public function przeksztalc ($argument, $wartosc)
{
if (!(preg_match ($this -> wzorzec (), $argument)))
{
die ('Wyszukiwany wzorzec jest nieprawidlowy' . $argument);
}

$this -> tresc = str_replace ($argument, $wartosc, $this -> tresc);
}

public function __toString ()
{
if ((preg_match ($this -> wzorzec (), $this -> tresc)))
{
die ('Szablon nie jest przetworzony do konca');
}

return $this -> tresc;
}

public function ujawnij ()
{
if ((preg_match ($this -> wzorzec (), $this -> tresc)))
{
die ('Szablon nie jest przetworzony do konca');
}

return $this -> tresc;
}
}
?>

IOBazaDanych.php (wykonuje pracę)

<?php
// Biblioteka przeznaczone do wykonywania odczytów i zapisów między instancją witryny, a jej bazami danych

require_once ('C:\wamp\www\CMS\skrypty\PHP\IOPlik.php');
require_once ('C:\wamp\www\CMS\skrypty\PHP\szablon.php');

class bazaDanych
{
private $zrodla;
private $lacze;

private $kwerenda;

private $wynik;

private $czyWykonane;

public function __construct ($sciezka)
{
$this -> zrodla = $sciezka . DIRECTORY_SEPARATOR;
$daneLogowania = new IOPlik ($this -> zrodla . 'login.txt');

$loguj = explode ("," , $daneLogowania);

try
{
$this -> lacze = new PDO ($loguj [0], $loguj [1], $loguj [2]);
}

catch (PDOEXception $blad)
{
die ('Połączenie nie moze zostać utworzone: ' . $blad->getMessage());
}

$this -> czyWykonane = true;
}

public function __destruct()
{
if (!($this -> czyWykonane))
{
die ('Poprzednia kwerenda nie wykonana');
}

unset ($this -> lacze);
}

public function utworzKwerende ($typ)
{
if (!($this -> czyWykonane))
{
die ('Poprzednia kwerenda nie wykonana');
}

if ($this -> wynik)
{
$this -> wynik -> closeCursor;
}

unset ($this -> wynik);

$this -> czyWykonane = false;

$typKwerendy = new IOPlik ($this -> zrodla . DIRECTORY_SEPARATOR . $typ . '.txt');
$this -> kwerenda = new szablon ($typKwerendy);
}

public function uzupelnijKwerende ($kolumna, $zawartosc)
{
if ($this -> czyWykonane)
{
die ('W bazie danych nie maktywnego zapytania');
}

$this -> kwerenda -> przeksztalc ($kolumna, $zawartosc);
}

public function wykonajKwerende ($czyZmienia)
{
if ($this -> czyWykonane)
{
die ('W bazie danych nie maktywnego zapytania');
}

try
{
if ($czyZmienia) //Czyli czy nie ogranicza się do odczytu z bazy danych
{
$this -> wynik = $this -> lacze -> exec ('"' . $this -> kwerenda -> ujawnij () . '"');
}

else
{
echo ($this -> kwerenda -> ujawnij ());
$this -> wynik = $this -> lacze -> query ($this -> kwerenda -> ujawnij ());
}
}

catch (PDOEXception $blad)
{
die ('Kwerenda nie moze byc wykonana: ' . $blad->getMessage());
}

$this -> czyWykonane = true;
unset ($this -> kwerenda);
}

public function zwrocWynik ()
{
return $this -> wynik;
}
}
?>

Skrypt wykorzystujący powyższe nagłówki:

$przewodnikWitryn = new bazaDanych ('C:\wamp\www\CMS\Akcje\zarzadzanieWitryna\skrypty\SQL');

$przewodnikWitryn -> utworzKwerende ('liczWiersze');
$przewodnikWitryn -> wykonajKwerende (false);

$obecnaIloscWitryn = $przewodnikWitryn -> zwrocWynik ();

$przewodnikWitryn -> utworzKwerende ('dodajWitryne');

$przewodnikWitryn -> uzupelnijKwerende ('($id)', ++$obecnaIloscWitryn);
$przewodnikWitryn -> uzupelnijKwerende ('($nazwa)', $_GET["katalogWitryny"]);
$przewodnikWitryn -> uzupelnijKwerende ('($domena)', $_GET['domenaWitryny']);
$przewodnikWitryn -> uzupelnijKwerende ('($sponsor)', 'ja');

$przewodnikWitryn -> wykonajKwerende (false);

unset ($przewodnikWitryn);

Dane pochodzą ze strony z kodem:

<!DOCTYPE html>
<html lang="pl">
<head>
<title>Zakladanie konta witryny</title>
</head>

<body>
<form action="./skrypty/PHP/zakladanie konta.php" method="get">
Podaj lokalizacje witryny:
<input type="text" name="katalogWitryny" required /><br />
Podaj domene witryny: <input type="url" name="domenaWitryny" required /><br />
<input type="submit" value="Zatwierdź" />
</form>
</body>
</html>

A o to snippety dla bazy danych:
login.txt

mysql:host=localhost;dbname=witryny,root,

liczWiersze.txt

SELECT COUNT '*' FROM `daneglowne`

dodajWitryne.txt

INSERT INTO `witryny` (`ID`, `Nazwa`, `Domena`, `Sponsor`) VALUES ('($id)', '($nazwa)', '($domena)', '($sponsor)')
P-69995
krzyk
» 2012-11-28 10:25:25
Pierwszym rzutem oka.

Popraw wszystkie:

if ((preg_match (...)))
{
die ('');
}

Nie widzę też tworzenia tabeli 'witryny' więc upewnij sie że ją masz.
P-70036
jsc
Temat założony przez niniejszego użytkownika
» 2012-11-28 10:59:34
Rzeczywiście przy dodawaniu się machnąłem i teraz śmiga, ale zostaje problem z pobraniem ilości rekordów (trzeba tu jakiś fetch ()?).

A co do preg_match (...) możesz wytłumaczyć o co chodzi?
P-70039
krzyk
» 2012-11-28 11:12:19
w szablon.hpp die wykona się kiedy poprawne.
czemu szablon.hpp a nie szablon.php?


public function ujawnij ()
 {
 if ((preg_match ($this -> wzorzec (), $this -> tresc)))
 {
 die ('Szablon nie jest przetworzony do konca');
 }

 return $this -> tresc;
 }


powinno być

public function ujawnij ()
 {
 if (!(preg_match ($this -> wzorzec (), $this -> tresc)))// <<< !
 {
 die ('Szablon nie jest przetworzony do konca');
 }

 return $this -> tresc;
 }


popraw wszystkie.

zostaje problem z pobraniem ilości rekordów
SELECT COUNT (*) FROM z_czego
P-70042
« 1 » 2 3
  Strona 1 z 3 Następna strona