Foros del Web » Programando para Internet » PHP »

Opinión sobre este sistema de registro

Estas en el tema de Opinión sobre este sistema de registro en el foro de PHP en Foros del Web. Hola caballeros: Bueno antes que nada un saludo a todos. Pues el motivo de mi consulta es que estoy haciendo un sistema que me recoja ...
  #1 (permalink)  
Antiguo 24/07/2011, 06:48
 
Fecha de Ingreso: julio-2008
Mensajes: 258
Antigüedad: 15 años, 8 meses
Puntos: 9
Pregunta Opinión sobre este sistema de registro

Hola caballeros:

Bueno antes que nada un saludo a todos. Pues el motivo de mi consulta es que estoy haciendo un sistema que me recoja los datos de un formulario, los compruebe (incluyendo captcha), y si todo ha sido correcto, me los insertará en una tabla de mi base de datos. ¿Qué les parece mi script? ¿y la sintaxis?

De nuevo, un Saludo!!!

El código es el siguiente:

Código PHP:
<?

    
// Iniciamos sesión. Así recuperaremos la clave del captcha.
    
session_start( );

    
// Datos de cada equipo que se inscriba. 
    // Requerimos: Nombre capitán, apellidos, email, movil, numero de apartamento, y color de equipo.
    // Tambien pediremos los nombres, apellidos y apartamento de los 9 jugadores restantes que compongan el equipo de futbol
    
$nombre_cap $_POST['nombre_cap'];
    
$apellido1_cap $_POST['apellido1'];
    
$apellido2_cap $_POST['apellido2'];
    
$email $_POST['email'];
    
$movil $_POST['movil'];
    
$apartamento_cap $_POST['apartamento_cap'];
    
$nombre_equipo $_POST['nombre_equipo'];
    
$color $_POST['color'];
    
$nombre2 $_POST['nombre2'];
    
$apellido2 $_POST['apellido2'];
    
$apartamento2 $_POST['apartamento2'];
    
$nombre3 $_POST['nombre3'];
    
$apellido3 $_POST['apellido_3'];
    
$apartamento3 $_POST['apartamento3'];
    
$nombre4 $_POST['nombre4'];
    
$apellido4 $_POST['apellido4'];
    
$apartamento4 $_POST['apartamento4'];
    
$nombre5 $_POST['nombre5'];
    
$apellido5 $_POST['apellido5'];
    
$apartamento5 $_POST['apartamento5'];
    
$nombre6 $_POST['nombre6'];
    
$apellido6 $_POST['apellido6'];
    
$apartamento6 $_POST['apartamento6'];
    
$nombre7 $_POST['nombre7'];
    
$apellido7 $_POST['apellido7'];
    
$apartamento7 $_POST['apartamento7'];
    
$nombre8 $_POST['nombre8'];
    
$apellido8 $_POST['apellido8'];
    
$apartamento8 $_POST['apartamento8'];
    
$nombre9 $_POST['nombre9'];
    
$apellido9 $_POST['apellido9'];
    
$apartamento9 $_POST['apartamento9'];
    
$nombre10 $_POST['nombre10'];
    
$apellido10 $_POST['apellido10'];
    
$apartamento10 $_POST['apartamento10'];
    
$error '';
    
    
// Aqui comprobamos si el usuario ingreso los datos requeridos
    
if ($nombre_cap == ""){ 
        
$error.="Debe ingresar el nombre del representante/capitan del equipo. <BR>\n";
    }if (
$apellido1_cap == ""){ 
        
$error.="No ha ingresado el primer apellido del representante/capitan del equipo. <BR>\n";
    }if (
$apellido2_cap == ""){ 
        
$error.="No ha ingresado el segundo apellido del representante/capitan del equipo. <BR>\n";
    }if
        (
$movil != "") {
            if ((!
ereg("^[0-9]{9}$"$movil) && $movil!="")||(!ereg("^[0-9]{9}$"$movil) && (strlen($movil) != 9))){
            
$error.="Ingrese un numero de contacto (movil) valido. <BR>\n";
            }
    }if (
$email == ""){ 
        
$error.="No ha ingresado su email. <BR>\n";
       }if(
ereg("[a-z0-9_.]+@[a-z0-9]+[.][.a-z0-9]+",$email)==&& $email!=""){
        
$error.="El email ingresado no es valido. <BR>\n";
    }if (
$apartamento_cap == ""){ 
        
$error.="No ha ingresado el apartamento del representante/capitan del equipo. <BR>\n";
    }if (
$nombre_equipo == ""){ 
        
$error.="No ha ingresado el nombre del equipo. <BR>\n";
    }if (((
$nombre2)&&($apellido2)&&($apartamento2)) = "") {
        
$error.="No ha ingresado todos los datos del jugador 2 de su equipo. <BR>\n";
    }if (((
$nombre3)&&($apellido3)&&($apartamento3)) = "") {
        
$error.="No ha ingresado todos los datos del jugador 3 de su equipo. <BR>\n";
    }if (((
$nombre4)&&($apellido4)&&($apartamento4)) = "") {
        
$error.="No ha ingresado todos los datos del jugador 4 de su equipo. <BR>\n";
    }if (((
$nombre5)&&($apellido5)&&($apartamento5)) = "") {
        
$error.="No ha ingresado todos los datos del jugador 5 de su equipo. <BR>\n";
    }if (((
$nombre6)&&($apellido6)&&($apartamento6)) = "") {
        
$error.="No ha ingresado todos los datos del jugador 6 de su equipo. <BR>\n";
    }if (((
$nombre7)&&($apellido7)&&($apartamento7)) = "") {
        
$error.="No ha ingresado todos los datos del jugador 7 de su equipo. <BR>\n";
    }if (((
$nombre8)&&($apellido8)&&($apartamento8)) = "") {
        
$error.="No ha ingresado todos los datos del jugador 8 de su equipo. <BR>\n";
    }if (((
$nombre9)&&($apellido9)&&($apartamento9)) = "") {
        
$error.="No ha ingresado todos los datos del jugador 9 de su equipo. <BR>\n";
    }if (((
$nombre10)&&($apellido10)&&($apartamento10)) = "") {
        
$error.="No ha ingresado todos los datos del jugador 10 de su equipo. <BR>\n";
    }if (((
$nombre2)&&($nombre3)&&($nombre4)&&($nombre5)&&($nombre6)&&($nombre7)&&($nombre8)) = "") {
        
$error.="El equipo no supera el minimo de 8 jugadores minimos olbigatorios. <BR>\n";
       
    
//Codigo captcha
       
}if( md5$_POST'code' ] ) != $_SESSION'key' ] ) {
        
$error.="El codigo de seguridad que ha ingresado no coincide con el de la imagen. <BR>\n";
    } 

       if (
$error != ""){
    
// Este es el archivo que contendra el mensaje de error
    
include ("err_envio.html");
    exit;
    
    }else{
    
    
//Ahora incluimos el archivo que insertará los datos en nuestra base de datos
    
include ("insertar.php");
    
    
//Finalmente destruyo la sesión    que iniciamos para recuperar la imagen captcha.
    
session_destroy();
    
    
//Redireccionamos a la pagina de proceso satisfactorio
    
include ("env_sat.html");
    }
    
    
?>
El archivo insertar.php

Código PHP:

<?
        $link 
mysql_connect("localhost","usuario","contraseña");
        
mysql_select_db("webdb",$link);

        
// Con esta sentencia SQL insertaremos los datos en la base de datos
        
mysql_query("INSERT INTO futbol (
        nombre_cap,apellido1_cap,apellido2_cap,email,movil,apartamento_cap,nombre_equipo,color,
        nombre2,apellido2,apartamento2,
        nombre3,apellido3,apartamento3,
        nombre4,apellido4,apartamento4,
        nombre5,apellido5,apartamento5,
        nombre6,apellido6,apartamento6,
        nombre7,apellido7,apartamento7,
        nombre8,apellido8,apartamento8,
        nombre9,apellido9,apartamento9,
        nombre10,apellido10,apartamento10)
        
        VALUES (
        '{$_POST['nombre_cap']}',
        '{$_POST['apellido1_cap']}',
        '{$_POST['apellido2_cap']}',
        '{$_POST['email']}',
        '{$_POST['movil']}',
        '{$_POST['apartamento_cap']}',
        '{$_POST['nombre_equipo']}',
        '{$_POST['color']}',
        
        '{$_POST['nombre2']}',
        '{$_POST['apellido2']}',
        '{$_POST['apartamento2']}',
        
        '{$_POST['nombre3']}',
        '{$_POST['apellido3']}',
        '{$_POST['apartamento3']}',
        
        '{$_POST['nombre3']}',
        '{$_POST['apellido3']}',
        '{$_POST['apartamento3']}',
        
        '{$_POST['nombre4']}',
        '{$_POST['apellido4']}',
        '{$_POST['apartamento4']}',
        
        '{$_POST['nombre5']}',
        '{$_POST['apellido5']}',
        '{$_POST['apartamento5']}',
        
        '{$_POST['nombre6']}',
        '{$_POST['apellido6']}',
        '{$_POST['apartamento6']}',
        
        '{$_POST['nombre7']}',
        '{$_POST['apellido7']}',
        '{$_POST['apartamento7']}',
        
        '{$_POST['nombre8']}',
        '{$_POST['apellido8']}',
        '{$_POST['apartamento8']}',

        '{$_POST['nombre9']}',
        '{$_POST['apellido9']}',
        '{$_POST['apartamento9']}',
        
        '{$_POST['nombre10']}',
        '{$_POST['apellido10']}',
        '{$_POST['apartamento10']}',
        
        )"
,$link);

        
// Ahora comprobaremos que todo ha ido correctamente
        
$my_error mysql_error($link);

        if(!empty(
$my_error) {

            echo 
"Ha habido un error al insertar los valores. $my_error"

        } else {

            echo 
"Los datos han sido introducidos satisfactoriamente";
        }
?>
__________________
"La diversidad de opiniones crean una perspectiva capaz de ver todas las caras del objeto"
  #2 (permalink)  
Antiguo 24/07/2011, 07:10
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 10 meses
Puntos: 261
Respuesta: Opinión sobre este sistema de registro

Nunca insertes directamente las variables en la DB... busca información de como validar datos de un formulario.

Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #3 (permalink)  
Antiguo 24/07/2011, 07:12
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 8 meses
Puntos: 416
Respuesta: Opinión sobre este sistema de registro

Antes de insertar los datos a MySQL, asegúrate de primero pasarlos por la función mysql_real_escape_string para evitar inyecciones SQL.

También usa las etiquetas completas <?php, para mayor compatibilidad cuando lleves tu código a otro servidor que no soporte short_open_tags.

En tus validaciones, hay algo que te podría traer dolores de cabeza:
Código PHP:
}if ((($nombre7)&&($apellido7)&&($apartamento7)) = "") { 
Estas usando "=", que sirve para asignar. Debes usar "==" para comparar.

Aparte de eso lo veo bien. Si hace lo que necesitas, esta perfecto.
  #4 (permalink)  
Antiguo 24/07/2011, 07:59
 
Fecha de Ingreso: julio-2008
Mensajes: 258
Antigüedad: 15 años, 8 meses
Puntos: 9
Respuesta: Opinión sobre este sistema de registro

Cita:
Iniciado por Ronruby Ver Mensaje
Antes de insertar los datos a MySQL, asegúrate de primero pasarlos por la función mysql_real_escape_string para evitar inyecciones SQL.

También usa las etiquetas completas <?php, para mayor compatibilidad cuando lleves tu código a otro servidor que no soporte short_open_tags.

En tus validaciones, hay algo que te podría traer dolores de cabeza:
Código PHP:
}if ((($nombre7)&&($apellido7)&&($apartamento7)) = "") { 
Estas usando "=", que sirve para asignar. Debes usar "==" para comparar.

Aparte de eso lo veo bien. Si hace lo que necesitas, esta perfecto.
O sea, antes de insertar los datos, cojo cada variable y la hago pasar por esa función, por ejemplo:
Código PHP:
mysql_real_escape_string ($nombre_cap); 
Por lo demás, estoy probando el código a ver si va bien. Si funciona a la parfección luego les paso una pequeña guia de lo que hice y lo que quería conseguir con ello, para que la tengan en el foro.

Un saludo!!
__________________
"La diversidad de opiniones crean una perspectiva capaz de ver todas las caras del objeto"
  #5 (permalink)  
Antiguo 24/07/2011, 09:20
 
Fecha de Ingreso: julio-2008
Mensajes: 258
Antigüedad: 15 años, 8 meses
Puntos: 9
Respuesta: Opinión sobre este sistema de registro

Lo he probado y va bien a excepción de insertar.php que me suelta este error que nunca habia visto:

Las lineas de error de mi código son las siguientes:
Código PHP:
Ha habido un error al insertar los valores
Column count doesnt match value count at row 1 
Por lo que he podido comprobar es que estoy intentando hacer una consulta donde el numero de campos no concuerda con el numero de valores Y EN EFECTO, así era.
__________________
"La diversidad de opiniones crean una perspectiva capaz de ver todas las caras del objeto"

Última edición por winjose; 24/07/2011 a las 10:13
  #6 (permalink)  
Antiguo 24/07/2011, 10:34
 
Fecha de Ingreso: julio-2008
Mensajes: 258
Antigüedad: 15 años, 8 meses
Puntos: 9
Respuesta: Opinión sobre este sistema de registro

Ya solo me queda la duda de cómo prevenir las inyecciones sql que comentaba Uncontroled_Duck y Ronruby. Tras haberme informado, he encontrado una forma que según parece es recomendable (utilzando la función que aconsejaba Ronruby: mysql_real_escape_string)

Código PHP:

<?php
// Aplicar comillas sobre la variable para hacerla segura
function comillas_inteligentes($valor)
{
    
// Retirar las barras
    
if (get_magic_quotes_gpc()) {
        
$valor stripslashes($valor);
    }

    
// Colocar comillas si no es entero
    
if (!is_numeric($valor)) {
        
$valor "'" mysql_real_escape_string($valor) . "'";
    }
    return 
$valor;
}

// Conexion
$enlace mysql_connect('mysql_host''mysql_usuario''mysql_contrasenya')
    OR die(
mysql_error());

// Realizar una consulta segura
$consulta sprintf("SELECT * FROM usuarios WHERE usuario=%s AND password=%s",
            
comillas_inteligentes($_POST['nombre1']),
            
comillas_inteligentes($_POST['email']));
            [...]
 
mysql_query($consulta);
?>
¿Aplico esa forma a mi sistemilla?

Un saludo, y muchas gracias
__________________
"La diversidad de opiniones crean una perspectiva capaz de ver todas las caras del objeto"

Etiquetas: html, mysql, opinión, registro, sistema, sql, tabla, formulario, usuarios
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 09:28.