![]() |
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? |
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. |
Cita:
------------------------------------- Cita:
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:
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: Código PHP: |
| La zona horaria es GMT -6. Ahora son las 06:22. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.