Foros del Web » Programando para Internet » PHP »

Acción que solo se ejecute una vez

Estas en el tema de Acción que solo se ejecute una vez en el foro de PHP en Foros del Web. Bueno, me gustaría saber si hay una forma de evitar que una acción se ejecute dos veces, en un caso como esté: - Cree un ...
  #1 (permalink)  
Antiguo 28/06/2012, 11:31
 
Fecha de Ingreso: diciembre-2011
Ubicación: Medellín
Mensajes: 68
Antigüedad: 12 años, 3 meses
Puntos: 7
Acción que solo se ejecute una vez

Bueno, me gustaría saber si hay una forma de evitar que una acción se ejecute dos veces, en un caso como esté:

- Cree un formulario, que se ejecuta en la misma página, "echo $_SERVER['PHP_SELF'];", y pues me funciona perfectamente, ya que lo recibo con un

Código:
if (isset($_POST['comentario'])) {
 echo $_POST['comentario'];
}
Y pues esto también me funciona perfectamente, ya que al entrar a la página normal, no se me ejecuta la acción, pero si envío el formulario, se ejecuta perfectamente.

Pero mi gran problema, se encuentra en que si apretó F5, el mismo comentario se mostrara, y así ilimitadamente, y yo no quiero que esto pase; ya que se llenara muy fácilmente, la zona de comentarios de basura.

- Entonces la duda es, como puedo evitar, que al presionar f5, se ejecute la acción.

-No es recomendable usar el $_SERVER['PHP_SELF'] ??

- Se puede hacer esto, mucho mas fácil ?


Ojala y me puedan ayudar.
  #2 (permalink)  
Antiguo 28/06/2012, 11:53
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Acción que solo se ejecute una vez

La idea consiste en direccionar a la pagina de origen después de ejecutar la acción.

Investiga sobre el uso de header() para conseguirlo.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 28/06/2012, 12:13
 
Fecha de Ingreso: diciembre-2011
Ubicación: Medellín
Mensajes: 68
Antigüedad: 12 años, 3 meses
Puntos: 7
Respuesta: Acción que solo se ejecute una vez

Si, conosco perfectamente la función header :D, pero es que mi idea era ejecutar el codigo PHP en la misma página (sin salir de ella).

Osea, sin salir de ella, como si fuese javascript, pero no lo es :D...

El mejor ejemplo es "la respuesta rapída", de este foro, en el cual tu comentas, y no te manda a otra página para ejecutar la acción, si no que la ejecuta en la misma página, aunque dudo que sea con PHP, ya que últimamente e oido que estas cosas se hacen es con AJAX.
  #4 (permalink)  
Antiguo 28/06/2012, 13:43
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Acción que solo se ejecute una vez

usa sesiones....

Código PHP:
Ver original
  1. <?php
  2.  
  3. if (isset($_POST['comentario']) {
  4.      if (!isset($_SESSION['enviado'])) {
  5.           echo 'formulario procesado'
  6.           $_SESSION['enviado'] = true;
  7.      }
  8. }
  9. ?>
  10. <form method="post" action="<?=$_SERVER['PHP_SELF']; ?>">
  11. <input type="submit" name="comentario" value="prueba" />
  12. </form>
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #5 (permalink)  
Antiguo 28/06/2012, 13:48
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 18 años, 11 meses
Puntos: 394
Respuesta: Acción que solo se ejecute una vez

1. Si lo que usted quiere es que la pagina no se refresque al enviar el FORM use AJAX

2. Si lo que quiere es que esa misma pagina procese los datos del formulario pero que solo lo haga cuando se haga el SUBMIT y no cuando se cargue haga esto:

Código PHP:
Ver original
  1. if(isset($_POST['enviar']) && !empty($_POST['enviar'])  && ($_POST['enviar'] == "enviar")){
  2. // aca lo que quieras hacer con los datos
  3. }
  4. <form name="" metod="post" action="">
  5. <input type="submit" name="enviar" value="enviar" />
  6. </form>

De esta forma solo se ejecutaran las acciones de PHP si el POST fue enviado. De lo contrario seguira derecho sin hacer nada.
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #6 (permalink)  
Antiguo 28/06/2012, 15:44
Avatar de oso96_2000  
Fecha de Ingreso: junio-2002
Ubicación: Distrito Federal
Mensajes: 558
Antigüedad: 21 años, 10 meses
Puntos: 35
Respuesta: Acción que solo se ejecute una vez

Sin usar AJAX, lo ideal seria usar el metodo Post/Redirect/Get, que básicamente evita esa duplicado de datos al darle F5 :)
__________________
Sin Ideas
  #7 (permalink)  
Antiguo 28/06/2012, 16:58
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Acción que solo se ejecute una vez

Lo más correcto es el header, aunque vaya a la misma pagina, el simple hecho de hacer un HTTP Redirect hace que el flujo se cambié y las variables POST son borradas.

Saludos.
  #8 (permalink)  
Antiguo 28/06/2012, 17:11
 
Fecha de Ingreso: diciembre-2011
Ubicación: Medellín
Mensajes: 68
Antigüedad: 12 años, 3 meses
Puntos: 7
Respuesta: Acción que solo se ejecute una vez

Bueno, muchas gracias por las respuestas, la verdad me apure y lo hice mediante "header", pero probare las otras igualmente, haber con cual quedo mas a gusto.

Saludos

Etiquetas: formulario, vez
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 15:13.