Foros del Web » Programando para Internet » PHP »

Duda isset

Estas en el tema de Duda isset en el foro de PHP en Foros del Web. Hola buenas foreros. Miren, quiero impedir que alguien se registre a no ser que cumpla las condiciones que indico.. Como son por ejemplo: no dejar ...
  #1 (permalink)  
Antiguo 05/06/2009, 18:47
Avatar de QuezTal  
Fecha de Ingreso: enero-2009
Mensajes: 53
Antigüedad: 11 años
Puntos: 0
Duda isset

Hola buenas foreros.

Miren, quiero impedir que alguien se registre a no ser que cumpla las condiciones que indico..
Como son por ejemplo: no dejar el campo del nombre vacio y que la password se repita en las 2 cajas.
Me explico:

Código PHP:
<body>
<
h3>Registro: </h3>
<
form action="autentificacion2.php" method="post"><p>
Nick: <font color="#00FF00">*</font><br
<
input type="text" name="name"style="width:100px;height:20px;background-color:black;color:orange;border-color:orange; font-size:10pt; font-family:Verdana;text-align:center;"><br>
Password: <font color="#00FF00">*</font><br>
<
input type="password" name="password"style="width:100px;height:20px;background-color:black;color:orange;border-color:orange; font-size:10pt; font-family:Verdana;text-align:center;"><br>
Repite Password: <font color="#00FF00">*</font><br>
<
input type="password" name="repassword"style="width:100px;height:20px;background-color:black;color:orange;border-color:orange; font-size:10pt; font-family:Verdana;text-align:center;"><br
Con esta parte del código vale.
El caso es que se usar un poco isset, pero no logro la manera de impedir el registro,
por que si por ejemplo pongo:
Código PHP:
if  (isset($_POST[password]) && $_POST[password]!=$_POST[repassword]) {
echo 
"Las contraseñas no coinciden, pero aun asi se registra el usuario :( ";
}else{
echo 
"Si coinciden"
¿entienden?
Mi pregunta es que puedo hacer para que impida el registro a no ser que cumpla las condiciones.

un saludo.
  #2 (permalink)  
Antiguo 05/06/2009, 18:52
Avatar de Baleog  
Fecha de Ingreso: abril-2009
Ubicación: Medellin
Mensajes: 34
Antigüedad: 10 años, 9 meses
Puntos: 4
Respuesta: Duda isset

Si pones un return; en la primera parte del IF, la pagina solo se cargaria hasta esa parte, y el registro del usuario que supongo estará mas abajo no se ejecutaría.

Entonces se le mostraria un mensaje con el error y pidiendole que vuelva al formulario. aunque lo ideal seria validar el formulario con javascript antes de enviarlo. para no tener que cargar dos veces el formulario con un error que se puede validar antes. No se si te queda claro
  #3 (permalink)  
Antiguo 05/06/2009, 19:01
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 10 años, 7 meses
Puntos: 1517
Respuesta: Duda isset

El problema es que isset verifica si hay valor en una variable aunque este vacia, porque un string vacio es un valor tambien.

La mejor forma para verificar un campo que no este vacio es con:

Código PHP:
$password trim($_POST["password"]);
if(!empty(
$password){
  
//codigo que ejecutara si no esta vacio el password

El trim() es con el propósito de borrar espacios que pueden estar antes o despues de un texto. El usuario puede que ingrese en el texto un espacio y eso el empty va a interpretar como que no esta vacio por lo tanto el trim elimina eso.

Última edición por abimaelrc; 05/06/2009 a las 19:10
  #4 (permalink)  
Antiguo 06/06/2009, 06:50
Avatar de QuezTal  
Fecha de Ingreso: enero-2009
Mensajes: 53
Antigüedad: 11 años
Puntos: 0
Respuesta: Duda isset

Siento tardar en responder, estaba buscando información.

Baleog-->
aha, he estado buscando info sobre return, pero no encuentro la lógica del código, podrías tu o alguien ponerme un ejemplo sencillo de formulario si no es mucha molestia?


abimaelrc-->El caso es que usando empty permitiria igualmente el registro no?
Es decir, daria el mensaje de que no ha sido posible registrarse, pero si que lo ha hecho si no me equivoco no?

He leido que con Javascript obtendría lo que busco, con
Código:
    
    * jsrequired - valor obligatorio.
    * jsvalidate_number - valor numérico obligatorio.
    * jsvalidate_digits - sólo números.
    * jsvalidate_alpha - sólo letras.
    * jsvalidate_alphanum - sólo letras, números y guiones (underscores).
    * jsvalidate_email - dirección de correo.
    * jsvalidate_uscanzip - códigos postales de Estados Unidos.
    * jsvalidate_usstate - dos letras en mayúsculas para estado de Estados Unidos.
    * jsvalidate_usphone - números telefónicos en el formato de Estados Unidos.
    * jsvalidate_creditcard - números de tarjetas de crédito: VISA, MasterCard y American Express (sin espacios).
    * jsvalidate_ssn - número del seguro social de Estados Unidos.
    * select-notfirst - para usar en campos descolgables.
El problema, es que pongo :

Código PHP:
<body>
<
form action.......................>
Nombre:
<
input type="text" name="nombre" class="jsrequired">
<
input type="submit" value="Aceptar"
Pero doy a registrar, y me lo registra aún habiendo dejado el campo nombre vacio.
Me pregunto que hago mal.
Si pudieran poner un ejemplo pequeñito.... Solo si tienen tiempo por supuesto vale?
Por cierto me he bajado los archivos JSvalidate y añado librerias entre las etiqueta <head></head>
Pero me sigue registrando


un saludo

Última edición por QuezTal; 06/06/2009 a las 07:28
  #5 (permalink)  
Antiguo 06/06/2009, 12:12
Avatar de Baleog  
Fecha de Ingreso: abril-2009
Ubicación: Medellin
Mensajes: 34
Antigüedad: 10 años, 9 meses
Puntos: 4
Respuesta: Duda isset

Si haces esto.

Código PHP:
if  (isset($_POST[password]) && $_POST[password]!=$_POST[repassword]) {
echo 
"Las contraseñas no coinciden.";
  exit( );
}else{
echo 
"Si coinciden"
La pagina te mostraría el mensaje que dice que las contraseñas no coinciden y para la ejecución. osea que no inserta nada. Seria bueno ponerle un enlace para volver al formulario o algo asi.

Lo siento por le del return, era exit, tal vez estaba pensando en otro lenguaje :P
  #6 (permalink)  
Antiguo 06/06/2009, 13:45
 
Fecha de Ingreso: junio-2009
Ubicación: Valencia
Mensajes: 45
Antigüedad: 10 años, 7 meses
Puntos: 8
Respuesta: Duda isset

Hola QuezTal,

Creo que el principal problema no está en la comprobación con isset o is_empty, sino en la lógica del if. Ten en cuenta que tal y como lo tienes, para que NO registre, se deben cumplir 2 condiciones:
  1. Que $_POST[password] esté establecida
  2. Y que las contraseñas sean distintas

Esto significa que, si password no está establecida o las contraseñas son iguales, el usuario se registra y esta no es la lógica que deseas. Para evitar esto, la condición debe ser de la siguiente forma:

Código PHP:
if  ((!isset($_POST[password])) || ($_POST[password]!=$_POST[repassword])) {
echo 
"Las contraseñas no coinciden y el usuario no se registra :-)";
}else{
echo 
"Si coinciden";
// Introducir el código de registro...

De esta forma, el usuario no se registrará si ocurre alguna de las 2 condiciones:
  1. Si el campo password no esté establecido
  2. O si las contraseñas son distintas.

Pruébalo y nos cuentas.

Salu2,
Carlos.
  #7 (permalink)  
Antiguo 07/06/2009, 11:16
Avatar de QuezTal  
Fecha de Ingreso: enero-2009
Mensajes: 53
Antigüedad: 11 años
Puntos: 0
Respuesta: Duda isset

Hola de nuevo amigos.


Baleog
Probe con la sugerencia de exit () y sirvió, creo que el problema era que en el código de conexión a la base de datos lo ponia al principio.
Ahora lo he puesto en el }else{
y ya no se registra....
Maldita lógica como me tarda en reaccionar.

ruizdeeguilaz

Tienes toda la razón amigo, la lógica del if era mi respuesta.
Me preguntaba como podría poner varias condiciones en un if.
Así como no permitir el registro si la contraseñas no son exactas o si el campo nombre vacío, o si por ejemplo el campo email esta sin @.....
Código PHP:
$nametrim($_POST["name"]);
if  (isset(
$_POST[password]) && $_POST[password]!=$_POST[repassword] && (!empty($name))  ){
echo 
"<p>Las contraseñas no coinciden.</p>";
echo 
"<p>o dejaste el campo nombre vac&iacute;o</p>"
¿Pueden decirme que hago mal? resulta que cuando escribo la segunda condición, la primera no surge efecto...
No entiendo que hago mal..
La condición si no me equivoco es que si las contraseñas son diferentes y si el campo nombre esta vacío, no permitirá el registro.
Pero si dejo el campo nombre vacío y las contraseñas las dejo iguales las 2, me registra igualmente.


Estoy muy agradecido ruizdeeguilaz, Baleog y abimaelrc



Dios os bendiga amigos!

Última edición por QuezTal; 07/06/2009 a las 11:57
  #8 (permalink)  
Antiguo 07/06/2009, 11:57
 
Fecha de Ingreso: junio-2009
Ubicación: Valencia
Mensajes: 45
Antigüedad: 10 años, 7 meses
Puntos: 8
Respuesta: Duda isset

Hola QuezTal,

En el código que pones sigues poniendo los mismos criterios que al principio. Sigo pensando que no te funcionará. Por ejemplo, si deja el campo password vacío, te intentará registrar. Si quieres especificar más el mensaje de error:

Código PHP:
if (!isset($_POST[password])
{
    echo 
"Debes introducir una contraseña";
}
else
{
    if (
$_POST[password]!=$_POST[repassword])
    {
        echo 
"Las contraseñas no coinciden";
    }
    else
    {
        
// Poner aquí el código de registro...
    
}

En cualquier caso, me alegro de haberte sido de ayuda.

Salu2,
Carlos.
  #9 (permalink)  
Antiguo 07/06/2009, 12:04
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 13 años, 7 meses
Puntos: 2135
Respuesta: Duda isset

Es mejor si usas una lógica más limpia:
Código php:
Ver original
  1. <?php
  2. $errores = array();
  3. if (empty($nombre)) {
  4.       $errores[] = "No escribiste un nombre";
  5. }
  6. if (empty($pass1)) {
  7.       $errores[] = "El password esta vacio";
  8. }
  9. if ($pass1 != $pass2) {
  10.       $errores[] = "Las contraseñas no coinciden";
  11. }
  12.  
  13. if (count($errores) > 0) {
  14.        // hay errores
  15.        foreach ($errores as $error) {
  16.                echo $error;
  17.        }
  18. } else {
  19.        // procedes con el registro
  20. }

Saludos.
  #10 (permalink)  
Antiguo 07/06/2009, 14:03
Avatar de QuezTal  
Fecha de Ingreso: enero-2009
Mensajes: 53
Antigüedad: 11 años
Puntos: 0
Respuesta: Duda isset

vale solucionado, de nuevo gracias a ambos, aunque concretamente use la idea de GatorV.

me parece sencillo y muy práctico para mi gusto y nada amigos, Dios os page con creces vuestra amabilidad.

un saludo QuezTal

[[SOLUCIONADO]]
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 03:10.