Foros del Web » Programando para Internet » PHP »

Como editar la informacion de un usuario

Estas en el tema de Como editar la informacion de un usuario en el foro de PHP en Foros del Web. Hola a todos con un amigo hice un perfil para cada usuario ahora no sabemos como hacer que cada usuario pueda editar sus datos de ...
  #1 (permalink)  
Antiguo 16/10/2011, 09:44
 
Fecha de Ingreso: septiembre-2011
Mensajes: 106
Antigüedad: 12 años, 6 meses
Puntos: 19
Como editar la informacion de un usuario

Hola a todos con un amigo hice un perfil para cada usuario ahora no sabemos como hacer que cada usuario pueda editar sus datos de perfil.

Por ahora hice una sección llamada cuenta que tiene 2 formularios uno para el nombre y uno para el url del avatar, dentro de los formularios me muestra el nombre del primer usuario y el primer url del avatar, al cambiarlos me cambia a todos los usuarios el nombre y el avatar.

Alguien podría ayudarme a arreglarlo?

Este es el formulario:

Código PHP:
Ver original
  1. <?php
  2. include ('./public/php/edit_cuenta.php');
  3.  
  4. ?>
  5.     <h2>Editar Cuenta</h2>
  6.         <form action="cuenta.php" method="post">
  7.             <p>
  8.                 <label for="usuario">Aqui el nombre de usuario</label><br />
  9.                 <input name="usuario" type="text" value="<?php echo $editcuenta['usuario']; ?>" />
  10.             </p>
  11.             <br/>
  12.             <p>
  13.                 <label for="avatar">Aqui el url de tu avatar</label><br />
  14.                 <input name="avatar" type="text" value="<?php echo $editcuenta['avatar']; ?>" />
  15.             </p>
  16.             <br/>
  17.             <p>
  18.                 <input name="submit" type="submit" value="Guardar Cambios" />
  19.             </p>
  20.         </form>

y este es el codigo php:

Código PHP:
Ver original
  1. <?php
  2.  
  3. // archivos necesarios
  4. require_once 'admin/config.php';
  5. require_once 'admin/conexion.php';
  6. require_once 'admin/esUsuario.php';
  7.  
  8. // obtengo puntero de conexion con la db
  9. $dbConn = conectar();
  10.  
  11. // verificamos que no este conectado el usuario
  12. if ( !empty( $_SESSION['usuario'] ) && !empty($_SESSION['password']) ) {
  13.     $arrUsuario = esUsuario( $_SESSION['usuario'], $_SESSION['password'], $dbConn );
  14. }
  15.  
  16. // si se envio el formulario
  17. if ( !empty($_POST['submit']) ) {
  18.    
  19.     // definimos las variables
  20.                     if ( !empty($_POST['usuario']) ) $usuario = $_POST['usuario'];
  21.                     if ( !empty($_POST['avatar']) ) $avatar = $_POST['avatar'];
  22.    
  23.     // si no hay errores registramos al usuario
  24.     if ( empty($error) ) {
  25.        
  26.     if ( empty($usuario) )  $error['usuario']       = 'Es obligatorio completar el nombre de tu usuario';
  27.        
  28. // traemos la configuracion
  29. $query = 'SELECT usuario,avatar FROM `usuarios` WHERE usuario = "' . $_POST['usuario'] . '" LIMIT 1';
  30. $resultado = mysql_query ($query, $dbConn);
  31.  
  32. if(mysql_num_rows($resultado) > 0){
  33.  
  34. // actualiza los datos del formulario en la db
  35. $query = "UPDATE usuarios SET usuario='".$_POST["usuario"]."', avatar='".$_POST["avatar"]."' ";
  36. $result = mysql_query($query, $dbConn);
  37.        
  38.     header( 'Location: cuenta.php?edit=true' );
  39.     die;
  40. }else{
  41. //inserto los datos del formulario en el db
  42. $query  = "INSERT INTO `usuarios` (usuario,avatar) VALUES ('$usuario','$avatar') ";
  43. $result = mysql_query($query, $dbConn);
  44.  
  45.     header( 'Location: cuenta.php?add=true' );
  46.     die;
  47. }
  48.        
  49.     }
  50. }
  51.  
  52. // traemos listado
  53. $query = 'SELECT usuario,avatar FROM `usuarios` LIMIT 1';
  54. $resultado = mysql_query ($query, $dbConn);
  55. $editcuenta = mysql_fetch_assoc ($resultado);
  56.  
  57. ?>

Gracias de antemano

Lo logre, tuve que añadir al select, update y insert un " WHERE $_SESSION=['$usuario'] y funciono, solo que al cambiar de nombre tengo que volver a loguearme

Última edición por ILuzbel; 16/10/2011 a las 10:40 Razón: Solucionado
  #2 (permalink)  
Antiguo 16/10/2011, 13:28
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Como editar la informacion de un usuario

Bueno, se supone que lo de cambiar nombre debe permitirse solo en casos especiales, principalmente porque confundiria a los demas usuarios y tambien a los administradores.

Comentarios:
- Estas buscando el registro del usuario actual segun la variable en $_POST, cuando deberias identificarlo por sesion y asi saber si va a ser insert o update.
- Que pasa si un usuario cambia su nombre a Admin?, creo que te va a ocasionar algunos problemas, porque no estas verificando que el nuevo nombre este disponible.
- Cuando actualices un usuario (si cambio de nombre), actualiza las variables de sesion y/o cookies para que no tengas que volver a ingresar (loguearte).
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 16/10/2011, 14:17
 
Fecha de Ingreso: septiembre-2011
Mensajes: 106
Antigüedad: 12 años, 6 meses
Puntos: 19
Respuesta: Como editar la informacion de un usuario

Cita:
Iniciado por Triby Ver Mensaje
Bueno, se supone que lo de cambiar nombre debe permitirse solo en casos especiales, principalmente porque confundiria a los demas usuarios y tambien a los administradores.

Comentarios:
- Estas buscando el registro del usuario actual segun la variable en $_POST, cuando deberias identificarlo por sesion y asi saber si va a ser insert o update.
- Que pasa si un usuario cambia su nombre a Admin?, creo que te va a ocasionar algunos problemas, porque no estas verificando que el nuevo nombre este disponible.
- Cuando actualices un usuario (si cambio de nombre), actualiza las variables de sesion y/o cookies para que no tengas que volver a ingresar (loguearte).
Tienes razon, como podria verificar si el nombre ya fue usuado para prevenir ese problema? Como puedo actualizar la sesion o cookie para no volver a loguarme?
No entendi bien el primer comentario

Espero tu respuesta y gracias por tu ayuda
  #4 (permalink)  
Antiguo 16/10/2011, 14:36
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Como editar la informacion de un usuario

1. Como prevenir si el nombre ya fue usado?
R. Haces una consulta con el nombre tecleado y que la ID no sea igual al usuario activo, supongo que tienes una columna ID para estos casos.
Ejemplo: SELECT COUNT(*) FROM usuarios WHERE usuario = $_POST['usuario'] AND id != $_SESSION['id']
Si el resultado es diferente de cero, entonces ya esta en uso.

2. Como actualizar la sesion o cookie?
R. De la misma forma que lo haces al iniciar sesion

3. Primer comentario: Identificar el usuario que esta creando/modificando?
R. Creo que en variables de sesion tienes ya si se trata de un usuario activo y sus datos.
Ejemplo:
Código PHP:
Ver original
  1. if(isset($_SESSION['usuario'])) {
  2.     // Es un usuario activo, se debe actualizar con UPDATE
  3. } else {
  4.     // Es usuario nuevo, debes ingresar los datos con INSERT
  5. }
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 16/10/2011, 15:08
 
Fecha de Ingreso: septiembre-2011
Mensajes: 106
Antigüedad: 12 años, 6 meses
Puntos: 19
Respuesta: Como editar la informacion de un usuario

Cita:
Iniciado por Triby Ver Mensaje
1. Como prevenir si el nombre ya fue usado?
R. Haces una consulta con el nombre tecleado y que la ID no sea igual al usuario activo, supongo que tienes una columna ID para estos casos.
Ejemplo: SELECT COUNT(*) FROM usuarios WHERE usuario = $_POST['usuario'] AND id != $_SESSION['id']
Si el resultado es diferente de cero, entonces ya esta en uso.

2. Como actualizar la sesion o cookie?
R. De la misma forma que lo haces al iniciar sesion

3. Primer comentario: Identificar el usuario que esta creando/modificando?
R. Creo que en variables de sesion tienes ya si se trata de un usuario activo y sus datos.
Ejemplo:
Código PHP:
Ver original
  1. if(isset($_SESSION['usuario'])) {
  2.     // Es un usuario activo, se debe actualizar con UPDATE
  3. } else {
  4.     // Es usuario nuevo, debes ingresar los datos con INSERT
  5. }
Muchas gracias por la ayuda , probare y luego te informo
  #6 (permalink)  
Antiguo 16/10/2011, 15:47
 
Fecha de Ingreso: septiembre-2011
Mensajes: 106
Antigüedad: 12 años, 6 meses
Puntos: 19
Respuesta: Como editar la informacion de un usuario

Cita:
Iniciado por Triby Ver Mensaje
1. Como prevenir si el nombre ya fue usado?
R. Haces una consulta con el nombre tecleado y que la ID no sea igual al usuario activo, supongo que tienes una columna ID para estos casos.
Ejemplo: SELECT COUNT(*) FROM usuarios WHERE usuario = $_POST['usuario'] AND id != $_SESSION['id']
Si el resultado es diferente de cero, entonces ya esta en uso.

2. Como actualizar la sesion o cookie?
R. De la misma forma que lo haces al iniciar sesion

3. Primer comentario: Identificar el usuario que esta creando/modificando?
R. Creo que en variables de sesion tienes ya si se trata de un usuario activo y sus datos.
Ejemplo:
Código PHP:
Ver original
  1. if(isset($_SESSION['usuario'])) {
  2.     // Es un usuario activo, se debe actualizar con UPDATE
  3. } else {
  4.     // Es usuario nuevo, debes ingresar los datos con INSERT
  5. }
Bueno sobre el verificar si el nombre existe y si la email existe lo añadi al registro de usuarios en este modo:

Código PHP:
Ver original
  1. // chequear si el usuario esta en la bd
  2.     $sql_chk = "SELECT usuario FROM usuarios WHERE usuario='$usuario'";
  3.     $resultado = mysql_query ($sql_chk, $dbConn) or die(mysql_error());;
  4.     $tot_chk = mysql_num_rows($resultado);
  5.     if($tot_chk > 0){
  6.     echo "Nombre de usuario no disponible";
  7.     exit();
  8.     }
  9.    
  10.     // chequear si el email esta en la bd
  11.     $sql_chk = "SELECT email FROM usuarios WHERE email='$email'";
  12.     $resultado = mysql_query ($sql_chk, $dbConn) or die(mysql_error());;
  13.     $tot_chk = mysql_num_rows($resultado);
  14.     if($tot_chk > 0){
  15.     echo "Email de usuario no disponible";
  16.     exit();
  17.     }

Y funciona perfectamente. Luego para la cuenta no se exactamente como meterlo hice esto:

Código PHP:
Ver original
  1. $sql_chk = 'SELECT COUNT(*) FROM usuarios WHERE usuario = "' .$_POST['usuario'].'" AND idUsuario != "' .$_SESSION['idUsuario'].'" ';
  2.     $resultado = mysql_query ($sql_chk, $dbConn) or die(mysql_error());;
  3.     $tot_chk = mysql_num_rows($resultado);
  4.     if($tot_chk > 0){
  5.     echo "Nombre de usuario no disponible";
  6.     exit();
  7.     }

En esta parte de codigo :

Código PHP:
AND idUsuario != "' .$_SESSION['idUsuario'].'" 
tengo que llamar a una varible id que tengo que crear en el formulario o a la variable id que estoy usando en este momento?
Porque para que me reconozca el sitio he incluido en el header el archivo seccion.php que contiene estos datos:

Código PHP:
Ver original
  1. // iniciamos session
  2.  
  3. // archivos necesarios
  4. require_once 'admin/config.php';
  5. require_once 'admin/conexion.php';
  6. require_once 'admin/esUsuario.php';
  7.  
  8. // obtengo puntero de conexion con la db
  9. $dbConn = conectar();
  10.  
  11. // vemos si el usuario quiere desloguar
  12. if ( !empty($_GET['salir']) ) {
  13.     // borramos y destruimos todo tipo de sesion del usuario
  14.     session_unset();
  15. }
  16.  
  17. // verificamos que no este conectado el usuario
  18. if ( !empty( $_SESSION['usuario'] ) && !empty($_SESSION['password']) ) {
  19.     $arrUsuario = esUsuario( $_SESSION['usuario'], $_SESSION['password'], $dbConn );       
  20. }

Que llaman a esta funcion:

Código PHP:
Ver original
  1. <?php
  2.  
  3. function esUsuario ( $usuario, $password, $conexion ) {
  4.    
  5.     // verifica que esten los dos campos completos.
  6.     if ($usuario=='' || $password=='') return false;
  7.    
  8.     // busqueda de los datos de usuarios para loguear.
  9.     $query = "SELECT idUsuario, usuario, password, tipo FROM `usuarios` WHERE usuario = '$usuario'";
  10.     $resultado = mysql_query ($query, $conexion);
  11.     $row = mysql_fetch_array ($resultado);
  12.     $password_from_db = $row ['password'];
  13.     unset($query);
  14.            
  15.     // verifica que el pass enviado sea igual al pass de la db.
  16.     if ( $password_from_db == $password ) {
  17.         return $row;
  18.     } else return false;
  19.    
  20.    
  21. }
  22.  
  23. ?>

El segundo comentario no se hacerlo y el tercero tengo que probarlo aun.

Muchas gracias por la ayuda, espero tu respuesta
  #7 (permalink)  
Antiguo 18/10/2011, 00:03
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Como editar la informacion de un usuario

A ver, en la verificacion de nombre de usuario y correo electronico, seguramente funciona a la perfeccion para registrar nuevos usuarios, pero que pasa si tratas de editar tu propio perfil?, te va a decir que el nombre y correo electronico ya estan registrados.

No se como manejas las sesiones y/o si tienes un campo para ID de usuario, quiero suponer que si, caso contrario, solo adapta:

Código PHP:
Ver original
  1. // Supongo que anterior a la consulta tendras algo como esto:
  2. // Asignacion de variable y un poco de seguridad a la vez
  3. $usuario = mysql_real_escape_string($_POST['usuario']);
  4.  
  5. // Armas tu consulta
  6. $sql_chk = "SELECT usuario FROM usuarios WHERE usuario='$usuario'";
  7.  
  8. // Si estas actualizando
  9. if(isset($_SESSION['id'])) {
  10.     // Evita que el registro del propio usuario se incluya en los resultados
  11.     $sql_chk .= ' AND id != ' . $_SESSION['id'];
  12. }

Lo del COUNT(*) era solo una sugerencia, la consulta para verificar tal como la tienes ahora debe ser util, con mysql_num_rows() vas a llegar exactamente a lo mismo que haciendo la consulta con COUNT(), asi que, no te compliques, por ahora usa lo que entiendes y dominas.

En cuanto a la ID, REPITO NUEVAMENTE ( BURP ), solo estoy suponiendo que tienes ese campo, si no, no hay problema, puedes seguir usando $_SESSION['username'], aunque es preferible y mas manejable una id numerica y auto incrementable.

Con lo del "segundo comentario" imagino que te refieres a actualizar la sesion o cookie... para no estar adivinando, que te parece si muestras como haces el inicio de sesion (login)?, ahi es donde necesariamente tienes el codigo que se va a usar en este caso.
__________________
- León, Guanajuato
- GV-Foto
  #8 (permalink)  
Antiguo 19/10/2011, 15:41
 
Fecha de Ingreso: septiembre-2011
Mensajes: 106
Antigüedad: 12 años, 6 meses
Puntos: 19
Respuesta: Como editar la informacion de un usuario

Cita:
Iniciado por Triby Ver Mensaje
A ver, en la verificacion de nombre de usuario y correo electronico, seguramente funciona a la perfeccion para registrar nuevos usuarios, pero que pasa si tratas de editar tu propio perfil?, te va a decir que el nombre y correo electronico ya estan registrados.

No se como manejas las sesiones y/o si tienes un campo para ID de usuario, quiero suponer que si, caso contrario, solo adapta:

Código PHP:
Ver original
  1. // Supongo que anterior a la consulta tendras algo como esto:
  2. // Asignacion de variable y un poco de seguridad a la vez
  3. $usuario = mysql_real_escape_string($_POST['usuario']);
  4.  
  5. // Armas tu consulta
  6. $sql_chk = "SELECT usuario FROM usuarios WHERE usuario='$usuario'";
  7.  
  8. // Si estas actualizando
  9. if(isset($_SESSION['id'])) {
  10.     // Evita que el registro del propio usuario se incluya en los resultados
  11.     $sql_chk .= ' AND id != ' . $_SESSION['id'];
  12. }

Lo del COUNT(*) era solo una sugerencia, la consulta para verificar tal como la tienes ahora debe ser util, con mysql_num_rows() vas a llegar exactamente a lo mismo que haciendo la consulta con COUNT(), asi que, no te compliques, por ahora usa lo que entiendes y dominas.

En cuanto a la ID, REPITO NUEVAMENTE ( BURP ), solo estoy suponiendo que tienes ese campo, si no, no hay problema, puedes seguir usando $_SESSION['username'], aunque es preferible y mas manejable una id numerica y auto incrementable.

Con lo del "segundo comentario" imagino que te refieres a actualizar la sesion o cookie... para no estar adivinando, que te parece si muestras como haces el inicio de sesion (login)?, ahi es donde necesariamente tienes el codigo que se va a usar en este caso.
Muchas gracias probare lo que me dijiste, ahora te entendí XD, luego te informo

Etiquetas: informacion, mysql, formulario, variables, usuarios
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 06:25.