Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Problema: Fatal error: Call to a member function getConexionV() on a non-object

Estas en el tema de Problema: Fatal error: Call to a member function getConexionV() on a non-object en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Buenas lo que pasa es que tengo una clase administrador y esta se trata de conectar a la base de datos el codigo es este: ...
  #1 (permalink)  
Antiguo 21/06/2008, 14:25
 
Fecha de Ingreso: mayo-2008
Ubicación: Sevilla - España
Mensajes: 140
Antigüedad: 15 años, 10 meses
Puntos: 1
Problema: Fatal error: Call to a member function getConexionV() on a non-object

Buenas lo que pasa es que tengo una clase administrador y esta se trata de conectar a la base de datos el codigo es este:
Código PHP:
<?php 
include("../Modelo/conectar.php");

class 
Administrador{

Var 
$Nombre;
var 
$Apellido;
var 
$Cedula;
var 
$Direccion;
var 
$Telefono;
var 
$Celular;
var 
$Nick;
var 
$Contrasena;

function 
Administrador(){
}

function 
setNombre($Nombre2){
$this->Nombre=$Nombre2;
}
function 
setApellido($Apellido2){
$this->Apellido=$Apellido2;
}
function 
setDireccion($Direccion2){
$this->Direccion=$Direccion2;
}
function 
setCedula($Cedula2){
$this->Cedula=$Cedula2;
}
function 
setTelefono($Telefono2){
$this->Telefono=$Telefono2;
}
function 
setCelular($Celular2){
$this->Celular=$Celular2;
}
function 
setContrasena($Contrasena2){
$this->Contrasena=$Contrasena2;
}
function 
setNick($Nick2){
$this->Nick=$Nick2;
}

function 
getNombre(){
return 
$this->Nombre;
}
function 
getApellido(){
return 
$this->Apellido;
}
function 
getDireccion(){
return 
$this->Direccion;
}
function 
getCedula(){
return 
$this->Cedula;
}
function 
getTelefono(){
return 
$this->Telefono;
}
function 
getCelular(){
return 
$this->Celular;
}
function 
getContrasena(){
return 
$this->Contrasena;
}
function 
getNick(){
return 
$this->Nick;
}

function 
LoguinAdmin($usua,$con){
$bd = new conectar();
$bd->conectarse();
$sw=0;
 
$sql mysql_query("SELECT * FROM administrador WHERE Nick= '".$usua."' AND  Contrasena= '".$con."'",$bd->getConexionV());
       while(
$resp=mysql_fetch_row($sql)){ 
       for(
$j=0;$j<mysql_num_fields($sql);$j++){
              
$sw=1;
                
$this->setNick($resp[0]);
                
$this->setContrasena($resp[1]); 
                
$this->setNombre($resp[2]); 
                
$this->setApellido($resp[3]);
                
$this->setCedula($resp[4]); 
           }
            }    
            return 
$sw;
}

}
como pueden ver incluyo la clse conectar pero me genera el siguiente error

Fatal error: Call to a member function getConexionV() on a non-object in C:\AppServ\www\STR\Controladores\Administrador.php on line 72
cual sera el problema podrian ayudarme
DIos los bendiga
  #2 (permalink)  
Antiguo 21/06/2008, 17:05
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Problema: Fatal error: Call to a member function getConexionV() on a non-o

Prueba esto :

Código PHP:


function LoguinAdmin($usua,$con){ 
global 
$bd;

// Resto del código... 
PD : Recuerda también crear la instancia en el archivo conectar.php...

Nos vemos. Avisas cualquier cosa.
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #3 (permalink)  
Antiguo 21/06/2008, 21:53
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 10 meses
Puntos: 32
Respuesta: Problema: Fatal error: Call to a member function getConexionV() on a non-o

No olvidar: las variables globales están "deprecadas", no usar.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #4 (permalink)  
Antiguo 20/07/2008, 16:17
 
Fecha de Ingreso: julio-2008
Mensajes: 17
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Problema: Fatal error: Call to a member function getConexionV() on a non-o

hola yo tengo el mismo problema con la llamada mediante un objeto a una funcion dentro de otra algo muy similar a lo que el posteo por eso no lo pongo me han dicho tambien que las variables globales no las debo usar si me pudiera dar una sugerencia, pense implementarlo mediante un singleton en la clase base de datos pero bueno si usted sugiriera algo pues agradecido
  #5 (permalink)  
Antiguo 20/07/2008, 18:35
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 10 meses
Puntos: 32
Respuesta: Problema: Fatal error: Call to a member function getConexionV() on a non-o

Cita:
Iniciado por jufena84 Ver Mensaje
Buenas lo que pasa es que tengo una clase administrador y esta se trata de conectar a la base de datos el codigo es este:

como pueden ver incluyo la clse conectar pero me genera el siguiente error

Fatal error: Call to a member function getConexionV() on a non-object in C:\AppServ\www\STR\Controladores\Administrador.php on line 72
cual sera el problema podrian ayudarme
DIos los bendiga
Varias
  1. ¿Cual es exactamente la línea 72?
  2. ¿Existe el método que estás invocando?
  3. Pasa a PHP5, PHP4 está "obsoleto"
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #6 (permalink)  
Antiguo 20/07/2008, 18:38
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 10 meses
Puntos: 32
Respuesta: Problema: Fatal error: Call to a member function getConexionV() on a non-o

Cita:
Iniciado por sukaku Ver Mensaje
hola yo tengo el mismo problema con la llamada mediante un objeto a una funcion dentro de otra algo muy similar a lo que el posteo por eso no lo pongo me han dicho tambien que las variables globales no las debo usar si me pudiera dar una sugerencia, pense implementarlo mediante un singleton en la clase base de datos pero bueno si usted sugiriera algo pues agradecido
Evitar usar globales no es algo dramático.

No repitas términos si no sabes para qué sirven.

Vamos por partes, tira un ejemplo de código de lo que quieres hacer.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #7 (permalink)  
Antiguo 20/07/2008, 23:03
 
Fecha de Ingreso: julio-2008
Mensajes: 17
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Problema: Fatal error: Call to a member function getConexionV() on a non-o

<?php
session_start();
include("includes/Coneccion_BD.php");
require("xajax/xajax.inc.php");
$xajax = new xajax();
$b = new Coneccion_BD('root','root','localhost','ajax');
$b->Coneccion();

function BD($datos)
{
global $b;
$num = $datos['nombre'];
$sql = "SELECT * FROM `usuario` WHERE `usuario`.`nombre`= '$num' ";
$result =$b->Consultar_BD($sql);
$row = mysql_fetch_array($result);
$salida = '<input type="text" value = '.$row[0].'>';
$respuesta = new xajaxResponse();
//escribimos en la capa con id="respuesta" el texto que aparece en $salida
$respuesta->addAssign("respuesta","innerHTML",$salida);

//tenemos que devolver la instanciación del objeto xajaxResponse
return $respuesta;
}

$xajax->registerFunction("BD");
$xajax->processRequests();

?>


Esto es un ejemplo bien sencillo el cual luego pienso complicarlo como haga falta pero en escencia seria lo mismo esto me trabajo pero si se te das cuenta uso dentro de la funcion la variable global, mi pregunta fue como puedo hacer para que una ves que yo inicialice mi objeto base de datos lo pueda utilizar sin tener que declararlo global. Es todo
  #8 (permalink)  
Antiguo 21/07/2008, 14:08
 
Fecha de Ingreso: febrero-2003
Ubicación: La serena
Mensajes: 144
Antigüedad: 21 años, 2 meses
Puntos: 0
Respuesta: Problema: Fatal error: Call to a member function getConexionV() on a non-o

Puedes mostrar la clase de conexion?
__________________
Hoy dia aprendí algo nuevo.
  #9 (permalink)  
Antiguo 21/07/2008, 19:03
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 10 meses
Puntos: 32
Respuesta: Problema: Fatal error: Call to a member function getConexionV() on a non-o

Simplemente create una clase de persistencia, y el archivo que la necesites, incluyes, creas la instancia y la usas.

No necesitas la variable global para nada.

Si quieres disminuir la cantidad de conexiones, puedes crear un singleton dentro de la clase de persistencia (si es que realmente lo necesitas).

Nota: el singleton solo te funcionará por archivo php, donde tendrás una sola instancia, pero no para todo tu sistema, ya que tu instancia no persistirá más allá.

PD: Conexión va con X, la ortografía es tan importante como la sintaxis.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #10 (permalink)  
Antiguo 21/07/2008, 21:46
 
Fecha de Ingreso: julio-2008
Mensajes: 17
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Problema: Fatal error: Call to a member function getConexionV() on a non-o

<?
class Coneccion_BD
{
private $usuario;
private $contraseña;
private $host;
private $base_datos;
private $coneccion;

public function __construct($pusuario,$pcontraseña,$phost,$pbase_d atos)// inicializa los datos
{
$this->usuario = $pusuario;
$this->contraseña = $pcontraseña;
$this->host = $phost;
$this->base_datos = $pbase_datos;
}

public function Coneccion()//establece la coneccion
{
if ($this->host != "" or $this->usuario != "" or $this->contraseña != "")
{
$this->coneccion= mysql_connect($this->host,$this->usuario,$this->contraseña);
if(mysql_errno())
{
return false;
}
return true;
}
else
exit();
}

public function Consultar_BD($pquery)
{


if(!mysql_select_db($this->base_datos))
echo mysql_errno($this->coneccion);

$result = mysql_query($pquery);
if (!$result)
return 1; //error
else
return $result; // correcto

}
};


?>


Este es el codigo de mi clase para conectarme a la base de datos es bastante sencilla, me parece que es lo que me sugieres cuando dices que me cree una clase persistencia cree una instancia y la utilice pero eso precisamente es lo que hago y sin embargo si no declaro global la variable en la que guardo el objeto me muestra el mensaje diciendo que llamo a la funcion con una variable que no es objeto de la clase. Este es el codigo fijate que comentarie al principio la declaracion de global y ahi viene el problema.
A si se que se escribe con x pero la historia es larga y personal, gracias de antemano.

<?php
include("includes/Coneccion_BD.php");
require("xajax/xajax.inc.php");
$xajax = new xajax();
$b = new Coneccion_BD('root','root','localhost','ajax');
$b->Coneccion();

function BD($datos)
{
//global $b;
$num = $datos['nombre'];
$sql = "SELECT * FROM `usuario` WHERE `usuario`.`nombre`= '$num' ";
$result =$b->Consultar_BD($sql);
$row = mysql_fetch_array($result);
$salida = '<input type="text" value = '.$row[0].'>';
$respuesta = new xajaxResponse();
//escribimos en la capa con id="respuesta" el texto que aparece en $salida
$respuesta->addAssign("respuesta","innerHTML",$salida);

//tenemos que devolver la instanciación del objeto xajaxResponse
return $respuesta;
}

$xajax->registerFunction("BD");
$xajax->processRequests();

?>


<head>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<?php
$xajax->printJavascript("xajax/");
?>
</head>

<body>
<div id="respuesta">
<form name="formu">
<input name="nombre" type="text" />
<input type="button" value="Mandar" onClick="xajax_BD(xajax.getFormValues('formu'))" />
</form>
</div>
</body>
</html>
  #11 (permalink)  
Antiguo 22/07/2008, 21:49
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 10 meses
Puntos: 32
Respuesta: Problema: Fatal error: Call to a member function getConexionV() on a non-o

Cita:
Este es el codigo de mi clase para conectarme a la base de datos es bastante sencilla, me parece que es lo que me sugieres cuando dices que me cree una clase persistencia cree una instancia y la utilice pero eso precisamente es lo que hago y sin embargo si no declaro global la variable en la que guardo el objeto me muestra el mensaje diciendo que llamo a la funcion con una variable que no es objeto de la clase. Este es el codigo fijate que comentarie al principio la declaracion de global y ahi viene el problema.
A si se que se escribe con x pero la historia es larga y personal, gracias de antemano.
Bueno, armé a partir de tu código otro ejemplo (lo hice rápido, pueden haber errores) y siguiendo estándar de codificación de Zend.

Código PHP:
<?
class BaseDeDatos
{
    private 
$_usuario;
    private 
$_contraseña;
    private 
$_host;
    private 
$_baseDatos;
    private 
$_conexion;

    public function 
__construct($usuario 'root',$contraseña 'root'$host 'localhost'$base_datos 'ajax')
    {
        
$this->_usuario     $usuario;
        
$this->_contraseña  $contraseña;
        
$this->_host        $host;
        
$this->_baseDatos   $base_datos;
        
        
$this->_conectar();
        
    }
    private function 
_conectar()
    {
       if (
$this->_host != '' or $this->_usuario != '' or $this->_contraseña != ''){
           
$this->_conexion mysql_connect($this->_host,$this->_usuario,$this->_contraseña);
           if( 
mysql_errno() ){
               throw new 
Exception('Error de conexión');
           }
           if(!
mysql_select_db($this->baseDatos)){
               throw new 
Exception('Error al seleccionar base');
           }            
       }else{
           throw new 
Exception('Datos insuficientes');
       }       
    }    
    public function 
consulta($sql)
    {
        
$result mysql_query($sql);
        if (!
$result){
           throw new 
Exception('Error en consulta');
        }    
        return 
$result;    
    }
    public function 
getFila($sql)
    {
       
$result $this->consulta($sql);
       return 
mysql_fetch_array($result);
    }
    public function 
getTodo($sql)
    {
       
$result $this->consulta($sql);
       while (
$row mysql_fetch_array($resultMYSQL_ASSOC)) {
            
$ret[] = $row;
       }
       return 
$ret;
    }
    
}

include(
"includes/BaseDeDatos.php");
require(
"xajax/xajax.inc.php");

$xajax = new xajax();
$b = new BaseDeDatos();

$num $datos['nombre'];
$sql "SELECT * FROM `usuario` WHERE `usuario`.`nombre`= '$num' ";

$row $b->getFila($sql);

$salida '<input type="text" value = '.$row[0].'>';
?>
Al final te hago un ejemplo donde no necesitas globales ni tampoco exponer sintaxis de bajo nivel que queden atadas al motor de base de datos de turno (mysql). Si mañana cambias de base o usas otro sistema, puedes esconder todo dentro de tu clase, y el resto del sistema no se verá impactado.

Espero se entienda. Si tiene errores, ya son de deberes
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #12 (permalink)  
Antiguo 23/07/2008, 18:43
 
Fecha de Ingreso: julio-2008
Mensajes: 17
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Problema: Fatal error: Call to a member function getConexionV() on a non-o

te entiendo enrique pero sucede que en la variable $datos yo lo que almaceno son los datos entrados por el usuario mediante el formulario por lo cual en el evento onClick del boton debo llamar mediante xajax a una funcion que recibira como parametros esos datos a modo de arreglo de ahi que me haga falta tener la funcion, si me entiendes y tienes una sugerencia me dices de todas maneras me quede con tu clase conexion.
  #13 (permalink)  
Antiguo 23/07/2008, 21:27
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 10 meses
Puntos: 32
Respuesta: Problema: Fatal error: Call to a member function getConexionV() on a non-o

Cita:
Iniciado por sukaku Ver Mensaje
te entiendo enrique pero sucede que en la variable $datos yo lo que almaceno son los datos entrados por el usuario mediante el formulario por lo cual en el evento onClick del boton debo llamar mediante xajax a una funcion que recibira como parametros esos datos a modo de arreglo de ahi que me haga falta tener la funcion, si me entiendes y tienes una sugerencia me dices de todas maneras me quede con tu clase conexion.
¿Y cual es el problema?

Si quieres dejar la función, internamente puedes crear la instancia de BaseDeDatos y usarla, no necesitas el global.

Sugerencia: xajax lo usé hace muchos años con mis primeros Ajax, y la verdad que prefiero un modelo más del tipo Mootools, donde con solo incluir un js y luego invocando una url tienes una comunicación contra el server.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #14 (permalink)  
Antiguo 24/07/2008, 17:30
 
Fecha de Ingreso: julio-2008
Mensajes: 17
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Problema: Fatal error: Call to a member function getConexionV() on a non-o

si mira el problema esta en el momento en que quiera mas de una funcion y entonces en cada una de ellas tendria que instanciar el objeto y no es practico ese es el problema por el cual surgio mi pregunta, lo del xajax me pasa igual te paso a ti recien comienzo con ajax hace menos de un mes y me parecio que xajax era bueno para comenzar por lo menos hasta familiarizarme.
Enrique otra pregunta mira yo tengo este semestre que comenzar mi tesis de ahi que comenzara a ver algo de ajax, entonces tengo que hacer un sistema web no algo mas complejo que los que acostumbro a hacer en la escuela, yo quisiera que me sugirieras que patron puedo utilizar para mi sistema si MVC o ncapas u otro que ofresca ventajas para la POO, gracias de antemano. Si tienes algo que me sirva de ejemplo te lo agradesco o cualquier tutoria para comenzar a decidirme por un patron para mi sistema, tu ayuda me a servido.
  #15 (permalink)  
Antiguo 25/07/2008, 07:26
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 10 meses
Puntos: 32
Respuesta: Problema: Fatal error: Call to a member function getConexionV() on a non-o

Cita:
si mira el problema esta en el momento en que quiera mas de una funcion y entonces en cada una de ellas tendria que instanciar el objeto y no es practico
¿No es práctico? Así es como debe funcionar. Si necesitas una conexión a la base, creas la instancia y le solicitas información.

Cita:
ese es el problema por el cual surgio mi pregunta, lo del xajax me pasa igual te paso a ti recien comienzo con ajax hace menos de un mes y me parecio que xajax era bueno para comenzar por lo menos hasta familiarizarme.
Sugerencia, pasa a un modelo más tipo Mootools, se simplifica mucho la operativa y todo queda del lado del código de la interfaz.

Cita:
Enrique otra pregunta mira yo tengo este semestre que comenzar mi tesis de ahi que comenzara a ver algo de ajax, entonces tengo que hacer un sistema web no algo mas complejo que los que acostumbro a hacer en la escuela, yo quisiera que me sugirieras que patron puedo utilizar para mi sistema si MVC o ncapas u otro que ofresca ventajas para la POO, gracias de antemano.
Te diría que lo hagas con Zend Framework, y aprovechas la implementación de MVC.

Cita:
Si tienes algo que me sirva de ejemplo te lo agradesco o cualquier tutoria para comenzar a decidirme por un patron para mi sistema, tu ayuda me a servido.
Me preocupa que busques un patrón por el patrón en sí mismo. Los patrones son para aplicarlos a un problema particular y ajustarlos luego a tu necesidad. Primero busca el problema que quieres solucionar, y luego decidir si necesariamente se justifica el uso de un patrón (ya que aplicarlo por aplicarlo no es una buena decisión).
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:29.