Foros del Web » Programando para Internet » PHP »

Actualización de registros

Estas en el tema de Actualización de registros en el foro de PHP en Foros del Web. Hola: Estoy intentando hacer una actualización de unos registros en una base de datos. Consiste en que un usuario pueda modificar sus datos. Para ello, ...
  #1 (permalink)  
Antiguo 11/08/2010, 19:19
Avatar de Alun  
Fecha de Ingreso: diciembre-2009
Ubicación: Liverpool
Mensajes: 140
Antigüedad: 14 años, 3 meses
Puntos: 4
Actualización de registros

Hola:

Estoy intentando hacer una actualización de unos registros en una base de datos. Consiste en que un usuario pueda modificar sus datos. Para ello, he puesto un formulario con un cuadro por cada dato editable, y los mando otro archivo donde se supone tendría que hacerse la actualización. El problema es que, aunque la página me responde que se ha actualizado todo correctamente, cuando miro la base de datos todo sigue igual.

He probado a hacer la actualización de cada campo por separado, y he conseguido que se actualice el prmier campo, y al hacerlas todas en un bucle he logrado que me diga que los tres primeros registros se actualizan bien, y el resto falla, pero nada cambia. Este es el código:


Código PHP:
//Conexión con la base de datos
//..
$result=mysql_fetch_row($sql);
$x=array(0=>'user','pwd','nombre','surname1','surname2','mail','phone');//creo un array cuyos valores son los nombres de los campos del formulario
foreach($x as $post)
{
  if(isset(
$_POST[$post]))
  {
    
$update 'update usuarios set '.$post.' = "'.$_POST[$post].'" where user = "'.$_SESSION['nombre'].'" and pwd = "'.$_SESSION['pwd'].'";';
    
$fin mysql_query($update);
    if(
$update)
    {
      echo 
'Actualización exitosa<br>';
    }
    else
    {
      echo 
'Actualización fallida<br>';
    }
  }

Dudaba sobre si el fallo era algo relacionado con las variables de sesión, pero las he comprobado y son correctas, así que ya me he perdido por completo.

Gracias por la ayuda.
  #2 (permalink)  
Antiguo 11/08/2010, 20:00
Avatar de ElJavista
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: Lima Perú
Mensajes: 2.231
Antigüedad: 17 años
Puntos: 67
Respuesta: Actualización de registros

En primer lugar veo innecesario actualizar campo por campo, eso haría demasiadas llamadas al servidor MySQL, basta con una sola sentencia. Inténtalo de nuevo, solo mediante una consulta de actualización, pero esta vez imprime la consulta para que veas qué puede tener mal y si es necesario ejecútala en la consula del MySQL o en el phpMyAdmin (si lo utilizas). Por otra parte, esto si está muy mal:

Código:
if($update) 
    { 
      echo 'Actualización exitosa<br>'; 
    } 
    else 
    { 
      echo 'Actualización fallida<br>'; 
    }
$update es tu sentencia sql no el resultado de la consulta de actualización, si haces eso, siempre va a sali verdadero porque $update siempre es una cadena no nula, lo cual es equivalente a true. Ya te habrás dado cuenta que debiste hacer esto:

Código:
if ($fin) {
    echo 'Actualización exitosa<br>'; 
} else {
    echo 'Actualización fallida<br>'; 

}
  #3 (permalink)  
Antiguo 12/08/2010, 04:30
Avatar de Alun  
Fecha de Ingreso: diciembre-2009
Ubicación: Liverpool
Mensajes: 140
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: Actualización de registros

Gracias por responder:

Bueno, del fallo de la variable me di cuenta mientras releía el mensaje después de postear. Tengo que quitarme la manía de escribirlos a mano, y usar más copiar/pegar. En el código aparece tal y como lo pusiste abajo.

Por otro lado, no había caido en probarlo fuera de php. Voy a probarlo, y comento con lo que sea.

Muchas gracias por la ayuda.
  #4 (permalink)  
Antiguo 12/08/2010, 04:54
Avatar de Alun  
Fecha de Ingreso: diciembre-2009
Ubicación: Liverpool
Mensajes: 140
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: Actualización de registros

Hola de nuevo:

Acabo de probarlo desde la consola de mysql (utilizo xampp, por si sirve de algo ponerlo), y efectivamente, esa consulta ejecutada de uno en uno modifica los registros correctamente, aunque, como dijiste, actualizarlos en uno en uno iba a ser un poco tedioso y sobrecargante para el servidor.

Por otra parte, me he dado cuenta de otro fallo: en el formulario, tengo algunos campos con nombres distintos de como aparecen en la base de datos, sea el caso de los apellidos, que en el formulario aparecen como "surname1" y "surname2", y en la base de datos figuran como "apellido1" y "apellido2". Estos eran algunos de los campos en los que daba error la actualización. Los he escrito correctamente, pero ahora no solo no me muestra un error, sino que ni siquiera habla de ellos, como si no se hubieran recibido.

Muchas gracias por la ayuda.
  #5 (permalink)  
Antiguo 12/08/2010, 06:07
Avatar de ElJavista
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: Lima Perú
Mensajes: 2.231
Antigüedad: 17 años
Puntos: 67
Respuesta: Actualización de registros

Podrías poner algo de tu código para ver que pasa.
  #6 (permalink)  
Antiguo 12/08/2010, 06:38
Avatar de Alun  
Fecha de Ingreso: diciembre-2009
Ubicación: Liverpool
Mensajes: 140
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: Actualización de registros

Bien, esto es el código tal y como está ahora:

El formulario de actualización:

edit_account.php:
Código PHP:
//...
<form action="update_account.php?user=<?php echo $_SESSION['nombre']; ?>" method="post" name="update_account">
Nombre de usuario: <?php echo $result[0]; ?><br>
<input type="text" name="user"><br>
Contraseña: <?php echo md5($result[1]); ?><br>
<input type="password" name="pwd"><br>
Nombre: <?php echo $result[2]; ?><br>
<input type="text" name="nombre"><br>
Apellido 1: <?php echo $result[3]; ?><br>
<input type="text" name="apellido1"><br>
Apellido 2: <?php echo $result[4]; ?><br>
<input type="text" name="apellido2"><br>
email: <?php echo $result[5]; ?><br>
<input type="text" name="email"><br>
Teléfono: <?php echo $result[6]; ?><br>
<input type="text" name="telefono"><br>
<input type="submit" value="Actualizar datos">
</form>
//...

y aquí la página de recepción de datos:

update_account.php:
Código PHP:
//...
$result=mysql_fetch_row($sql);
$x=array(0=>'user','pwd','nombre','surname1','surname2','mail','phone');//creo un array cuyos valores son los nombres de los campos del formulario
foreach($x as $post)
{
 if(isset(
$_POST[$post]))
 {
  
$update 'update usuarios set '.$post.' = "'.$_POST[$post].'" where user = "'.$_SESSION['nombre'].'" and pwd = "'.$_SESSION['pwd'].'";';
  
$fin mysql_query($update);
  if(
$fin)
  {
   echo 
'Actualización exitosa<br>';
  }
  else
  {
   echo 
'Actualización fallida<br>';
  }
 }
}
//... 
  #7 (permalink)  
Antiguo 12/08/2010, 06:53
Avatar de ElJavista
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: Lima Perú
Mensajes: 2.231
Antigüedad: 17 años
Puntos: 67
Respuesta: Actualización de registros

Espero que esta vez si hayas copiado y pegado. Veo que no haz cambiado nada, que continúas intentando cargar campo por campo, por otra parte veo en el formulario los campos: apellido1 y apellido2, pero en el PHP está surname1 y surname2. Ahora bien, que gracia imprimir los resultados de una consulta mediante índices numéricos, me refiero a esto:

Nombre: <?php echo $result[2]; ?><br>

Si tranquilamente se puede hacer mediante el nombre del campo, siendo así más entendible. En fin. Intenta hacer la consulta de actualización con una sola sentencia, pruebala y si te falla pones tu código para ver que se puede corregir. Suerte!
  #8 (permalink)  
Antiguo 12/08/2010, 08:01
Avatar de Alun  
Fecha de Ingreso: diciembre-2009
Ubicación: Liverpool
Mensajes: 140
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: Actualización de registros

He encontrado algo: tenía la sospecha de que había algún fallo con las variables de sesión. Efectivamente, al imprimir $_SESSION['pwd'] en el formulario, la contraseña aparece bien, pero al llevármela a la página de actualización, la imprimo y aparece una contraseña que no tiene nada que ver. Evidentemente, si no hay un registro en la base de datos en el que coincidan la contraseña y el nombre, no se va a actualizar nada. Lo mejor es que la he intentado pasar mediante GET, y nada, sigue cambiada. voy a ver dónde ocurre ese cambio y posteo.
  #9 (permalink)  
Antiguo 13/08/2010, 15:25
Avatar de Alun  
Fecha de Ingreso: diciembre-2009
Ubicación: Liverpool
Mensajes: 140
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: Actualización de registros

Sigo sin encontrar el sitio donde se cambia el valor de la variable. Vi que en alguna página tengo una variable global que se llama "$pwd", y que sospecho que puede crear conflictos, así que he cambiado $_SESSION['pwd'] a $_SESSION['pass'], pero nada, aun así sigue cambiándose el valor. ¿Alguna idea de por qué pasa esto?

Muchas gracias.
  #10 (permalink)  
Antiguo 13/08/2010, 15:30
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 13 años, 11 meses
Puntos: 461
Respuesta: Actualización de registros

donde llenas la variable $_SESSION['pwd']?? en algun otro sitio le asignas valor?? ya quepuede q este iendo a un sitio donde le des otro valor y por eso te est dando el error
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #11 (permalink)  
Antiguo 13/08/2010, 15:45
Avatar de Alun  
Fecha de Ingreso: diciembre-2009
Ubicación: Liverpool
Mensajes: 140
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: Actualización de registros

Hola, carlos:

Pues en principio, solamente le asigno valor en la página de identificación:

Código PHP:
Ver original
  1. if($sql)
  2. {
  3.  $result=mysql_fetch_row($sql);
  4.  if($result)
  5.  {     
  6.   echo "Has sido identificado correctamente, $result[0], con contraseña $result[1]<br>";
  7.   $_SESSION['nombre']=$result[0];
  8.   $_SESSION['pass'] = $result[1]; //como dije arriba, ahora es $_SESSION['pass']
  9.   echo $_SESSION['nombre'].$_SESSION['pass'].'<br>'; //aquí la imprimo para comprobar que es correcta. Es correcta.
  10.   echo '<a href=".">Volver al índice</a>';
  11.  }
  12. }

Después de comprobar que se cambia, le he asignado de nuevo un valor en la página que contiene el formulario de actualización:

Código PHP:
Ver original
  1. //...
  2. $sql=mysql_query('select * from usuarios where user="'.$_GET['user'].'";',$conex) or die(mysql_error());
  3. if($sql)
  4. {
  5.  $result=mysql_fetch_row($sql);
  6.  if($result)
  7.  {
  8.   $_SESSION['pass'] = $result[1];
  9.   echo $_SESSION['pass'].'<br>';
  10. //...

Justo después, la imprimo, y sale correcta. No obstante, al pasarla a la página donde se actualiza la BD mediante $_SESSION (antes tampoco se pasaba mediante $_GET, ahora sí), aparece cambiada. incluso he forzado que tenga el valor correcto de esta forma:

Código Javascript:
Ver original
  1. function update_account()
  2. {
  3. <?php
  4. $passw = mysql_query('select pwd from usuarios where user like "'.$_SESSION['nombre'].'";',$conexion);
  5. $final = mysql_fetch_row($passw);
  6. $_SESSION['pass'] = $final[0];
  7. ?>
  8. return true;
  9. }

Código PHP:
Ver original
  1. <form action="update_account.php?user=<?php echo $_SESSION['nombre']; ?>&data=<?php echo $_SESSION['pass']; ?>" method="post" name="update_account" onSubmit="update_account();">

y luego en la página de actualización, justo después de iniciar una sesión, hago esto:

Código PHP:
Ver original
  1. $_SESSION['pass'] = $_GET['data'];

Pero nada, en el momento de actualizar, aparece cambiada.


EDITO:

He observado algo curioso: esa variable toma el valor de la contraseña que he asignado a mysql.
  #12 (permalink)  
Antiguo 14/08/2010, 05:21
Avatar de Alun  
Fecha de Ingreso: diciembre-2009
Ubicación: Liverpool
Mensajes: 140
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: Actualización de registros

Un nuevo dato: tenía session.use_trans_sid puesto a 1. Lo he colocado a 0, y ahora la variable $_SESSION['pass'] toma un valor vacío.

Etiquetas: registros
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 18:56.