Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Linton en 28 Enero 2014, 16:01 pm



Título: Duda en formulario para cambiar un registro
Publicado por: Linton en 28 Enero 2014, 16:01 pm
En una web para aprender PHP, encuentro un punto confuso en el formulario para modificar un registro en base de datos. Tras el primer archivo con el form (en el ejemplo se cambiará el mail de un alumno), se muestra el segundo archivo. Y contiene un nuevo formulario con algo que no comprendo, esta parte:

Código:
 <form action="pagina3.php" method="post">
  Ingrese nuevo mail:
  <input type="text" name="mailnuevo" value="<?php echo $reg['mail'] ?>">
  <br>
  <input type="hidden" name="mailviejo" value="<?php echo $reg['mail'] ?>">
  <input type="submit" value="Modificar">
  </form>

Vale, este botón de texto recoge el nuevo mail:   
Código:
<input type="text" name="mailnuevo" value="<?php echo $reg['mail'] ?>">

...y ahora el mail anterior tiene el mismo value, o sea "<?php echo $reg['mail'] ?>">

El manual no ha explicado los botones hidden y no entiendo cómo funciona esta parte del código: el mail nuevo y el anterior son, según el código PHP, el mismo elemento del array  :huh: ¿Alguien me lo aclara?

¡Gracias por la ayuda!  :)


Título: Re: Duda en formulario para cambiar un registro
Publicado por: basickdagger en 28 Enero 2014, 17:23 pm
En una web para aprender PHP, encuentro un punto confuso en el formulario para modificar un registro en base de datos. Tras el primer archivo con el form (en el ejemplo se cambiará el mail de un alumno), se muestra el segundo archivo. Y contiene un nuevo formulario con algo que no comprendo, esta parte:

Código:
 <form action="pagina3.php" method="post">
  Ingrese nuevo mail:
  <input type="text" name="mailnuevo" value="<?php echo $reg['mail'] ?>">
  <br>
  <input type="hidden" name="mailviejo" value="<?php echo $reg['mail'] ?>">
  <input type="submit" value="Modificar">
  </form>

Vale, este botón de texto recoge el nuevo mail:   
Código:
<input type="text" name="mailnuevo" value="<?php echo $reg['mail'] ?>">

...y ahora el mail anterior tiene el mismo value, o sea "<?php echo $reg['mail'] ?>">

El manual no ha explicado los botones hidden y no entiendo cómo funciona esta parte del código: el mail nuevo y el anterior son, según el código PHP, el mismo elemento del array  :huh: ¿Alguien me lo aclara?

¡Gracias por la ayuda!  :)


con el pedazo de código q pusiste realmente no se sabe, yo solo veo q metes el mismo value a los dos input.... y el input hidden es oculto... muchos lo utilizan para enviar valores cargados que el usuario no puede ver.... mas q con f12 xD, tendrias q poner el otro pedazo de código y tal vez nos podamos entender mejor salu2


Título: Re: Duda en formulario para cambiar un registro
Publicado por: Linton en 28 Enero 2014, 17:54 pm
Vaaaaale, pues lo copio enterito y pleno  ;D

Archivo 1:

Código:
<html>
<head>
<title>Problema</title>
</head>
<body>
<form action="pagina2.php" method="post">
Ingrese el mail del alumno: <input type="text" name="mail"><br>
<input type="submit" value="buscar">
</form>
</body>
</html>

Segundo archivo:
Código
  1. <html>
  2. <head>
  3. <title>Problema</title>
  4. </head>
  5. <body>
  6. <?php
  7. $conexion=mysql_connect("localhost","root","") or die("Problemas en la conexion");
  8. mysql_select_db("base1",$conexion) or die("Problemas en la selección de la base de datos");
  9. $registros=mysql_query("select * from alumnos where mail='$_REQUEST[mail]'",$conexion) or
  10.  die("Problemas en el select:".mysql_error());
  11. if ($reg=mysql_fetch_array($registros))
  12. {
  13. ?>
  14.  <form action="pagina3.php" method="post">
  15.  Ingrese nuevo mail:
  16.  <input type="text" name="mailnuevo" value="<?php echo $reg['mail'] ?>"><br>
  17.  <input type="hidden" name="mailviejo" value="<?php echo $reg['mail'] ?>">
  18.  <input type="submit" value="Modificar">
  19.  </form>
  20. <?php
  21. }
  22. else
  23.  echo "No existe alumno con dicho mail";
  24. ?>
  25. </body>
  26. </html>

Y finalmente el tercero:
Código
  1. <html>
  2. <head>
  3. <title>Problema</title>
  4. </head>
  5. <body>
  6. <?php
  7. $conexion=mysql_connect("localhost","root","") or die("Problemas en la conexion");
  8. mysql_select_db("base1",$conexion) or die("Problemas en la selección de la base de datos");
  9. $registros=mysql_query("update alumnos set mail='$_REQUEST[mailnuevo]' where mail='$_REQUEST[mailviejo]'",$conexion) or
  10.  die("Problemas en el select:".mysql_error());
  11.  echo "El mail fue modificado con exito";
  12. ?>
  13. </body>
  14. </html>


Título: Re: Duda en formulario para cambiar un registro
Publicado por: basickdagger en 28 Enero 2014, 18:33 pm


Archivo 1:

Código:

Ingrese el mail del alumno: <input type="text" name="mail"><br>


Segundo archivo:
Código
  1.  
  2.  Ingrese nuevo mail:
  3.  <input type="text" name="mailnuevo" value="<?php echo $reg['mail'] ?>"><br>
  4.  <input type="hidden" name="mailviejo" value="<?php echo $reg['mail'] ?>">
  5.  

Y finalmente el tercero:
Código
  1. <html>
  2. <head>
  3. <title>Problema</title>
  4. </head>
  5. <body>
  6. <?php
  7. $conexion=mysql_connect("localhost","root","") or die("Problemas en la conexion");
  8. mysql_select_db("base1",$conexion) or die("Problemas en la selección de la base de datos");
  9. $registros=mysql_query("update alumnos set mail='$_REQUEST[mailnuevo]' where mail='$_REQUEST[mailviejo]'",$conexion) or
  10.  die("Problemas en el select:".mysql_error());
  11.  echo "El mail fue modificado con exito";
  12. ?>
  13. </body>
  14. </html>


mm sinceramente no entiendo...
primer archivo:
primero envian el email...
segundo archivo:
buscan si existe el alumno con dicho email en la BD y si este existe.. crean dos input uno oculto y otro visible pero ambos con el mismo valor....
tercer archivo:
 modifican el mail


quiero entender... q solamente imprimen el valor en el archivo 2 para q el usuario pueda verlo y después modificarlo...y así enviar el correo nuevo
Código:
 <input type="text" name="mailnuevo" value="<?php echo $reg['mail'] ?>"><br>
y el viejo(este no se vera en pantalla pero el valor estará ahí)...
Código:
<input type="hidden" name="mailviejo" value="<?php echo $reg['mail'] ?>">


pero si existen dos correos iguales... te va crear 2 forms si hay 5 iguales te va crear 5 forms, etc...


olvide decirte... en el archivo 3 modifica el mail nuevo donde email sea igual a email viejo
salu2


Título: Re: Duda en formulario para cambiar un registro
Publicado por: 1mpuls0 en 28 Enero 2014, 18:42 pm
quiero entender... q solamente imprimen el valor en el archivo 2 para q el usuario pueda verlo y después modificarlo... y así enviar el correo nuevo

Así de simple es la respuesta.

El atributo name="mailnuevo" solo es para mostrar el email que se busco en el anterior form.
El atributo name="mailviejo" es para poder utilizarlo en la sentencia donde se actualizará el email.


Título: Re: Duda en formulario para cambiar un registro
Publicado por: Linton en 28 Enero 2014, 21:26 pm
Hum, no lo entiendo bien...   :-X

Lo que me sorprende es que en otros manuales modifican datos de una tabla con un solo archivo  :huh: :huh:


Título: Re: Duda en formulario para cambiar un registro
Publicado por: 1mpuls0 en 28 Enero 2014, 21:51 pm
la clave está en la consulta..

este es un ejemplo muy sencillo y no recomendable hacer actualizaciones con email por seguridad.
los sistemas grandes utilizan variables como id del usuario, la variable de sesión, o alguna otra clave generada.

En este ejemplo es forzoso realizarlo así.

ACTUALIZA tabla_alumos coloca MAIL='nuevomail' DONDE MAIL='mailanterior'

Lo que me sorprende es que en otros manuales modifican datos de una tabla con un solo archivo  :huh: :huh:

Esto es posible hacerlo mediante metodos tipo POST


Título: Re: Duda en formulario para cambiar un registro
Publicado por: Linton en 28 Enero 2014, 22:23 pm
¿Y por qué entonces enseñan el método más complicado?  :laugh:

Bueno, a ver si mañana lo termino de chapar... ¡Gracias! :)


Título: Re: Duda en formulario para cambiar un registro
Publicado por: 1mpuls0 en 28 Enero 2014, 23:20 pm
No es un método complicado, de hecho es un método correcto.

Si partimos desde lo primordial que es la programación orientada a objetos, te darás cuenta que así se deben hacer las cosas.

Un archivo para realizar la busqueda, otro podria usarse para mostrar los resultados (o utilizando ajax o jquery puede presentarse el resultado en la misma página) pero eso si, lo correcto es realizar tus funciones que tendrán las consultas en archivos separados.



Título: Re: Duda en formulario para cambiar un registro
Publicado por: Linton en 29 Enero 2014, 07:49 am
Sí, que se organice el proceso con dos archivos lo entiendo y me parece diáfano. Lo que no entiendo es que el nuevo email anotado en el input sea a la vez (hidden mediante) el antiguo  :huh:

Nuevo mail......<?php echo $reg['mail'];?>
Anterior mail....<?php echo $reg['mail'];?>


Título: Re: Duda en formulario para cambiar un registro
Publicado por: 1mpuls0 en 29 Enero 2014, 16:34 pm
El antiguo email es colocado en un campo oculto para posteriormente utilizarlo en la consulta y actualizar.

Si bien pudieron hacer una variable de sesión la cual contenta el email (o el id de usuario) lo hacen así para que conozcas una forma de hacerlo.

Posiblemente más adelante del manual la metodología para un caso similar sea diferente procedimiento.


Saludos.


Título: Re: Duda en formulario para cambiar un registro
Publicado por: Linton en 29 Enero 2014, 17:34 pm
El antiguo email es colocado en un campo oculto...
Pero es lo que no entiendo: ¿cómo la misma expresión va a ser el dato antiguo y a la vez el dato nuevo?  :huh:


Título: Re: Duda en formulario para cambiar un registro
Publicado por: basickdagger en 29 Enero 2014, 17:41 pm
Pero es lo que no entiendo: ¿cómo la misma expresión va a ser el dato antiguo y a la vez el dato nuevo?  :huh:

 ahí te va...

tienes dos inputs... uno oculto y uno visible....

el ocutlo esta guardando el correo "viejo"...

en el visual te escribe el correo nuevo para que lo identifiques, despues tu podras borarrlo para comenzar a escribir uno nuevo...

 cuando escribes el nuevo y lo envias...

se envia el correo nuevo y el correo viejo...

uno se envia con el name de correo viejo y otro con el name de correo nuevo...

despues compara q se modifique el viejo utilizando el valor q arrojo correo viejo...


al fin de cuentas no se envia la misma info...
por q tu atrapas el request de correo nuevo y correo viejo, donde el correo nuevo ya cambia...





Título: Re: Duda en formulario para cambiar un registro
Publicado por: Linton en 30 Enero 2014, 09:41 am
¡Aclarado, muchas gracias!  :)