Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 155 Pomógł: 12 Dołączył: 5.04.2008 Ostrzeżenie: (0%)
|
Witam
tworze sobie klasy do obsługi bazy i walidacji danych. plik z klasa bazy dbFns.php Kod <?php require_once('config.php'); class Database { protected $hConn; public function __construct() { $this->hConn = mysql_connect(Db_host, Db_user, Db_password, Db_database) if(!$this->hConn) { throw new Exception("Nie można połączyć się z bazą."); } } public function __destruct() { if($this->hConn) { print ('widze w destruktorze'); mysql_close($this->hConn); } } public function select($sql) { $sql = mysql_real_escape_string($sql); $hRes = mysql_query($sql, $this->hConn) or die('brak polaczenia w dbfns'); while($odp = mysql_fetch_array($hRes)) { print $odp['email']; } } } ?> plik z funkcjami do walidacji danych: Kod <?php require 'dbFns.php'; class ValidateData extends Database { function safe_output($string) { $string = trim($string); $string = strip_tags($string); $string = htmlspecialchars($string); return $string; } function validateUserName($value) { $value = $this->safe_output($value); if($value == null) { return 0; } $query = parent::select("SELECT * FROM users WHERE username = '$value'"); } } ?> i wywołanie funkcji w pliku sign.php w postaci: Kod <?php if(isset($_POST['signup'])) { $validate = new ValidateData(); $validate->validateUserName($_POST['login_sign']); } ?> Problem polega na tym że połączenie z bazą jest zamykane przed wywołaniem funckji validateUserName(), tzn. pojawia się komunikat z Kod $hRes = mysql_query($sql, $this->hConn) or die('brak polaczenia w dbfns'); tej linijki kodu że brak połączenia w dbnfs, oraz komunikat Kod print('widze w destruktorze'); czyli wywoływany jest od razu destruktor według mnie. Czy ktoś może pomóc rozwiązać ten problem bo nie wiem czy funkcja select jest w złym miejscu czy uchwyt połączenia trzeba jakoś inaczej przekazać?? Ten post edytował bliitz 5.04.2008, 13:04:21 |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 24.04.2006 Skąd: Kielce Ostrzeżenie: (0%)
|
przenies destruktor do klasy validate albo nadpisz go:
final public function __destruct() //(nie testowalem ale chyba tak powinno byc ok) { parent::__destruct(); } powinno pomoc, bo w tym momencie na dobra sprawe nie tworzysz instancji obiektu Database tylko go rozszerzasz, a metoda destruct nie dziala na dziecko. Po polsku, Database nie istnieje, aczkolwiek uzycza pol i metod klasie ktora go rozszerza. Tak samo jest z magicznym getem- mozesz miec ustawione w klasie parent (rozszerzajacej) zmienna "dupa" a chcac zrobic: echo $child->dupa; metoda __get klasy dziecka sie odpali. Ten post edytował xbitdesigns 5.04.2008, 17:03:01 |
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 602 Pomógł: 30 Dołączył: 1.08.2007 Skąd: Nowy Sącz Ostrzeżenie: (0%)
|
A co z pętlą Gdy będziesz chciał odpalić nastapi zapętlenie i będzie cały czas wyświetlany taki sam wynik |
|
|
|
Post
#4
|
|
|
Grupa: Zarejestrowani Postów: 535 Pomógł: 27 Dołączył: 3.05.2005 Ostrzeżenie: (20%)
|
O nieeee po co ta pętla i ten printf w select ?
Moja pseudo klasa która mi ładnie służy:
|
|
|
|
Post
#5
|
|
|
Grupa: Zarejestrowani Postów: 155 Pomógł: 12 Dołączył: 5.04.2008 Ostrzeżenie: (0%)
|
A co z pętlą Gdy będziesz chciał odpalić nastapi zapętlenie i będzie cały czas wyświetlany taki sam wynik ta pętla to tak tylko do testów wstawiona żeby sprawdzić czy zwraca rezultaty jakieś zapytanie Ten post edytował bliitz 6.04.2008, 11:03:35 |
|
|
|
![]() ![]() |
|
Aktualny czas: 23.12.2025 - 12:18 |