Retroceder   Foros del Web > Programación para sitios web > PHP > PHP orientado a objetos

Respuesta
 
Herramientas Desplegado
Antiguo 26-may-2005, 15:04   #1 (permalink)
hormiga12 ha deshabilitado el karma
 
Fecha de Ingreso: enero-2005
Mensajes: 5
problema al intentar modificar datos en una base de datos

No consigo alterar los datos de la base de datos y no encuentro el error por ningún lado.(de hecho al ejecutarlo no sale ningún mensaje de error) Al introducir los datos en el archivo usr, estos no modifican para nada los datos existentes en la base de datos, os dejo el trozo de código para ver si me podéis ayudar (Esta completo, por lo que podeis intentar ejecutarlo)
<?php
class Usuarios
{
private $_usuario;
private $_ConesionBaseDeDatos;
private $_CambiarPropiedades;
//.................................................. .......................
//.................................................. .......................
public function __construct($usuarioID)
{
$this->_CambiarPropiedades = array ();
$this->_usuario = array();
$this->_usuario['id'] = null;
$this->_usuario['nombre'] = null;
$this->_usuario['nick'] = null;
//.......................Conexión base de datos..............................
//.................................................. .........................
$this->_ConesionBaseDeDatos = mysql_connect('localhost','root','titi');
if (!is_resource ($this->_ConesionBaseDeDatos))
{
throw new Exception("Desconectada base de datos");
}
$connected = mysql_select_db('usuarios',$this->_ConesionBaseDeDatos);
if(!$connected)
{
throw new Exception("Fallo conexion usuarios");
}
$sql = "select * from titi where id = $usuarioID";
$rs = mysql_query($sql, $this->_ConesionBaseDeDatos);
if(! mysql_num_rows($rs))
{
throw new Exception ("No existe el usuario en la base de datos con id = $usuarioID");
}
$row = mysql_fetch_assoc($rs);
$this->_usuario['id'] = $row['id'];
$this->_usuario['nombre'] = $row['nombre'];
$this->_usuario['nick'] = $row['nick'];
}
//.................................................. ..............................
//.................................................. ..............................

function __get ($CaracteristicasUsuario)
{
if (!array_key_exists($CaracteristicasUsuario, $this->_usuario))
throw new Exception ('dato incorrectoooooooo');
if (method_exists($this, 'get' . $CaracteristicasUsuario))
{
return call_user_func(array($this, 'get' . $CaracteristicasUsuario));
}
else
{
return $this->_usuario[$CaracteristicasUsuario];
}
}
//.................................................. ........................
//.................................................. ........................
function __set($CaracteristicasUsuario, $value)
{
if (!array_key_exists($CaracteristicasUsuario, $this->_usuario))
throw new Exception ('dato iiiiiiiiiiincorrecto');
if (method_exists($this, 'set' . $CaracteristicasUsuario))
{
return call_user_func(array($this, 'set' . $CaracteristicasUsuario),$value);
}
else
{
if($this->_usuario[$CaracteristicasUsuario] != $value && !in_array($CaracteristicasUsuario,
$this->_CambiarPropiedades))
{
return $this->_CambiarPropiedades[] = $CaracteristicasUsuario;
}
return $this->_usuario[$CaracteristicasUsuario] = $value;
}
}
//.................................................. ............................
//.................................................. ............................
function EscribirDatos()
{
print " Mi nombre es {$this->nombre}. Y mi id es {$this->id}";
}
//..............Modificar datos de la base de datos..............................
//................(supongo que el error esta aquí aunque no lo puedo //……………..asegurar................................... ............................
function __destruct()
{
if(sizeof($this->_CambiarPropiedades))
{
$sql = "UPDATE titi SET";
$setModificar = array();
foreach($this->_CambiarPropiedades as $prop)
{
$setModificar[] = "$prop = '{$this->_usuario[$prop]}'";
}
$sql .= join(', ', $setModificar);
$sql .= "WHERE titi = $this->id";
$hRes .= mysql_query($sql, $this->_ConesionBaseDeDatos);
}
mysql_close($this->_ConesionBaseDeDatos);
}
}
?>



Archivo usr
<?php
require_once('class.Usuario.php');
$obj = new Usuarios(1);
$obj->nombre = 'ggg';
$obj->EscribirDatos();


?>
Se supone que mediante $obj->nombre =”ggg” yo debería ser capaz de modificar el valor almacenado en la base de datos y hacer que apareciera dicho valor por pantalla, pero no lo consigo, al mismo tiempo se debería actualizar la base de datos con dicho valor cosa que tampoco sucede

Si necesitais alguna aclaración más pedirla
Gracias

Por cierto si elimino los return de
return $this->_CambiarPropiedades[] = $CaracteristicasUsuario;
}
return $this->_usuario[$CaracteristicasUsuario] = $value;

Si se modifican los datos por pantalla, aunque no en la base de datos
Por que sucede esto?
hormiga12 está desconectado   Responder Citando
Antiguo 09-jun-2005, 16:03   #2 (permalink)
dwaks está en el buen camino
 
Avatar de dwaks
 
Fecha de Ingreso: noviembre-2002
Ubicación: Panamá
Mensajes: 724
Bueno verfica estos detalles de poo que se dice en primer plano en:
http://www.php.net/oop

Alli hablan sobre poner _ delante del nombre de una metodo o variable.
__________________
Miembro fundador de el Grupo PHP de Panamá

Saludos,
dwaks
dwaks está desconectado   Responder Citando
Antiguo 10-jun-2005, 02:13   #3 (permalink)
Moderador PHP
jpinedo ha deshabilitado el karma
 
Avatar de jpinedo
 
Fecha de Ingreso: septiembre-2003
Ubicación: Piura
Mensajes: 2.753
Cita:
Iniciado por dwaks
Bueno verfica estos detalles de poo que se dice en primer plano en:
http://www.php.net/oop

Alli hablan sobre poner _ delante del nombre de una metodo o variable.
No se dice nada sobre poner un subguión delante, sino dos. Ahí dice que se deberían utilizar únicamente para redefinir métodos mágicos... y este es el caso. O sea que por ese lado no va el problema.
-------------------------------------
Cita:
Iniciado por hormiga12
Por cierto si elimino los return de
return $this->_CambiarPropiedades[] = $CaracteristicasUsuario;
}
return $this->_usuario[$CaracteristicasUsuario] = $value;

Si se modifican los datos por pantalla, aunque no en la base de datos
Por que sucede esto?
Recuerda que con "return" se termina la ejecución de la función en esa línea... y no parece ser lo que quieres aquí.
Lo que quieres es:
- asignar la propiedad cambiada al array "_CambiarPropiedades"
- asignar el nuevo valor para esa propiedad al array "_usuario"
Por eso no necesitas el "return"... no necesitas devolver nada. Normalmente así funcionan los "setters" como este.
-----------------------------------
Cita:
No consigo alterar los datos de la base de datos y no encuentro el error por ningún lado.
Sobre por qué no escribe en la base de datos... te diré que estás generando un SQL incorrecto. Simplemente te faltan espacios en blanco para separar cadenas que unes con ".="
Además no entiendo eso de titi=$this->id ¿Quién es "$this->id"? ... si lo comparamos con la consulta inicial, supongo que debería ser id=$this->_usuario['id']
Tu función __destruct debería ser algo así:
Código PHP:
    function __destruct(){
        if(
sizeof($this->_CambiarPropiedades)){
            
$sql "UPDATE titi SET ";
            
$setModificar = array();
            foreach(
$this->_CambiarPropiedades as $prop){
                
$setModificar[] = "$prop = '".$this->_usuario[$prop]."' ";
            }
            
$sql .= join(', '$setModificar);
            
$sql .= "WHERE id = ".$this->_usuario['id'];
            
$hRes .= mysql_query($sql$this->_ConesionBaseDeDatos);
        }
        
        
mysql_close($this->_ConesionBaseDeDatos);
    } 
Sería bueno que utilices también validadores de la consulta tal como haces en mysql_connect() y mysql_select_db(). O sea mysql_query() también podría fallar. Esto lo habrías detectado si ponías al igual que en las demás algo como:
Código PHP:
$hRes .= mysql_query($sql$this->_ConesionBaseDeDatos); or die("Error en <b>$sql</b>::".mysql_error()) 
Saludos
jpinedo está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 17:40.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93