PHP - Error accediendo variable de clase

 
Vista:

Error accediendo variable de clase

Publicado por Lago GZ (13 intervenciones) el 04/02/2010 13:21:25
Buenos días.

Pues resulta que estoy haciendo una web trabajando sobre Postgre y Apache. Las últimas versiones tanto de Postgre, de PHP como de Apache.

Tengo una página en blanco llamada "index.php", y otra en la cuál defino una clase llamada BaseDatos.php.

Os excribo el código y el problema

-------------------------BaseDatos.php-------------------------
<?php
class BaseDatos
{
public $Indice_Conexion;

public function Conectar($cNombreBD, $cPuerto, $cUsuario, $cPassword, $cHost)
{
this->$Indice_Conexion = pg_connect("dbname=" + $cNombreBD + " port=" +$cPuerto + "user=" + $cUsuario + " password=" + $cPassword + " host=" + $cHost);

return this->$Indice_Conexion;
}
}
?>

---------------------------index.php------------------------------------
<?php
1. session_start();
2.
3. include 'Conexion_BD/BaseDatos.php';
4.
5. try
6. {
7. if (!isset($_SESSION['gBasedatos']))
8. {
9. $_SESSION['gBaseDatos'] = new BaseDatos();
10.
11.$_SESSION['gBaseDatos']->Conectar("nombrebasedatos","5432","nombreusuario","pwdusuario","localhost");
12.
13. echo $_SESSION['gBaseDatos']->$Indice_Conexion;
14 .}
15 .}
16. catch(Exception $e)
17. {
19. echo $e->getMessage();
20. }
21. ?>

Esto lo coloco al inicio de la página y a partir de aquí viene el código HTML.

Pues bien, cuándo cargo la página, me imprime lo siguiente :

Conectar("cambiame","5432","user_cambiame","cambiame","localhost");

Si os habéis dado cuénta, es como si no reconociese el operador ->, ya q el error está en la línea nº 11 (por supuesto los nº s de línea los he puesto yo para q se distinga mejor el código, pero en la aplicación no los tengo).

Hay algo mal en el código???

Es q no me da ningún error.

Un saludo y gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Error accediendo variable de clase

Publicado por Lago GZ (13 intervenciones) el 04/02/2010 14:01:33
Somo veréis, en la función conectar del archivo BaseDatos.php, tengo 2 líneas.

La segunda no tiene sentido ya q en la primera estoy asignando ya un valor a la variable, y al ser pública no necesito devolverla.

Quitando esa línea sigue haciendo lo mismo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Error accediendo variable de clase

Publicado por leandro (27 intervenciones) el 05/02/2010 13:06:14
El error esta en la clase cuando haces:

pg_connect("dbname=" + $cNombreBD + " port=" +$cPuerto + "user=" + $cUsuario + " password=" + $cPassword + " host=" + $cHost);

La concatenacion de strings en php se hace con el punto ". " y no con el signo de "+" (el signo "+" es en javascript).

Saludos
Leandro
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Error accediendo variable de clase

Publicado por leandro (27 intervenciones) el 05/02/2010 13:11:09
Ademas de lo que te dije, tiene otro error (de sintaxis) en la misma linea.

No es : this->$Indice_Conexion
es asi: $this->Indice_Conexion

Saludos
Leandro
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Error accediendo variable de clase

Publicado por Lago GZ (13 intervenciones) el 05/02/2010 14:16:30
Muchas gracias, pues lo probaré a ver si es eso.

El tema de la concatenación ya me lo supoía, lo de la variable ni idea.

Estoy empezando con php, y q jodidos son los lenguajes interpretados.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Sigo con el error

Publicado por Lago GZ (13 intervenciones) el 08/02/2010 16:04:29
Buenas tardes.

Gracias por tu ayuda, leandro, pero sigo con el mismo problema. Es como si no reconociera la función Conectar de la clase BaseDatos.

Algún consejo?

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Y esto es más raro todavía

Publicado por Lago GZ (13 intervenciones) el 08/02/2010 16:54:29
Si comento todo lo q hay dentro del try, me sigue ecribiendo lo mismo.

Como puede escribir algo q está comentado????!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Error accediendo variable de clase

Publicado por leandro (27 intervenciones) el 08/02/2010 16:54:53
El Siguiente codigo a mi me imprime "Leandro".

<?php class BaseDatos
{
public $Indice_Conexion;

public function Conectar($cNombreBD, $cPuerto, $cUsuario, $cPassword, $cHost)
{
$this->Indice_Conexion = "Leandro"

return $this->Indice_Conexion;
}
}


session_start();

try
{
if (!isset($_SESSION['gBasedatos']))
{
$_SESSION['gBaseDatos'] = new BaseDatos();
$_SESSION['gBaseDatos']->Conectar("nombrebasedatos","5432","nombreusuario","pwdusuario","localhost");

echo $_SESSION['gBaseDatos']->Indice_Conexion;
}
}
catch(Exception $e)
{
echo $e->getMessage();
}
?>

Por lo tanto debes de tener un error cuando invocas a la funcion que te conecta a la base
___________
pg_connect("dbname=" . $cNombreBD . " port=" .$cPuerto . "user=" . $cUsuario . " password=" . $cPassword . " host=" . $cHost);
________________


Saludos
Leandro
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Pues a mi me falla

Publicado por Lago GZ (13 intervenciones) el 08/02/2010 17:39:34
Te pongo lo q yo tengo ahora.

------------clae BaseDatos.php-----------------------------

<?php

class BaseDatos
{
public $Indice_Conexion; //Garda o índice de conexión ca base de datos.

//Función q conecta ó usuario ca base de datos.
public function Conectar($cNomeBD, $cPorto, $cUsuario, $cPassword, $cHost)
{
/*$this->Indice_Conexion = pg_connect('dbname='.$cNomeBD.' port='.$cPorto.' user='.$cUsuario.' password='.$cPassword.' host='.$cHost) or die echo('Error conectando.');*/
$this->Indice_Conexion='Pas';
}

}

?>

-------------------------index.php-------------------------

<?php
session_start();

include 'Conexion_BD/BaseDatos.php';

try
{
if (!isset($_SESSION['gBasedatos']))
{
$_SESSION['gBaseDatos'] = new BaseDatos();
$_SESSION['gBaseDatos']->Conectar('xxx','xxx','xxx','xxx','localhost');
echo $_SESSION['gBaseDatos']->Indice_Conexion;
}
}
catch(Exception $e)
{
echo $e->getMessage();
}

?>

La única diferencia q yo veo es q yo pongo el include. La clase BaseDatos.php la tengo dentro de la carpeta Conexion_BD en la raíz del sitio.

La variable $Indice_Conexion de la clase BaseDatos.php al ser pública, no tengo q devolverla dentro de la función conectar, de todas formas, lo he probado tambien asi y no me va.

Quiero decir, he copiado y pegado tu código y no me va.

Algo mal configurado en php???

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Pues a mi me falla

Publicado por leandro (27 intervenciones) el 08/02/2010 18:11:30
No entiendo por que no te funciona. Tal vez sea algo que haya que configurar en php.ini con respecto a la utilizacion de las sesiones. ( No sé).

Igualemente , nunca entendi para que guardas un objeto en la session.
Yo no guardaria un objeto en la session, de ultima guardaria los atributos.
Pero intenta hacerlo sin utilizar la session, o sea asi:

$gBaseDatos = new BaseDatos();
$gBaseDatos->Conectar('xxx','xxx','xxx','xxx','localhost');
echo $gBaseDatos->Indice_Conexion;

A ver si te anda asi.

Saludos
Leandro
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Pues a mi me falla

Publicado por Lago GZ (13 intervenciones) el 08/02/2010 19:01:59
Es q creo q me lié con el tema de las sesiones en el PHP.

Una vez se abre una conexión, no se cierra hasta q la cerramos explicitamente mediante pgsql_close() o como se llame la función, no?
Entonces lo q tengo q guardar es el índice de la conexión en la variable session para usarlo cuando me haga falta y ya.

Es q creo q es eso en lo q me lié.

Probaré como me dices a ver si lo soluciono.

Un saludo y gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Pues a mi me falla

Publicado por leandro (27 intervenciones) el 08/02/2010 19:18:57
Si es asi
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Nada, seguimos en las mismas

Publicado por Lago GZ (13 intervenciones) el 12/02/2010 12:17:11
Buenos días.

Pues lo hecho sin variables de sesión y me sale lo mismo, no reconoce la función conectar.

No entiendo pq. Será error del include?

Quería heceros una serie de preguntas a ver q opináis:

1 - Estoy creando un proyecto web tipo comercio electrónico, y mi idea era crear variables de sesión tipo objeto (en el objeto se guardaría por ejemplo el nº de productos, funciones de consulta del carrito, etc...) para carritos, datos del usuario, etc...

Lo q no me queda claro es lo de la conexión. A ver, cargo la página principal y abro la conexión, pero, al final tengo q hacer un close de la conexión,no? Entonces cada vez q quiera consultar algo tengo q volver a abrir la conexión.

Es q de otra forma, si dejo la conexión abierta y cierro el explorador, pues seguirá abierta y eso puede sobrecargar la base de datos.

Como haríais vosotros?

Sería mejor ir guardando los datos recogidos de la BD en variables de sesión y trabajar desconectado, conectando sólo para consultar o actualizar, o, por el contrario, sería conveniente tener siempre abierta la BD y controlar cuándo se cierra la ventana del explorador?

Cuál sería la mejor opción?

Un saludo y gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar