+ Responder Tema
Página 1 de 2 12 ÚltimoÚltimo
Resultados 1 al 15 de 18

Tema: Permitir sólo una vez el envío de un formulario

  1. #1
    Esto empieza a ser un vicio... Habitante Doodleo has a spectacular aura aboutDoodleo has a spectacular aura about Avatar de Doodleo
    Fecha de Ingreso
    25 abr, 11
    Ubicación
    Galicia (España)
    Mensajes
    1,029
    Poder de Reputación
    8

    Permitir sólo una vez el envío de un formulario

    Hola!

    En mi sistema de comentarios, un tío que se cree hacker (Y remarco el "se cree" porque lo único que hace es darle muchas veces seguidas al botón de Enviar comentario y lo que hace es que se envían muchos comentarios duplicados)

    Lo solucioné, pero sólo unos días, porque lo hice con javascript:
    Código:
    <button type="button" onclick="this.disabled=true; document.frm.submit()">Enviar comentario</button>
    El problema es que lo que hace es Inspeccionar elemento con Google Chrome, borra el onclick="this.disabled...." y hace lo que hacía al principio

    Sólo queda una solución, validar el formulario en PHP

    Cómo hago (EN PHP) para que sólo se pueda enviar un comentario por vez? O hacer que tenga que esperar 1 minuto para poner otro comentario?

  2. #2
    Esto empieza a ser un vicio... Habitante serverdns will become famous soon enough
    Fecha de Ingreso
    28 jun, 08
    Ubicación
    Magdalena Jalisco, Mexico.
    Mensajes
    435
    Poder de Reputación
    8
    podrias hacerlo con sessiones o con cookies.
    con cookies: http://aportes.serverdns.us/con_cookies.php
    Código PHP:
    <?php
    /*////////////////////////////////////////////
    // Codigos Y Funciones Utilies En PHP       //
    // Sitio Web: http://www.serverdns.us       //
    // Soporte Tecnico: soporte@serverdns.us    //
    ////////////////////////////////////////////*/

    $web="miweb";
    $vida=300;
    $llego=time();
    $caduca=time()+ $vida;
    if(!isset(
    $_COOKIE[$web])){
    setcookie($web,$llego,$caduca);
    echo 
    "Gracias por Visitarme";
    }else{
    echo 
    "Gracias por Visitarme Otra Vez";
    }

    ?>
    en el if encierras tu formulario.

    Con Sesiones: http://aportes.serverdns.us/con_sessiones.php

    Código PHP:
    <?php
    /*////////////////////////////////////////////
    // Codigos Y Funciones Utilies En PHP       //
    // Sitio Web: http://www.serverdns.us       //
    // Soporte Tecnico: soporte@serverdns.us    //
    ////////////////////////////////////////////*/

    $sesion="formulario";
    $mostraren="600";
    $ahora=@date("Y-n-j H:i:s");
    @
    session_name("$sesion");
    @
    session_start();
    $duracion = (@strtotime($ahora)-@strtotime($_SESSION['llego']));
    $esperar=$mostraren-$duracion;
    if(!isset(
    $_SESSION['llego'])){
    @
    session_name("$sesion");
    @
    session_start();
    $_SESSION['llego']=$ahora;


    echo 
    "Hola Hace mas de 600 segundos que no actualizabas tu pagina";


    }else{
    if(
    $duracion >= $mostraren){
    @
    session_destroy();
    @
    header("Location: ocultar.php");
    }else{

    echo 
    "No Puedes Usar El Formulario, Espera $esperar segundos";

    }
    }
    ?>
    al igual el formulario lo encierras en el if

    para probarlos solo visita las paginas, espera 10 segundos y actualizalas, en el de sessiones esta un poco mas completo pues llevas un conteo del tiempo.

  3. #3
    Esto empieza a ser un vicio... Habitante Doodleo has a spectacular aura aboutDoodleo has a spectacular aura about Avatar de Doodleo
    Fecha de Ingreso
    25 abr, 11
    Ubicación
    Galicia (España)
    Mensajes
    1,029
    Poder de Reputación
    8
    Gracias server!

    He intentado con el de sesiones para tener que esperar 30 segundos entre cada comentario, pero al comentar no guarda el comentario, dejo el código...

    Código PHP:
    <?

    // Declaramos que la hora de envío de comentario se ponga en la hora de España
    date_default_timezone_set('Europe/Madrid');

    // Declaramos las variables para guardar la fecha y hora de envío del comentario
    $fecha=date("Y/n/d");
    $hora=date("H:i:s");
        
    $id strip_tags($_POST[id]);
        
    $id htmlentities($id);
        
    $nick strip_tags($_POST[nick]);
        
    $email strip_tags($_POST[email]);
        
    $comentario strip_tags($_POST[comentario]);

        
    // Hacemos la validación de los campos aquí, para que si entran en este archivo no manden un comentario en blanco
        
    if (empty($id) || empty($nick) || empty($email) || empty($comentario)) { 
            
    // Si el usuario no pasó la validación del formulario salta el siguiente echo
            
    echo "¡Tienes que completar todos los campos para poder dejar tu comentario!"
        }
        else {
    $sesion="formulario"
    $mostraren="30"
    $ahora=@date("Y-n-j H:i:s"); 
    @
    session_name("$sesion"); 
    @
    session_start(); 
    $duracion = (@strtotime($ahora)-@strtotime($_SESSION['llego'])); 
    $esperar=$mostraren-$duracion
    if(!isset(
    $_SESSION['llego'])){ 
    @
    session_name("$sesion"); 
    @
    session_start(); 
    $_SESSION['llego']=$ahora;

    }else{ 
    if(
    $duracion >= $mostraren){ 
    @
    session_destroy(); 

    echo 
    "Tienes que esperar 30 segundos para dejar otro comentario. Inténtalo en <i>$duracion</i> segundos";

    }else{ 

    // Conectamos a la base de datos 
            
    $connect mysql_connect("[COLOR="red"]servidor[/COLOR]""[COLOR="red"]basededatos[/COLOR]""[COLOR="red"]password[/COLOR]");
            
    // Seleccionamos la base de datos
            
    mysql_select_db("a6136284_minics",$connect);
            
    // Ingresamos el comentario en la tabla
            
    $result mysql_query ("INSERT INTO `[COLOR="red"]basededatos[/COLOR]`.`comentarios`(`id`, `nick`, `email`, `comentario`, `fecha`, `hora`) VALUES ('$id', '$nick', '$email', '$comentario', '$fecha', '$hora')");       
    if(
    $result) {    // Si se ejecuta la consulta devuelve true
                // Volvemos a la novedad en la que estábamos
    header ("location:novedad.php?id=$id#comments");


    }
    }
    }
    ?>

  4. #4
    Esto empieza a ser un vicio... Habitante serverdns will become famous soon enough
    Fecha de Ingreso
    28 jun, 08
    Ubicación
    Magdalena Jalisco, Mexico.
    Mensajes
    435
    Poder de Reputación
    8
    es porque lo has puesto al contrario, la sentencia es en el if y el mensaje de error en el else.

  5. #5
    Esto empieza a ser un vicio... Habitante Doodleo has a spectacular aura aboutDoodleo has a spectacular aura about Avatar de Doodleo
    Fecha de Ingreso
    25 abr, 11
    Ubicación
    Galicia (España)
    Mensajes
    1,029
    Poder de Reputación
    8
    Gracias de nuevo por la respuesta, pero sigue sin irme...

    Código PHP:
    <?

    // Declaramos que la hora de envío de comentario se ponga en la hora de España
    date_default_timezone_set('Europe/Madrid');

    // Declaramos las variables para guardar la fecha y hora de envío del comentario
    $fecha=date("Y/n/d");
    $hora=date("H:i:s");
        
    $id strip_tags($_POST[id]);
        
    $id htmlentities($id);
        
    $nick strip_tags($_POST[nick]);
        
    $email strip_tags($_POST[email]);
        
    $comentario strip_tags($_POST[comentario]);

        
    // Hacemos la validación de los campos aquí, para que si entran en este archivo no manden un comentario en blanco
        
    if (empty($id) || empty($nick) || empty($email) || empty($comentario)) { 
            
    // Si el usuario no pasó la validación del formulario salta el siguiente echo
            
    echo "¡Tienes que completar todos los campos para poder dejar tu comentario!"
        }
        else {
    $sesion="formulario"
    $mostraren="30"
    $ahora=@date("Y-n-j H:i:s"); 
    @
    session_name("$sesion"); 
    @
    session_start(); 
    $duracion = (@strtotime($ahora)-@strtotime($_SESSION['llego'])); 
    $esperar=$mostraren-$duracion
    if(!isset(
    $_SESSION['llego'])){ 
    @
    session_name("$sesion"); 
    @
    session_start(); 
    $_SESSION['llego']=$ahora;

    }else{ 
    if(
    $duracion >= $mostraren){ 
    @
    session_destroy();

    // Conectamos a la base de datos 
            
    $connect mysql_connect("servidor""basededatos""password");
            
    // Seleccionamos la base de datos
            
    mysql_select_db("basededatos",$connect);
            
    // Ingresamos el comentario en la tabla
            
    $result mysql_query ("INSERT INTO `basededatos`.`comentarios`(`id`, `nick`, `email`, `comentario`, `fecha`, `hora`) VALUES ('$id', '$nick', '$email', '$comentario', '$fecha', '$hora')");       
    if(
    $result) {    // Si se ejecuta la consulta devuelve true
                // Volvemos a la novedad en la que estábamos
    header ("location:novedad.php?id=$id#comments");



    }else{ 

    echo 
    "Tienes que esperar 30 segundos para dejar otro comentario. Inténtalo en <i>$duracion</i> segundos";

    }
    }
    }
    ?>
    Última edición por Doodleo; 18/09/2011 a las 14:31

  6. #6
    Esto empieza a ser un vicio... Habitante Doodleo has a spectacular aura aboutDoodleo has a spectacular aura about Avatar de Doodleo
    Fecha de Ingreso
    25 abr, 11
    Ubicación
    Galicia (España)
    Mensajes
    1,029
    Poder de Reputación
    8
    Retiro lo dicho, sí funcionaba pero debía borrar caché para que se guardaran los cambios

    Gracias por la ayuda!

  7. #7
    Esto empieza a ser un vicio... Habitante Rabs will become famous soon enoughRabs will become famous soon enough Avatar de Rabs
    Fecha de Ingreso
    16 jun, 11
    Ubicación
    Madrid
    Mensajes
    756
    Poder de Reputación
    5
    Ya me estaba dejando yo los sesos rebanando el codigo pasito por pasito (creo haber visto un error, pero no recuerdo donde haha)
    www.fernandosalcedo.com
    www.margarita-gonzalez.com
    Videos del compañero Lantiga 100% recomendado si quieres ampliar conocimientos.
    Si tienes una mascota http://www.eluniversodelperro.com/ es tu sito.

  8. #8
    Esto empieza a ser un vicio... Habitante victor5atodogas will become famous soon enough Avatar de victor5atodogas
    Fecha de Ingreso
    19 abr, 10
    Ubicación
    Zaragoza (España)
    Mensajes
    1,628
    Poder de Reputación
    12
    Supongo que lo de COLOR=RED no lo tendras puesto, pero yo no veo ningun fallo en el codigo, otra cosa es que alguna cosa no funcione bien o no entre donde crees que lo hace.
    Tienda de Productos de mascotas (perros, gatos, roedores, reptiles, pajaros, peces, tarjetas regalo, cestas...) a los mejores precios El Universo del perro Sigue a El Universo del Perro en Facebook

    Si quieres montar tu tienda con Prestashop y necesitas que te ayude puedes preguntarme, tambien ofrezco buenos precios para instalacion, configuracion, etc para tu nueva tienda.

  9. #9
    Esto empieza a ser un vicio... Habitante Rabs will become famous soon enoughRabs will become famous soon enough Avatar de Rabs
    Fecha de Ingreso
    16 jun, 11
    Ubicación
    Madrid
    Mensajes
    756
    Poder de Reputación
    5
    Pues habrá sido una imaginación mia :)
    www.fernandosalcedo.com
    www.margarita-gonzalez.com
    Videos del compañero Lantiga 100% recomendado si quieres ampliar conocimientos.
    Si tienes una mascota http://www.eluniversodelperro.com/ es tu sito.

  10. #10
    Esto empieza a ser un vicio... Habitante Doodleo has a spectacular aura aboutDoodleo has a spectacular aura about Avatar de Doodleo
    Fecha de Ingreso
    25 abr, 11
    Ubicación
    Galicia (España)
    Mensajes
    1,029
    Poder de Reputación
    8
    @victor5atodogas: Sí, lo del [COLOR=RED] no me acordaba que lo puse en [PHP] en vez de en [CODE] el código jejeje

    Me he encontrado con un problema con este código, la primera vez que envias el formulario, no te da ningún error, pero no guarda el comentario. Le doy a atrás, vuelvo a enviarlo, y me pone que espere los 30 segundos. Los espero, lo intento enviar de nuevo y sí lo envía.

    Pero la primera vez no, "poh qué?"

  11. #11
    Esto empieza a ser un vicio... Habitante victor5atodogas will become famous soon enough Avatar de victor5atodogas
    Fecha de Ingreso
    19 abr, 10
    Ubicación
    Zaragoza (España)
    Mensajes
    1,628
    Poder de Reputación
    12
    CREO que el fallo esta aqui:

    $duracion = (@strtotime($ahora)-@strtotime($_SESSION['llego']));

    si no me equivoco, esto: ($_SESSION['llego'])


    lo declaras despues, lo que hace que hasta que no lo "envies" y vuelvas siempre sera X-0 = X, por lo tanto, nunca entra en el if hasta la 2º vez. Revisa eso como te digo que es donde creo que esta el fallo.
    Tienda de Productos de mascotas (perros, gatos, roedores, reptiles, pajaros, peces, tarjetas regalo, cestas...) a los mejores precios El Universo del perro Sigue a El Universo del Perro en Facebook

    Si quieres montar tu tienda con Prestashop y necesitas que te ayude puedes preguntarme, tambien ofrezco buenos precios para instalacion, configuracion, etc para tu nueva tienda.

  12. #12
    Esto empieza a ser un vicio... Habitante Doodleo has a spectacular aura aboutDoodleo has a spectacular aura about Avatar de Doodleo
    Fecha de Ingreso
    25 abr, 11
    Ubicación
    Galicia (España)
    Mensajes
    1,029
    Poder de Reputación
    8
    Cambiando el $_SESSION['llego']=$ahora; más arriba que $duracion, al comentar me pone el error de que tengo que esperar los 30 segundos... pero los segundos no bajan (se quedan siempre en 30) y no se puede comentar

  13. #13
    Esto empieza a ser un vicio... Habitante serverdns will become famous soon enough
    Fecha de Ingreso
    28 jun, 08
    Ubicación
    Magdalena Jalisco, Mexico.
    Mensajes
    435
    Poder de Reputación
    8
    El problema es que en un principio este codigo fue creado para proteger un fornulario de mostrarse o no, y tu lo estas utilizando en el codigo que inserta los comentarios, para que funcione correctamente tienes que iniciar la session en el formulario para que comience el conteo del tiempo:

    Código PHP:
    $sesion="formulario"
    @
    session_name("$sesion");
    @
    session_start();
    if(!isset(
    $_SESSION['llego'])) $_SESSION['llego']=@date("Y-n-j H:i:s"); 
    este codigo debes ponerlo al principio de tu formulario para comenzar el conteo.

  14. #14
    Esto empieza a ser un vicio... Habitante victor5atodogas will become famous soon enough Avatar de victor5atodogas
    Fecha de Ingreso
    19 abr, 10
    Ubicación
    Zaragoza (España)
    Mensajes
    1,628
    Poder de Reputación
    12
    Joder, pues es cierto y logico, sino abres la sesion al principio, siempre lo hace al final y x eso siempre te muestra 30, k cosas mas tonta de verdad!jejeje
    Tienda de Productos de mascotas (perros, gatos, roedores, reptiles, pajaros, peces, tarjetas regalo, cestas...) a los mejores precios El Universo del perro Sigue a El Universo del Perro en Facebook

    Si quieres montar tu tienda con Prestashop y necesitas que te ayude puedes preguntarme, tambien ofrezco buenos precios para instalacion, configuracion, etc para tu nueva tienda.

  15. #15
    Esto empieza a ser un vicio... Habitante Doodleo has a spectacular aura aboutDoodleo has a spectacular aura about Avatar de Doodleo
    Fecha de Ingreso
    25 abr, 11
    Ubicación
    Galicia (España)
    Mensajes
    1,029
    Poder de Reputación
    8
    Gracias por la ayuda, al final he decidido dejarlo como está, con el "error" ese, explicando qué hacer para dejar el comentario (Darle a un enlace para ir a atrás que puse y darle a enviar de nuevo, etc..) así también evito 1 comentario de spam, que siempre son molestos

+ Responder Tema

Temas Similares

  1. ¿Cómo Permitir solo usuarios registrados ver la web?
    Por onixqwert en el foro Sistema de Registro de Usuarios
    Respuestas: 7
    Último Mensaje: 21/04/2009, 03:05
  2. Ayuda con el envio de formulario
    Por albertomax en el foro Formularios
    Respuestas: 15
    Último Mensaje: 21/08/2007, 16:03
  3. Envío de formulario por e-mail
    Por Luis Balada en el foro Formularios
    Respuestas: 7
    Último Mensaje: 23/03/2006, 07:23

Permisos de Publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes