Foros del Web » Programando para Internet » PHP »

La propiedad empty

Estas en el tema de La propiedad empty en el foro de PHP en Foros del Web. Hola amigos, Estoy intentando hacer un insert simple. Tengo cuatro campos en la tabla, ya consigo hacer el insert pero me gustaria mejorarlo y querria ...
  #1 (permalink)  
Antiguo 25/04/2006, 03:46
Avatar de unaiu  
Fecha de Ingreso: abril-2006
Mensajes: 139
Antigüedad: 18 años
Puntos: 0
La propiedad empty

Hola amigos,

Estoy intentando hacer un insert simple.

Tengo cuatro campos en la tabla, ya consigo hacer el insert pero me gustaria mejorarlo y querria que cuando las cajas de texto estubiesen bacias no me hiciese el insert.

He probado con empty, pero no me funciona, este bacio o lleno me da lo mismo.
Asi tengo yo el codigo:

if( empty($nombre) || empty($ap1)|| empty($ap2)|| empty($email))
{
$_POST['res']=4;
$resultado=$_POST['res'];
//Esto es la variable para un mensaje

}
else
{
$insert=mysql_query("insert into ......

}


Si sabes algun amanera de que funcione esto , quiza empty no es el adecuado.
  #2 (permalink)  
Antiguo 25/04/2006, 04:06
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 4 meses
Puntos: 1
Cita:
Tengo cuatro campos en la tabla, ya consigo hacer el insert pero me gustaria mejorarlo y querria que cuando las cajas de texto estubiesen bacias no me hiciese el insert.
¿Con una caja que esté vacía ya no quieres el INSERT?
__________________
"Di no al Internet Explorer" -Proverbio Chino-
  #3 (permalink)  
Antiguo 25/04/2006, 04:18
Avatar de unaiu  
Fecha de Ingreso: abril-2006
Mensajes: 139
Antigüedad: 18 años
Puntos: 0
Si , por ejemplo yo cuando le doy a nuevo se me limpian las cajas no.

Y si cualquiera de las cutro cajas esta bacia quiero que me de un mensaje,

***EI, rellena bien los campos...

Hay alguna propiedad pa esto ????
  #4 (permalink)  
Antiguo 25/04/2006, 04:30
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 18 años, 7 meses
Puntos: 19
Creo recordar que tuve problemas con la función empty. Lo que acabé haciendo es una función para comprobar si una variable era vacía o no. Aquí os la dejo (tambien funciona con arrays de variables):
Código PHP:
<?php
    
// funcion que comprueba si una variable está vacía
    // Devuelve FALSE si encuentra algún caracter diferente al espacio o TRUE en caso contrario
    
        
function is_empty($variable)
        {
            
$resultado false;
        
        
// si se trata de un array comprobamos cada elemento

            
if( is_array($variable) )
            {
                foreach( 
$variable as $elemento )
                {
                    if( 
$resultado is_empty($elemento) )
                    {
                        break;
                    }
                }
            }
            else
            {        
            
// si se trata de una cadena comprobamos si la cadena esta vacía 
            // quitando los espacios en blanco del principio y del final
                
                
if( is_string($variable) )
                {
                    if( 
trim($variable) == "" )
                    {
                        
$resultado true;
                    }
                }
            }
            
            return 
$resultado;
        }
?>
  #5 (permalink)  
Antiguo 25/04/2006, 04:43
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 4 meses
Puntos: 1
empty() trabaja bien, el problema es que a veces se le confunde con isset().

Viendo el bosque en lugar del árbol, ¿no sería mejor enviar mensajes personalizados según el tipo de casilla que llenó mal?

Por ejemplo, el siguiente código imprime: Todo bien !

En pocas líneas se validaron los datos y no sólo eso, sino que el mensaje de error no es general, sino que dice exáctamente qué está mal.

Código PHP:
<?
<html>
<
head><title>Ejm.</title></head>
<
body>
<?
//voy a suponer los siguientes datos de entrada
$nombre "México";
$ap1 "Cámaras";
$ap2 "Digitales";
$email "[email protected]";

/////// V A L I D A N D O    L O S    D A T O S ////////
$lat "a-zA-Z0-9áéíóúüñÁÉÍÓÚÜÑ"//caracteres latinos alfanuméricos
$mensajes ""//almacenemos los mensajes de error

//checando que el nombre tenga al menos 3 caracteres de longitud
if ( !ereg("^[$lat]{3,}$",$nombre) ) $mensajes .= "<li>El nombre debe contener al menos 3 caracteres alfanuméricos.";

//checando que ap1 tenga al menos 3 caracteres de longitud
if ( !ereg("^[$lat]{3,}$",$ap1) ) $mensajes .= "<li>El AP_01 debe contener al menos 3 caracteres alfanuméricos.";

//checando que ap2 tenga al menos 3 caracteres de longitud
if ( !ereg("^[$lat]{3,}$",$ap2) ) $mensajes .= "<li>El AP_02 debe contener al menos 3 caracteres alfanuméricos.";

//checando que el email tenga un formato válido
if ( !ereg("^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$",$email) ) $mensajes .= "<li>El email no es válido, favor de verificar.";


////////////// T O M A    D E    D E C I S I C I O N E S //////////////
if( !empty($mensajes) ){ //hubo errores

    //mostremos los errores en forma de lista
    
$mensajes "<ul>".$mensajes."</ul>";
    echo 
$mensajes;
  }
else{ 
//todo en orden
    
echo "Todo bien !";
    
//$insert=mysql_query("insert into ......    
}
?>
</body></html>
?>
Pero... ¿qué pasa si en lugar de [email protected] escribió correohotmail.com?
Entraría en el if() e imprimiría: El email no es válido, favor de verificar.

¿qué pasa si en lugar de México escribió mx?
Entraría en el if() e imprimiría: El nombre debe contener al menos 3 caracteres.


ADEMÁS INCREMENTA LA SEGURIDAD
En este ejemplo, no sólo se logró lo que se buscaba, sino que además incrementa la seguridad de la aplicación. Nota que si alguien quiere insertar por ejemplo TAGS de HTML, no se lo va a permitir.
__________________
"Di no al Internet Explorer" -Proverbio Chino-
  #6 (permalink)  
Antiguo 25/04/2006, 08:00
Avatar de xyyy7  
Fecha de Ingreso: enero-2004
Ubicación: Maracay.-
Mensajes: 637
Antigüedad: 20 años, 2 meses
Puntos: 5
Este ultimo quedo muy bien uamistad yo usaba para estas aplicaciones un arreglo parecido al que mostro jerkan , pero este ultimo tambien merece atencion.-

Saludos.-
__________________
Maracay Edo Aragua - Venezuela :
Mi Favorita :
http://www.MySQL.Com
  #7 (permalink)  
Antiguo 25/04/2006, 08:55
Avatar de unaiu  
Fecha de Ingreso: abril-2006
Mensajes: 139
Antigüedad: 18 años
Puntos: 0
Holaaaaa!!!!!!

Muchas gracias uamistad, eres la bomba.:)

Le echo unos arreglillos y a encajau muy bien en mi programa. Hasta lo he mejorado y todo.

La pena que la validación del email no esta bien del todo, ya que antes del @
puedo poner todo los puntos que quiera, pero ma venido bien, GRACIAS

Saludos grandes.
  #8 (permalink)  
Antiguo 25/04/2006, 08:56
Avatar de unaiu  
Fecha de Ingreso: abril-2006
Mensajes: 139
Antigüedad: 18 años
Puntos: 0
Una preguntilla, el comando que as utilizado para la validacion que es

ereg

Me podrias esplicar cual es su función, Gracias??
  #9 (permalink)  
Antiguo 25/04/2006, 09:10
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
Tomado de php.net

Descripción
int ereg ( string pattern, string string [, array regs] )


Cita:
Busca en string las coincidencias con la expresión regular pattern.

Si se encuentran coincidencias con subcadenas entre paréntesis de pattern y la función se ha llamado con el tercer argumento regs, las coincidencias se almacenarán en los elementos de regs. $regs[1] contendrá la subcadena que empieza en el primer paréntesis izquierdo; $regs[2] la que comienza en el segundo, etc. $regs[0] contendrá una copia de string.

La búsqueda diferencia mayúsculas y minúsculas.

Devuelve un valor verdadero si se encontró alguna coincidencia, o falso in no se encontraron coincidencias u ocurrió algún error.

El siguiente fragmento de código toma una fecha en formato ISO (AAAA-MM-DD) y la imprime en formato DD.MM.AAAA: Ejemplo 1. ereg() example

if ( ereg( "([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $date, $regs ) ) {
echo "$regs[3].$regs[2].$regs[1]";
} else {
echo "Invalid date format: $date";
}
  #10 (permalink)  
Antiguo 25/04/2006, 09:17
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 4 meses
Puntos: 1
Claro compa y qué bueno que te fue útil.

ereg() es una función que evalúa expresiones regulares. Una página que debes casi aprenderte de memoria en este mundillo de PHP es php.net que tiene el manual oficial. Ahí puedes consultar cualquier función.
http://www.php.net/manual/es/function.ereg.php

Las expresiones regulares, como viste, es una forma de meter en poco espacio patrones muy complejos y una de sus funciones puede ser la validación. Se ocupan para mil cosas en realidad.

Te aconsejo (mega-consejo) que le no les tengas miedo a las expresiones regulares, he visto por aquí en muchos post que la gente "le saca" a esos patrones, sin darse cuenta del potencial que se están perdiendo.

Es cierto, tienen su grado de complejidad.

Es cierto, casi siempre se puede lograr lo mismo de otra manera (generalmente más larga).

Es cierto, no las vas a dominar en 10 minutos.

Pero lo que inviertas en aprender esos patrones te va a hacer la vida MEGA-FÁCIL.

Mira, esta es la función que yo uso para validar mis emails:

Código PHP:
<?
if( !ereg("^[a-zA-Z0-9](\\.?[a-zA-Z0-9_-]+)*@[a-zA-Z0-9-]{3,}\\.[a-zA-Z]{2,3}(\\.[a-zA-Z]{2,3})?$",$email) )
?>
...pero hay unas mucho más complejas !!! Aquí mismo hay un post por ahí en donde parece que hicieron una tremenda guerra de expresiones regulares para validación de emails (los masters del foro).

Noooooooooombre, 'ta cañón eso de las expresiones regulares. Pero looooooooooooco !!
__________________
"Di no al Internet Explorer" -Proverbio Chino-
  #11 (permalink)  
Antiguo 26/04/2006, 00:29
Avatar de unaiu  
Fecha de Ingreso: abril-2006
Mensajes: 139
Antigüedad: 18 años
Puntos: 0
Muchas gracias a todos por darme un trozito de vuestra sabiduria. :)
  #12 (permalink)  
Antiguo 26/04/2006, 01:10
Avatar de unaiu  
Fecha de Ingreso: abril-2006
Mensajes: 139
Antigüedad: 18 años
Puntos: 0
HOla buenos dias a todos.Q tal ba la mañana???

Se que igual es mucho pedir, pero no tendreis por ahi alguna validacion de CIF/NIF.

Gracias
  #13 (permalink)  
Antiguo 26/04/2006, 04:29
 
Fecha de Ingreso: junio-2005
Ubicación: Madrid, España
Mensajes: 288
Antigüedad: 18 años, 9 meses
Puntos: 1
es en javascript

letras = new Array();
letras[0] = "T";
letras[1] = "R";
letras[2] = "W";
letras[3] = "A";
letras[4] = "G";
letras[5] = "M";
letras[6] = "Y";
letras[7] = "F";
letras[8] = "P";
letras[9] = "D";
letras[10] = "X";
letras[11] = "B";
letras[12] = "N";
letras[13] = "J";
letras[14] = "Z";
letras[15] = "S";
letras[16] = "Q";
letras[17] = "V";
letras[18] = "H";
letras[19] = "L";
letras[20] = "C";
letras[21] = "K";
letras[22] = "E";


function nif(dni){
//dado un DNI te devuelve el NIF
dni = parseInt(dni); //con esto le quitariamos los ceros que tenga por delante
if (dni > 99999999){
alert("Error. El DNI sólo tiene 8 dígitos")
}else{
letraDNI = letras[dni % 23];
dni = dni.toString(); //lo convertimos a String para poderlo concatenar con la letra
nif = dni + letraDNI;
return nif
}
}

function esNIFCorrecto(dni,letra){
//dado un NIF te devuelve si es o no correcto
txtError = ""; //texto que se mostraría en caso de error
correcto = true; //variable booleana que controla si hay algún error
dni=parseInt(dni); //al convertirlo a entero, le quitamos los ceros de la izquierda
letraCorrecta = letras[ dni % 23]; //la letra que debería ser para ese DNI
letra = letra.toUpperCase();
if (dni > 99999999){
txtError += "El DNI tiene a lo sumo 8 cifras\n";
correcto = false;
} else if(!isNaN(letra)){
txtError += "El último carácter del NIF debe ser una letra"
correcto = false;
} else if(letra!=letraCorrecta) {
txtError += "El NIF introducido no es correcto";
correcto = false;
}

if (correcto) {
return true;
}else{
alert(txtError);
return false;
}
}
  #14 (permalink)  
Antiguo 26/04/2006, 05:55
Avatar de unaiu  
Fecha de Ingreso: abril-2006
Mensajes: 139
Antigüedad: 18 años
Puntos: 0
Muchas gracias , pero mas que nada queria saber si con algun comando de PHP, se podria hacer la valiodacion del NIF, com con lo del email.

Es de agradecer que ayas puesto tu validacion, pero una parecida a esa tengo echa en visual basic, por eso te digo que lo que me interesaba era en PHP.

Gracias de todas maneras,

SALUDOS
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 07:32.