Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Maties 360 en 31 Julio 2007, 00:29 am



Título: Problema con formulario de registro...
Publicado por: Maties 360 en 31 Julio 2007, 00:29 am
Buenas, estoi fabricando un formulario de registro de usuarios y tengo el problema de que cuando hago una condicional con que salte un error di esta vacio algun campo importante. Por ejemplo:

registrousuarios.php

Código:
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>*LE*|| Registro Nuevo Usuario</title>
</head>
<body bgcolor="#000000" text="#FFFFFF">
<br><br><br /><br /><br />
<br /><br />
<br /><br />
<br /><br>
<br><br>
<br>
<table border="0" cellpadding="0" cellspacing="0" align="center">
<form action="proces.php" method="get">
<tr><td><font color="white">Nick:   </font><input type="text" name="nick">*<br></td></tr>
<tr><td><br><font color="white">Contraseña: </font><input type="password" name="contrasenya">*</td></tr>
<tr><td><br><font color="white">Repite la contraseña: </font><input type="password" name="re-contrasenya">*</td></tr>
<tr><td><br><font color="white">Email: </font><input type="text" name="email">*</td></tr>
<tr><td><br><font color="white">Fecha de nacimiento: </font>
<input type="text" name="data" title="Formato: aaaa-mm-dd" maxlength="10"></td></tr>
<tr><td><br><font color="white">País: </font>
<select name="pais">
  <option value="1">España</option>
  <option value="2">Portugal</option>
</select>*</td></tr>
<tr><td><br><input type="submit" value="Continuar" name="continuar">&nbsp;&nbsp;&nbsp;<input type="reset" value="Borrar"></td></tr>
</form>
<tr><td><br><em>* Campo requerido</em>
</table>
</body>
</html>

proces.php

Código:
<?php 
$nick= $_GET['nick'];
$contrasenya= $_GET['contrasenya'];
$recontrasenya= $_GET['re-contrasenya'];
$email= $_GET['email'];
$fecha= $_GET['data'];
$pais= $_GET['pais'];
$enviar= $_GET['continuar'];

if (isset($enviar)) {
if ($contrasenya != $recontrasenya && $nick == NULL && $email == NULL) {
include ('registrousuarios.php');
echo "<p align=center><font color=red><br>"."Se han detectado los siguientes errores:</font></p>".
"<p align=center><font color=red>- No coinciden las contraseñas!"."<br>"."- El campo <b>Nick</b> esta vacio!"."<br>".
"- El campo <b>Email</b> esta vacio!</font></p>";
}
else {
switch( $_GET['pais']) {
case 1:
include ('registrousuariosespanya.php');
break;
case 2:
include ('registrousuariosportugal.php');
break;
}}}
?>
<table border="0" cellpadding="0" cellspacing="0" align="center">
<form  action="procesfinal.php" method="get">
<input type="hidden" name="nick" value="<?php echo $nick ?>" />
<input type="hidden" name="contrasenya" value="<?php echo $contrasenya ?>" />
<input type="hidden" name="re-contrasenya" value="<?php echo $recontrasenya ?>" />
<input type="hidden" name="email" value="<?php echo $email ?>" />
<input type="hidden" name="data" value="<?php echo $fecha ?>" />
<input type="hidden" name="pais" value="<?php echo $pais ?>" />
</form>
</table>

Y el problema esta en que aqui solo me sale el error cuando los tres estan vacios o las pass no coinciden. Y si quiero hacerlo por separado voy poniendo includes y me sale repetido el formulario uno debajo del otro,

Agradeceria mucho si alguien me solucionara el problema^^

Gracias y Salu2


Título: Re: Problema con formulario de registro...
Publicado por: Sanjuu en 31 Julio 2007, 10:57 am
Si pones un and (&&) las tres se tienen que cumplir para que pase (producto lógico)

Tienes que filtrarlo por separado, lo que no se es para que quieres tanto include, simplemente haz una vuelta atrás al formulario anterior o mete el campo que falte según el error.

Por ejemplo:

Código
  1.  
  2. if (empty($_GET['email'])){
  3.    echo '<input type="text" name="email" />';
  4.    // Los demás campos como hidden
  5. };
  6.  

Pero sigo pensando que el volver al form anterior es tremendamente más facil


Título: Re: Problema con formulario de registro...
Publicado por: Maties 360 en 31 Julio 2007, 16:04 pm
Y como podria hacer esto de la vuelta atras?¿?
Y otra duda.. como hago para poner en color cuando inserto un codigo en el foro?¿?

Gracias y Salu2


Título: Re: Problema con formulario de registro...
Publicado por: Sanjuu en 31 Julio 2007, 16:50 pm
Y como podria hacer esto de la vuelta atras?¿?

Con un control de javascript te bastaría, un enlace del tipo <a href="javascript:history.back();">volver</a>

Si quieres hacerlo mejor aún guarda variables de sesión y recarga la misma página.

Y otra duda.. como hago para poner en color cuando inserto un codigo en el foro?¿?

Es facil [ code=php]codigo aqui[/ code]

Tienes una lista desplegable a la derecha, encima de los iconos que pone geshi


Título: Re: Problema con formulario de registro...
Publicado por: Maties 360 en 31 Julio 2007, 19:25 pm
Buenas, ya esta solucionado^^, lo he solucionado de la siguiente manera:

proces.php

Código
  1. <?php
  2. $nick= $_GET['nick'];
  3. $contrasenya= $_GET['contrasenya'];
  4. $recontrasenya= $_GET['re-contrasenya'];
  5. $email= $_GET['email'];
  6. $fecha= $_GET['data'];
  7. $pais= $_GET['pais'];
  8. $enviar= $_GET['continuar'];
  9. if (isset($enviar)) {
  10. if ($contrasenya != $recontrasenya || empty($nick) || empty($email)) {
  11.    echo "<br><br><br><br>
  12.       <br><br><br><br><br><br>
  13.         <br><br><br><br>".
  14. "<p align=center><font color=red>Se han detectado los siguientes errores:"."<br></font></p>";
  15. }
  16. if ($contrasenya != $recontrasenya) {
  17.    echo "<p align=center><font color=red>- No coinciden las contraseñas!</font></p>";
  18. }
  19. if (empty($nick)) {
  20.    echo "<p align=center><font color=red>- El campo <b>Nick</b> esta vacio!</font></p>";
  21. }
  22. if (empty($email)) {
  23.    echo "<p align=center><font color=red>- El campo <b>Email</b> esta vacio!</font></p>";
  24. }
  25. if ($contrasenya != $recontrasenya || empty($nick) || empty($email)) {
  26. echo "<p align=center><a href= registrousuarios.php><font color=white>Pulse aqui para volver al formulario</font></a></p>";
  27. }
  28. else {
  29. switch( $_GET['pais']) {
  30. case 1:
  31. include ('registrousuariosespanya.php');
  32. break;
  33. case 2:
  34. include ('registrousuariosportugal.php');
  35. break;
  36. }}}
  37. ?>
  38. <body bgcolor="#000000">
  39. <table border="0" cellpadding="0" cellspacing="0" align="center">
  40. <form  action="procesfinal.php" method="get">
  41. <input type="hidden" name="nick" value="<?php echo $nick ?>" />
  42. <input type="hidden" name="contrasenya" value="<?php echo $contrasenya ?>" />
  43. <input type="hidden" name="re-contrasenya" value="<?php echo $recontrasenya ?>" />
  44. <input type="hidden" name="email" value="<?php echo $email ?>" />
  45. <input type="hidden" name="data" value="<?php echo $fecha ?>" />
  46. <input type="hidden" name="pais" value="<?php echo $pais ?>" />
  47. </form>
  48. </table>
  49. </body>

Ahora queria preguntarte sobre lo que pregunte de lo que no se pudieran repetir los registros, con una consulta como esta por ejemplo:

Código
  1. SELECT Nick, COUNT(*) FROM usuaris GROUP BY Nick

Pero lo intente y no me funcionó... No se como ponerlo para que me salte un error si esta repetido el nick.

Gracias y Salu2


Título: Re: Problema con formulario de registro...
Publicado por: Sanjuu en 1 Agosto 2007, 10:13 am
Cita de: Maties 360 link=topic=174527.msg827488#msg827488

Ahora queria preguntarte sobre lo que pregunte de lo que no se pudieran repetir los registros, con una consulta como esta por ejemplo:

Código
  1. SELECT Nick, COUNT(*) FROM usuaris GROUP BY Nick

Pero lo intente y no me funcionó... No se como ponerlo para que me salte un error si esta repetido el nick.

Gracias y Salu2

Eso es incorrecto, no tengo a mano ningún DBMS para probarlo, una solución más facil:

Código
  1. $sql="SELECT nick FROM usuaris WHERE nick='$nick'";
  2. $resultado = mysql_query($sql);
  3. if(mysql_num_rows($resultado)==0){
  4. //Nick valido
  5. }else{
  6. //nick repetido
  7. };
  8.  



Título: Re: Problema con formulario de registro...
Publicado por: Maties 360 en 1 Agosto 2007, 17:25 pm
Muchas gracias por tu aporte^^

Esto funciona perfectamente

Gracias y Salu2