Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z Klasa odpowiedzialna za wyświetalnie danych
Forum PHP.pl > Forum > PHP
markkoo99
Witam,
Mam problem z wyświetleniem danych z baz danych. Robię aplikację obiektowo a raczej sie uczę. Bo jest robię bez obiektów to wyświetla mia zawartość bazy danych. Pewnie mam coś źle napisane w tej klasie która odpowiada za wyświetlanie danych.
Struktura aplikacji wygląda następująco:
Głównym rdzeniem aplikacji jest plik apcore.php
CODE
<?php

//Dołączenie pliku konfiguracyjnego
require_once(APP_DIR.'/configuration/define.php');
require_once(APP_DIR.'/aplication/comunication.php');
require_once(APP_DIR.'/aplication/object.php');

//Klasa bazowa PEAR
require_once('PEAR.php');
require_once('DB.php');


//Moduły sklepu -------------------------------START ----------------------
//Katalog
require_once(APP_DIR.'/modules/catalog.php');
//-----------------------KONIEC------------------------------


class AppCore {

private static $_appInitialized;
/**
* Obiekt PEAR pamiętający połączenie z bazą danych
*/
public static $_dataBaseConnection;

public static function initializeApplication() {
//Próba nawiązania połączenia z bazą danych

if (PEAR::isError(self::$_dataBaseConnection = DB::connect(DSNInit()))) {

if (LOG_WRITE) self::$_logObject->log('Nie można nawiązać połączenia z bazą danych. Przyczyna: '.self::$_dataBaseConnection->getMessage(), LOG_ERR);
throw new Error('dbconnectionerror');
}

}

public static function Query($queryString) {
return self::$_dataBaseConnection->Query($queryString);
}
/**
* Metoda obiera ilość wierszy objętych działaniem polecenia
* INSERT, UPDATE lub DELETE
* @return mixed
*/
}

//Inicjacja aplikacji
try {
AppCore::initializeApplication();

} catch (Error $err) {
echo (Lang::getMessage('error').': '.Lang::getMessage($err->getMessage()).'<br/>');
exit (Lang::getMessage('endofapplication'));
}





?>

Plik do odpowiedzialny za komunikacje z baza comunication.php:

CODE
<?php

/************************************
*
* Połaczenie inicializycjne do bazy danych
*
************************************/


function DSNInit()
{
// Dołączenie obsługi klasy PEAR-DB
require_once('DB.php');

return DB_TYPE . '://' . DB_USERNAME . ':' . DB_PASSWORD . '@' . DB_HOST . '/' . DB_NAME;
}
?>


Plik Klasy Object.php :

CODE
<?php

abstract class Object {
/**#@+
* @access protected
*/
/**
* @var string Unikalny identyfikator obiektu (32 znaki).
*/
protected $_Id;
/**
* @var string Identyfikator w?a?ciciela obiektu.
*/
protected $_Owner;
/**
* @var string Typ obiektu (wszystkie typy przechowywane s? w bazie danych)
*/
protected $_Type;
/**
* @var string Opis obiektu
*/
protected $_Desc;
/**
* @var string Data utworzenia obiektu
*/
protected $_CreateDate;
/**
* @var string Data ostatniej modyfikacji obiektu
*/
protected $_LastModifyDate;
/**
* @var bool Aktywno?? obiektu
* (TRUE - obiekt jest aktywny
* FALSE - obiekt jest niekatywny)
*/
protected $_Active;
/**#@-*/

/**
* Domy?lna metoda wywo?ywana podczas inicjalizacji obiekt?w tej klasy
* @access public
*/
public function __construct () {}
/**
* Ustawia unikalny identyfikator obiektu
* @access public
* @param string $id Unikalny identyfikator
* @return bool
*/
public function setId($id){$this->_Id = $id;}
}
?>


Plik Catalog.php który zawiera klasę do wyświetlania danych z bazy:
CODE
<?php


class Catalog extends Object {

public function __construct($catdata = array()) {
$this->_SubCategory = NULL;
//Tworzenie obiektu

}


public function getCategoryProductsNumber() {
$sqlquery = 'select * from categories';
if (!$result = AppCore::Query($sqlquery)) throw new Error('dberror');
if (!$num = $result->numRows()) {
return 0;
}
return $num;
}
}
?>

Struktura bazy jest bardzo prosa i składa sie kilku rekordów. Chodzi o to żeby coś wyświetlić.


Początkowo wyskakiwały mi błędy które stopniowo usuwałem, a teraz mam biały ekran i nic nie wyświetla. Nie wiem jak sobie poradzić z góry dziękuje za wskazówki. Będę bardzo wdzięczny za pomoc bo utknąłem w miejscu i nie wiem jak sobie z tym poradzić.
Prph
Po tym, co zamieściłeś trudno powiedzieć, to działa lub nie działa. Jeżeli masz biały ekran i nic się nie wyświetla, upewnij się, że masz włączone raportowanie o błędach:

  1. error_report(E_ALL);
  2. ini_set('display_errors', 'on');


Mała uwaga do:
  1. $sqlquery = 'select * from categories';
  2. if (!$result = AppCore::Query($sqlquery)) throw new Error('dberror');


Wyjątkiem powinna rzucać metoda query. Tutaj możesz najwyżej próbować go złapać i zgłosić kolejny wyjątek lub nie łapać w ogóle i aplikacja sama się zatrzyma.
markkoo99
Wcześniej jak wrzuiłem kod to waliło błędy jeden za drugim, wiec je usuwałem z myśla ze zadziała w końcu.Ale ukazuje sie biały ekran. Nie wiem czy dobrze wyświetlam dane z bazy korzystajac z klasy. Jak można w najprosty sposó wyświetlis jakies dane z bazy korzsytajc z PHP obiektowego ?
Prph
Zamiast:

  1. if (!$num = $result->numRows()) {
  2. return 0;
  3. }
  4. return $num;
  5. }


zrób:

  1. return $result->numRows();


W ogole to pobranie wszystkich rekordów i zliczenie ich w PHP to bardzo zły pomysł. Zobacz select count(*) from....
markkoo99
Zmieniłem i dalej biały ekran. Nie wiem czy cos wcześniej nie jest skopane. Tylko nie wiem co. Zastanwiam sie czy pod wzgeldem teoretycznym obiektowsc tutaj właściwie zdefiniowałem.
Prph
Tylko w tym kodzie nic nie wyświetlasz. To jest cały Twój kod? Załącz plik, w którym chcesz coś wyświetlić.
markkoo99
No własnie to sa wszytkie moje pliki jakie mam. Gdzie zdefiniować to wyświetlanie?? To mnie właśnie trzyma , bo dopiero co zaczynam w tej tematyce.
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.