Foros del Web » Programando para Internet » PHP »

al actualizar me graba

Estas en el tema de al actualizar me graba en el foro de PHP en Foros del Web. Código PHP: <?php include  "conectar.php" ; $consulta  =  "SELECT * FROM productos WHERE productoID=" . $_GET [ "identidad" ]; $result  =  mysql_query ( $consulta ); if ( mysql_num_rows ( $result )> ...
  #1 (permalink)  
Antiguo 19/03/2013, 09:24
 
Fecha de Ingreso: junio-2012
Ubicación: Santiago de Chile
Mensajes: 164
Antigüedad: 11 años, 10 meses
Puntos: 1
al actualizar me graba

Código PHP:
<?php
include "conectar.php";
$consulta "SELECT * FROM productos WHERE productoID=".$_GET["identidad"];
$result mysql_query($consulta);
if (
mysql_num_rows($result)>0){
$i=0;
$nom=mysql_result($result,$i,"nombre");
$pre=mysql_result($result,$i,"precio");
$detalle=mysql_result($result,$i,"detalle");
$cantidad=$_GET["cantidad"];

$consulta2 "SELECT num_pedido FROM carro_final ORDER BY num_pedido DESC";
$result2 mysql_query($consulta2);
if (
mysql_num_rows($result2)==0){
$pedido=1;    
}
if (
mysql_num_rows($result2)>0){
$x=0;
$pedido=mysql_result($result2,$x,"num_pedido");
$pedido=$pedido+1;
}
$datos_envio "";
$datos_envio $datos_envio."'".$_GET["identidad"]."',";
$datos_envio $datos_envio."'".$pedido."',";
$datos_envio $datos_envio."'".$nom."',";
$datos_envio $datos_envio."'".$cantidad."'";
$Sql="INSERT INTO carro_temporal(productoID,num_pedido,producto,cantidad) values (".$datos_envio.")";
mysql_query($Sql,$link);  
}
tengo ese código despues del body de mi carro.php, resulta que cada vez que actualizo la página con f5 este trozo de código se vuelve a ejecutar y me vuelve a grabar...existe alguna forma de hacer que el código sólo se ejecute una vez y no al actualizar, si no al realizar el href desde el archivo anterior...

los datos viajan desde producto.php --> carro.php

envio la variable con el href y la tomo con $_GET...

pensé en cambiar el href por un bontón, quizás así sea más simple?...onda que sólo el archivo se ejecute cuando el botón se haya presionado?...o quizas poner un archivo intermedio entre producto.php y carro.php que sea es es que grabe y no que carro tenga esa función?

alguna ayuda?
  #2 (permalink)  
Antiguo 19/03/2013, 09:44
 
Fecha de Ingreso: abril-2008
Ubicación: El Salvador
Mensajes: 736
Antigüedad: 16 años
Puntos: 47
Respuesta: al actualizar me graba

El problema es que si hiciste un envío las variables que enviaste ya sea por GET o POST quedan seteadas por lo tanto si haces un refresh con f5 es como si volvieras a hacer otro envío por lo tanto realizará un nuevo insert a la tabla, lo que deberías hacer es que una vez realizas la inserción que necesitas, redirecciones al escript de origen ya sea producto.php u otra pagina donde confirmes que la inserción se realizó.
  #3 (permalink)  
Antiguo 19/03/2013, 10:22
Avatar de miguec04  
Fecha de Ingreso: agosto-2008
Ubicación: Cimitarra, Santander
Mensajes: 378
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: al actualizar me graba

Código HTML:
Ver original
  1. <!-- HIDDEN PARA EVITAR DOBLE ENVIO-->
  2. <input type='hidden' name='postID' value=<?php echo "'".md5(uniqid(rand(), true))."'" ?> >

Código PHP:
Ver original
  1. //Yo tengo esta solucion mira pones un campo oculto que va a viajar con los campos de los productos comprados, y usas la siguiente funcion.
  2. function postBlock($postID) {
  3.     if(isset($_SESSION['postID'])) {
  4.         if ($postID == $_SESSION['postID']) {
  5.             return false;
  6.         } else {
  7.             $_SESSION['postID'] = $postID;
  8.             return true;
  9.         }
  10.     } else {
  11.         $_SESSION['postID'] = $postID;
  12.         return true;
  13.     }
  14. }
  15.  
  16. //aqui validas que si el codigo que se envio ya esta en session quiere decir que se dio F5 por lo tanto no se vuelve a guardar del resto guarde
  17. if (postBlock($_POST['postID'])) {
  18.     echo 'codigo para insertar';
  19. } else {
  20.     echo 'ya se ha grabado no oprimir F5';
  21. }
__________________
Desoftc Technology - Miguel Carmona
Creaciones Inteligentes - Cimitarra Colombia
[email protected]
http://www.desoftc.com.co

Etiquetas: graba, mysql, select, sql
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 19:41.