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

Funcion para actualizar datos de una BD

Estas en el tema de Funcion para actualizar datos de una BD en el foro de Frameworks y PHP orientado a objetos en Foros del Web. hola gente Tengo una funcion de actualizar datos de una bd, el problema esta que quiero modificar varios campos de un registro a la vez ...
  #1 (permalink)  
Antiguo 21/08/2011, 15:19
Avatar de kaman10  
Fecha de Ingreso: enero-2011
Ubicación: Uruguay
Mensajes: 63
Antigüedad: 13 años, 3 meses
Puntos: 1
Funcion para actualizar datos de una BD

hola gente
Tengo una funcion de actualizar datos de una bd, el problema esta que quiero modificar varios campos de un registro a la vez pero no me permite solo lo quedo hacer de una por vez.
Ejemplo:
Código PHP:
$objeto->modificar('usuario', array(direccion=>'Juan Perez 123'), ' id = 27'); 
Esta llamada funciona bien y me hace la actualizacion.

Código PHP:
$objeto->modificar('usuario', array(direccion=>'Juan Perez 123''email=>'juan@mail.com'), 'idUsuario 27); 
Esta llamada a la funcion no la ejecuta para estos dos campos.
Si imprimo el array queda asi:

direccion, email = "Juan Perez 123", "[email protected]" por eso no lo actualiza.

Aqui les muestro la funcion para ver que cambios puedo hacerle para que me tome los campos y valores por separado.

Código PHP:
function modificar($tabla ''$c = Array(), $cond '') {
    
// Verifico si hay tabla
         
if ($tabla == ''){
             throw new 
Exception('Definir tabla en: modificar([tabla],...)');
             return 
false;
        }
         
$campo '';
         
$valor '';
         
$sqls 'UPDATE '.$tabla.'SET {!CAMPOS = !VALORES}'.' WHERE'.$cond;// aca esta el dilema creo    
    
    
foreach($c as $k => $v) {
        
$campo .= $k.', '
        
$valor .= '"'.$v.'", '
    }

    
$campo substr($campo0strlen($campo) -2);
    
$valor substr($valor0strlen($valor) -2);
    
    
$sqls str_replace('{!CAMPOS'$campo$sqls);
    
$sqls str_replace('!VALORES}'$valor$sqls);

    
$res mysql_query($sqls); 

Última edición por kaman10; 21/08/2011 a las 15:22 Razón: Siempre reviso para que todo este bien y no tenga errores, y para que la respuesta sea la que estoy consultando.
  #2 (permalink)  
Antiguo 21/08/2011, 16:42
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Funcion para actualizar datos de una BD

La logica de como actualizas esta mal, reemplazas lo que dice: !CAMPOS por TODOS los campos y luego reemplazas !VALORES por todos los valores a la vez. Debes hacer:

Código PHP:
Ver original
  1. $sql = "UPDATE tabla SET {!ACTUALIZACIONES} WHERE blahblahblah = bleh";
  2. $string = array();
  3. foreach($c as $campo => $valor) {
  4.   $string[] = "$campo = '$valor'";
  5. }
  6. $nuevo = implode(", ", $string);
  7. $sql = str_replace("{!ACTUALIZACIONES}", $nuevo, $sql);
  8. echo $sql;
  #3 (permalink)  
Antiguo 21/08/2011, 17:58
Avatar de kaman10  
Fecha de Ingreso: enero-2011
Ubicación: Uruguay
Mensajes: 63
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: Funcion para actualizar datos de una BD

Muchas gracias por la ayuda y tu tiempo Ronruby.
Funciona de maravillas, veo que agregaste un array mas. ¿No es mucho pedir mas o menos me expliques la idea?
Igual gracias y un abrazo.
  #4 (permalink)  
Antiguo 21/08/2011, 20:15
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Funcion para actualizar datos de una BD

Lo que voy haciendo es que por cada campo que haya, voy construyendo la consulta. El array que puse luego de leer todo estara mas o menos asi:
$string = array("campo1 = 'valor1'", "campo2 = 'valor2'");
Pego los resultados de ese array usando implode usando la "," (coma) como pegamento y luego lo añado a la consulta para que quede:
UPDATE table SET campo1 = 'valor1', campo2 = 'valor2'
  #5 (permalink)  
Antiguo 22/08/2011, 20:46
Avatar de kaman10  
Fecha de Ingreso: enero-2011
Ubicación: Uruguay
Mensajes: 63
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: Funcion para actualizar datos de una BD

Gracias Ronruby por la aclaracion y la ayuda en la resolucion del problema.
Un abrazo.

Etiquetas: bd, funcion, mysql, php, tabla
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 00:44.