Foros del Web » Programando para Internet » PHP »

Buenas maneras al recoger un formulario

Estas en el tema de Buenas maneras al recoger un formulario en el foro de PHP en Foros del Web. Hola. Llevo cierto tiempo trabajando con PHP y aunque no he tenido ningún problema siempre tengo la duda de si lo hago bien o no. ...
  #1 (permalink)  
Antiguo 27/06/2003, 11:26
 
Fecha de Ingreso: junio-2003
Ubicación: Granada
Mensajes: 27
Antigüedad: 14 años, 5 meses
Puntos: 1
Buenas maneras al recoger un formulario

Hola.

Llevo cierto tiempo trabajando con PHP y aunque no he tenido ningún problema siempre tengo la duda de si lo hago bien o no.

Cuando desde un formulario envío datos a otro script a la hora de recibir esos datos lo hago de la siguiente forma:

(Os pongo un ejemplo completo con un INSERT en MySQL)

Código PHP:
<?php

//----------- Curso es el codigo del curso en el cual se matricula.
if ( !isset($curso) || ($curso == "") ) {
    
$curso "1486";        //-------------- Si no existe por defecto 1486
}

//----------- Este script se llama a si mismo, opc indica que hacer.
if ( !isset($opc) ) {
    
$opc "0";    //------------- Si no existe se trata como una petición nueva.
    //------------------------------ OPC = 0 Nueva petición.
    //------------------------------ OPC = 1 Grabar una petición.
}

//---------- comprueba alguno de los parametros que no le deben faltar...
$error 0;
if (
$opc=="1") {
    if (!isset(
$nombre) || ($nombre == "")) {
        
$error 1;
    }
    if (!isset(
$apellidos) || ($apellidos == "")) {
        
$error 1;
    }
    if (!isset(
$direccion) || ($direccion == "")) {
        
$error 1;
    }
    if (!isset(
$poblacion) || ($poblacion == "")) {
        
$error 1;
    }
}

if (
$error == 1) {    //----------- falta algun dato...
    
$llamada "Location: matricu.php?curso=" $curso;
    
Header$llamada );
    exit;
}

//----------------- si es igual a 1 graba los datos...
if ($opc == "1") {
    
conecta_mysql();    //-------------- Realiza la conexión con la B.D.

    
$fecha date("Y-m-d H:i:s");

    
//-------------------- graba el registro...
    
$orden "INSERT INTO matricula (nombre, apellidos, direccion,
 poblacion, fecha, curso) VALUES ('$nombre', '$apellidos',
 '$direccion', '$poblacion', '$fecha', '$curso' )"
;

    
mysql_query ($orden);    //----------- graba…
El resto del script continua mostrando un mensaje avisando de que el registro se ha grabado o se encarga de la petición si opc==0.

Este programa funciona perfectamente pero:

¿Que se puede mejorar (que se que hay mucho)?

Como veis no utilizo $_GET ya que desde mis inicios me he acostumbrado a recoger directamente las variables. ¿Es correcto?

¿Es segura la recepción de los datos que hago?

¿Puedo tener algún problema de seguridad con código HTML?

Bueno si alguien quiere comentar o explicar como se puede mejorar este código o de que otra forma lo hace será bienvenido.

Un saludo y gracias.
  #2 (permalink)  
Antiguo 27/06/2003, 15:03
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Yo empezaria a acostumbrarme a usar los arrays superglobales $_POST, $_GET y demas, porque sino tu codigo va a depender de que esten el register_globals a on, lo que en PHP han puesto por defecto a off (y conociendo a ciertos administradores de servidores, no cambiaran). Ademas, es mas seguro, como comenta Cluster en las FAQs.

Otra cosa, ademas de comprobar si tiene valor, tambien deberias comprobar (y forzar) de que sea del tipo que esperas. Si, por ejemplo, $curso debe ser un numero entero, podrias usar settype() (www.php.net/settype) para convertirlo a un entero.

Y si la variable solo puede tener 2 valores (o un numero finito), tambien deberias comprobarlo. En tu caso, deberias comprobar que $opt es 0 o 1.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 28/06/2003, 11:51
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
mm y Completando algo más ..

Si tienes variables típo "1" y "0" .. podrías usar TRUE/FALSE como constantes para usarlo cómodamente en tus condicionales:

Es decir .. en lugar de:
Código PHP:
if ($opc == "1") { 
usar:
Código PHP:
if ($opc) { 
(siendo $opc=TRUE; y de paso puedes hacer un "else" y no dos IF .. preguntando si es 1 o 0 (o true/false) .. pues esa variable sólo va a tener dos opciones)

A su vez .. si usas Mysql y SQL por médio .. deberías de optimizar más tu SQL ..

En lugar de usar:

Código PHP:
$fecha date("Y-m-d H:i:s"); 
para luego hacer tu consulta a tu BD .. usa: NOW()


Código PHP:
$orden "INSERT INTO matricula (nombre, apellidos, direccion,
 poblacion, fecha, curso) VALUES ('$nombre', '$apellidos',
 '$direccion', '$poblacion', NOW(), '$curso' )"

Sobre los problemas .. con HTML .. los tendrás pero a la hora de presentar (darle salida HTML) a esos valores que ahí recoges .. Por ejemplo que te metan HTML: <img src=blabla.gif> como un campo de "dirección" que tienes ahí o cualquier otro dato .. Para eso debes usar htmlentities() por lo menos, pero a la hora de presentar ese dato .. no al guardarlo en tu BD pues incrementaría el peso de tu BD cuando ese proceso sería más bien de "seguridad" y "pensamos" que la balanza se inclina hacia los usaurios que no hacen ese típo de cosas pero hay que estár atentos a los que las hacen ...


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 28/06/2003 a las 11:58
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 20:35.