t0ze Posted February 7, 2013 at 08:55 PM Report #494525 Posted February 7, 2013 at 08:55 PM (edited) Boa noite, Estou com um problema que acho ser de organização de pastas do meu projecto, o que faz com que não consiga aceder ao objecto $db que é um PDO, dentro da minha classe "Animais". Na pratica, tenho na raiz do projecto algo assim /includes /constants /classes /functions /js /stye /index.php A criação do objecto $db está a ser feita em /includes/connection.php da seguinte forma: <?php require("constants.php"); //contem os valores de DB_ ... try { $db = new PDO('mysql:host='.DB_SERVER.';dbname='.DB_NAME.'', DB_USER, DB_PASS); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $query = ('SET NAMES "utf8"; SET CHARACTER SET utf8; SET COLLATION_CONNECTION = "utf8_general_ci"'); $db->exec($query); } catch(PDOException $e) { echo 'ERROR: ' . $e->getMessage(); } ?> E no meu ficheiro index.php onde incluo o ficheiro /includes/connection.php incluo também o ficheiro /classes/animal.php assim: <?php require_once("includes/session.php"); ?> <?php require_once("includes/connection.php"); ?> <?php require_once("includes/functions.php");?> <?php include("includes/html.php"); ?> <?php include("includes/header.php"); ?> <?php confirm_logged_in(); @validate_parameter(); ?> <?php include("includes/menu.php"); ?> <?php include("classes/pagination.php"); ?> <?php include("classes/animal.php"); ?> </div> <?php $horse = new animal($id=276); ?> E na minha /classes/animal.php o seguinte: <?php Class animal { public $animal; public function __construct($id = NULL, $n = NULL){ if ($id != NULL || $n != NULL) { $query = $db->Prepare("SELECT animal.* FROM animal WHERE id = :id OR n = :n LIMIT 1"); $query->bindValue(':id', $id ); $query->bindValue(':n', $n); try { $query->execute(); }catch (PDOException $e) { } if ($query->rowCount() == 1) { $animal = $query->fetch(PDO::FETCH_ASSOC); $this->animal= $animal; } } } .... ... .. E isto tudo dá-me um erro no inde.php Notice: Undefined variable: db in C:\inetpub\wwwroot\effective\classes\animal.php on line 10 Fatal error: Call to a member function Prepare() on a non-object in C:\inetpub\wwwroot\effective\classes\animal.php on line 10 Já tentei colocar o /includes/connection.php no ficheiro /classes/animal.php mas continua com erros... alguma ideia/sugestão de organizar isto ? Obg Edited February 7, 2013 at 08:56 PM by t0ze
scorch Posted February 7, 2013 at 09:06 PM Report #494529 Posted February 7, 2013 at 09:06 PM Coloca isto: 🙂 public function __construct($id = NULL, $n = NULL){ //É necessário indicar a variável como global na função global $db; if ($id != NULL || $n != NULL) { $query = $db->Prepare("SELECT animal.* FROM animal WHERE id = :id OR n = :n LIMIT 1"); $query->bindValue(':id', $id ); $query->bindValue(':n', $n); try { $query->execute(); }catch (PDOException $e) { } if ($query->rowCount() == 1) { $animal = $query->fetch(PDO::FETCH_ASSOC); $this->animal= $animal; } } 1 Report PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.
t0ze Posted February 7, 2013 at 09:27 PM Author Report #494536 Posted February 7, 2013 at 09:27 PM Pronto, resolvido, já estou desbloqueado de novo 🙂 Já tinha experimentado chamar em global, mas fora da classe no ficheiro /classes/animal.php ... Obrigado pela ajuda scorch !
mjamado Posted February 8, 2013 at 12:31 AM Report #494567 Posted February 8, 2013 at 12:31 AM Cada vez que alguém usa uma variável global, um GNR dá um pontapé num porco. Sê amigo dos recos, não uses variáveis globais. "Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.
pikax Posted February 8, 2013 at 11:43 AM Report #494604 Posted February 8, 2013 at 11:43 AM nao uses variaveis globais, mais vale implementar um singleton Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now