Foros del Web » Programando para Internet » PHP »

Mejor forma de hacerlo.

Estas en el tema de Mejor forma de hacerlo. en el foro de PHP en Foros del Web. Gracias a todos por las ayudas que me dais. Código PHP: <?php if(isset( $_POST [ 'A' ])){     if(empty( $_POST [ 'username' ]) || empty( $_POST [ 'password' ...
  #1 (permalink)  
Antiguo 07/05/2013, 09:25
 
Fecha de Ingreso: diciembre-2012
Mensajes: 223
Antigüedad: 11 años, 11 meses
Puntos: 2
Mejor forma de hacerlo.

Gracias a todos por las ayudas que me dais.
Código PHP:
<?php
if(isset($_POST['A'])){
    if(empty(
$_POST['username']) || empty($_POST['password'])){
        echo 
'No dejes campos en blanco';
    }else{
        echo 
"Todo correcto";
    }
}
?>
<form action="" method="post">
    <input name="username">
    <input name="password">
    <input type="submit">
</form>
Código PHP:
<?php
if(isset($_POST['username']) && isset($_POST['password'])){
    if(empty(
$_POST['username']) || empty($_POST['password'])){
        echo 
'No dejes campos en blanco';
    }else{
        echo 
"Todo correcto";
    }
}
?>
<form action="" method="post">
    <input name="username">
    <input name="password">
    <input NAME="A" type="submit">
</form>
Y otra duda, estoy aprendiendo POO pero yo hago la conexion a la base de dato en la misma funcion donde hago el if de verificacion de datos.

Que seria mejor hacerlo en otra class diferente, hacerlo en el propio php(fuera de la class y function). ¿Como? Gracias a todos por las ayudas que me dais.
  #2 (permalink)  
Antiguo 07/05/2013, 10:07
 
Fecha de Ingreso: junio-2012
Ubicación: Venezuela
Mensajes: 68
Antigüedad: 12 años, 5 meses
Puntos: 6
Respuesta: Mejor forma de hacerlo.

Amigo yo te recomiendo que hagas una validación de campos a nivel de cliente. No es óptimo hacer una validación de input del lado del servidor, valida por javascript... ahora la validación de si existe el usuario o no en la base de datos si lo haces por php... y mejor aun con ajax y php..

Bueno esto forma parte de buenas prácticas ;)
  #3 (permalink)  
Antiguo 07/05/2013, 10:09
 
Fecha de Ingreso: diciembre-2012
Mensajes: 223
Antigüedad: 11 años, 11 meses
Puntos: 2
Respuesta: Mejor forma de hacerlo.

Cita:
Iniciado por MagoMarlon Ver Mensaje
Amigo yo te recomiendo que hagas una validación de campos a nivel de cliente. No es óptimo hacer una validación de input del lado del servidor, valida por javascript... ahora la validación de si existe el usuario o no en la base de datos si lo haces por php... y mejor aun con ajax y php..

Bueno esto forma parte de buenas prácticas ;)
noo, porque el javascript se puede desactivar.
  #4 (permalink)  
Antiguo 07/05/2013, 10:16
 
Fecha de Ingreso: noviembre-2012
Mensajes: 84
Antigüedad: 12 años
Puntos: 5
Respuesta: Mejor forma de hacerlo.

Hola!!
No tengo mucha idea, pero yo haría lo siguiente:

Si el input es de tipo submit, yo le pondría a los campos el atributo required.
El navegador te obliga a introducir todos los datos obligatorios.



Un saludo!!
  #5 (permalink)  
Antiguo 07/05/2013, 10:17
 
Fecha de Ingreso: junio-2012
Ubicación: Venezuela
Mensajes: 68
Antigüedad: 12 años, 5 meses
Puntos: 6
Respuesta: Mejor forma de hacerlo.

Cita:
Iniciado por XD2XD2 Ver Mensaje
noo, porque el javascript se puede desactivar.
si desactivan el javascript te va a dar error en la consulta de existencia que haces por el php.. osea un error de base de datos... sigue siendo igual de seguro, y mas correcto.
  #6 (permalink)  
Antiguo 07/05/2013, 10:19
 
Fecha de Ingreso: diciembre-2012
Mensajes: 223
Antigüedad: 11 años, 11 meses
Puntos: 2
Respuesta: Mejor forma de hacerlo.

Cita:
Iniciado por MagoMarlon Ver Mensaje
si desactivan el javascript te va a dar error en la consulta de existencia que haces por el php.. osea un error de base de datos... sigue siendo igual de seguro, y mas correcto.
Pero, si te figas hay muchisimas paginas que no utiliza javascript para validar los datos.

Yo me referia a que es mejor ponerle un name a el boton y hacer isset($_POST['boton'])) o hacer isset($_POST['campo']) con cada input que he hecho.
  #7 (permalink)  
Antiguo 07/05/2013, 10:24
 
Fecha de Ingreso: junio-2012
Ubicación: Venezuela
Mensajes: 68
Antigüedad: 12 años, 5 meses
Puntos: 6
Respuesta: Mejor forma de hacerlo.

Cita:
Iniciado por pupefo Ver Mensaje
Hola!!
No tengo mucha idea, pero yo haría lo siguiente:

Si el input es de tipo submit, yo le pondría a los campos el atributo required.
El navegador te obliga a introducir todos los datos obligatorios.



Un saludo!!
Esto es muy correcto!!

Y ademas validar input por php es una muy mala practica.. ademas que carga a otra página, y es bastante arcaico... por eso existe javscript, jQuery validate, y el mismo required de html5...
  #8 (permalink)  
Antiguo 07/05/2013, 10:34
 
Fecha de Ingreso: diciembre-2012
Mensajes: 223
Antigüedad: 11 años, 11 meses
Puntos: 2
Respuesta: Mejor forma de hacerlo.

Cita:
Iniciado por MagoMarlon Ver Mensaje
Esto es muy correcto!!

Y ademas validar input por php es una muy mala practica.. ademas que carga a otra página, y es bastante arcaico... por eso existe javscript, jQuery validate, y el mismo required de html5...
Pero con el inspeccionar elementos de chrome se puede eliminar el required de html
  #9 (permalink)  
Antiguo 07/05/2013, 11:14
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años, 6 meses
Puntos: 528
Respuesta: Mejor forma de hacerlo.

Cita:
Iniciado por MagoMarlon Ver Mensaje
ademas validar input por php es una muy mala practica.. ademas que carga a otra página, y es bastante arcaico... por eso existe javscript, jQuery validate, y el mismo required de html5...
¿Tienes idea del tremendo agujero de seguridad que implica no verificar los datos en php?


XD2XD2:

Pones algo código y luego escribes "Y otra duda, " ¿y cuál fue la primer duda?

respecto al código que colocas:

if(isset($_POST['username']) && isset($_POST['password'])){
if(empty($_POST['username']) || empty($_POST['password'])){

Resulta redundante, ya que empty() revisa si variable existe y si está vacía, haciendo innecesario el isset.

Es conveniente para comodidad del usuario validar los campos por javascript, lo que facilita incluso que se pueda indicar campo a campo cuál falta por llenar, incluso colocando el foco en dicho campo.

Pero para cuestiones de seguridad, la validación por php es necesaria.



Y regresando al

if(isset($_POST['A'])){

Si lo colocas para asegurarte de que los datos los recibiste vía navegador (por submit) por curl también es posible enviar el dato.
  #10 (permalink)  
Antiguo 07/05/2013, 12:46
Avatar de bulter  
Fecha de Ingreso: enero-2008
Mensajes: 137
Antigüedad: 16 años, 10 meses
Puntos: 20
Respuesta: Mejor forma de hacerlo.

Cita:
Iniciado por MagoMarlon Ver Mensaje
ademas que carga a otra página, y es bastante arcaico... por eso existe javscript, jQuery validate, y el mismo required de html5...
LOL lee te esto http://es.wikipedia.org/wiki/Program...%B3n_defensiva

Hacer una validacion con PHP no es arcaico ni innecesario es obligatorio.
El JS es client side scripting language. El cliente puede cambiar todo a toda hora, ademas, que me impide hacerme un HTML con los campos que tu tienes y mandarlos a tu URL ?

Como dijo el colega en el caso isset sobra. Pero te falta array_key_exists. Si $_POST["username"] o $_POST["password"] NO existen te saldrá un Notice asi

Cita:
Notice: Undefined index: username / password ....
Si quieres puedes hacer algo asi:

Código PHP:
<?php  
error_reporting
(E_ALL);

function 
validateArrayIndex(array $array$index)
{
    
$validateResult = (bool)false;
    
    if(!
is_array($array))
    {
        throw new 
Exception("validateArrayIndex Exception: Invalid argument.");
    }
    
    if(
is_array($index))
    {
        foreach(
$index as $indexValue)
        {
            if(
validateArrayIndex($array$indexValue) == false)
            {
                return 
false;
            }
        }
    }
    else
    {
        if(
array_key_exists($index$array) && !empty($array[$index]))
        {
            return 
true;
        }
        else
        {
            return 
false;
        }
    }
    
    return 
true;
}

if(
validateArrayIndex($_POST, array("username""password")))
{
    echo 
"VALID";
}
else
{
    echo 
"invalid";
}
?>
  #11 (permalink)  
Antiguo 07/05/2013, 13:00
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años, 7 meses
Puntos: 31
Respuesta: Mejor forma de hacerlo.

A estas alturas quien no usa javascript? ... valida cosas importantes desde en el servidor, por ejemplo si el usuario existe o no .. etc etc ...

Que la información ingresada no contenga código malicioso como html, o javascript insertado a propósito ...

Y puedes crear un token de seguridad para validar que la información enviada se esta haciendo unicamente desde tu servidor.
- Creas un código desde el servidor lo guardas en session
- Que tu formulario lo envié como un elemento hidden
- Una ves enviada verificas si el token en session coincide con el que ha sido enviado por el formulario

Si tu cliente tiene desactivado el javascript, pues nada de la web va a funcionar, lo optimo seria validar dos veces desde el cliente y el servidor ...
Las siguientes soluciones que se me ocurren:
- Mostrar un popup que tape toda la web (se desactiva solo con javascript), pero este puede ser quitado por firebug
- Agregar un campo hidden desde javascript a tus formularios, que indique javascript esta operativo

Tecnologías como ASP.NET MVC hacen que tus objetos generen estas validaciones en el servidor/cliente

Última edición por HiToGoRoShi; 07/05/2013 a las 13:11
  #12 (permalink)  
Antiguo 07/05/2013, 13:36
Avatar de bulter  
Fecha de Ingreso: enero-2008
Mensajes: 137
Antigüedad: 16 años, 10 meses
Puntos: 20
Respuesta: Mejor forma de hacerlo.

... Me habra un popup pesado la pagina y no vuelvo a entrar en ella ^^
JS esta bien para RT validation pero toda comprobacion con JS no es de fiar. Crear codigos sessiones ... Eso requiere el tripl de resource que simplemente no fiarme y hacer un check de validez, otra cosa es que las sesiones, cookies tambien son inputs asi que tampoco son de fiar y hay que comprobarlas si transportan datos importantes.
Con lo que ofreces que me impide hacer me un bot que coja el valor de tu hidden input y lo ingreso en mi propio formulario dejo el input de username vacio y lo envia al URL de tu form ? Te lo dire Nada...
Como la ley de Murphy dice "Si algo puede salir mal, saldra mal"
Leed que es programacion defensiva ...

Cita:
- Agregar un campo hidden desde javascript a tus formularios, que indique javascript esta operativo
oO Y eso que tiene de seguro o de fiar ? Te lo modifico igual ... y le doy valor true y desactivo el JS....
  #13 (permalink)  
Antiguo 07/05/2013, 18:51
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años, 7 meses
Puntos: 31
Respuesta: Mejor forma de hacerlo.

Cita:
Iniciado por bulter Ver Mensaje
... Me habra un popup pesado la pagina y no vuelvo a entrar en ella ^^
JS esta bien para RT validation pero toda comprobacion con JS no es de fiar. Crear codigos sessiones ... Eso requiere el tripl de resource que simplemente no fiarme y hacer un check de validez, otra cosa es que las sesiones, cookies tambien son inputs asi que tampoco son de fiar y hay que comprobarlas si transportan datos importantes.
Con lo que ofreces que me impide hacer me un bot que coja el valor de tu hidden input y lo ingreso en mi propio formulario dejo el input de username vacio y lo envia al URL de tu form ? Te lo dire Nada...
Como la ley de Murphy dice "Si algo puede salir mal, saldra mal"
Leed que es programacion defensiva ...



oO Y eso que tiene de seguro o de fiar ? Te lo modifico igual ... y le doy valor true y desactivo el JS....
Tienes razón ... un error mio, ya que con cualquier herramienta como el firebug puedes alterar eso

Etiquetas: forma
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 14:14.