Foros del Web » Programando para Internet » PHP »

Ayuda Codigo PHPTengo un problema con un codigo en php, que me tiene algo loco porque

Estas en el tema de Ayuda Codigo PHPTengo un problema con un codigo en php, que me tiene algo loco porque en el foro de PHP en Foros del Web. Ayuda Codigo PHP Duplicacion de datos Sesiones Tengo un problema con un codigo en php, que me tiene algo loco porque no se el porque ...
  #1 (permalink)  
Antiguo 06/04/2010, 07:28
 
Fecha de Ingreso: diciembre-2005
Mensajes: 46
Antigüedad: 18 años, 4 meses
Puntos: 0
Exclamación Ayuda Codigo PHPTengo un problema con un codigo en php, que me tiene algo loco porque

Ayuda Codigo PHP Duplicacion de datos Sesiones

Tengo un problema con un codigo en php, que me tiene algo loco porque no se el porque del error.

Es sobre un carrito de la compra, usando sesiones.

Parto de una pagina que es un simple formulario en html donde se escogen los producos a añadir al carro de la compra, redireccionando a otra pagina.

En la pagina redireccionada, es donde voy asignando a las variables de sesion el contenido de los productos eleguidos, precios, etc....

Pero hay momentos cuando sueles escoger varios productos que se ve como la pagina se actualiza instantamente y si has cogido 2 productos te sale que has cogido 4, osea el doble siempre, es como si rapidamente se hiciera un f5, y lo que me preocupa es que no tengo ningun codigo de redireccionamiento automatico ni nada, y no lo hace siempre solo de vez en cuando y no entiendo el error.

Dejo el codigo donde asigno las variables de sesion por si alguien encuentra el error que yo no veo (He probado con variables estaticas pero nada)

Código:
<?
session_start(); 

include("conexion.php");
$db = Conectarse();

/*La variable de sesion IDE es donde almaceno los ID de los productos, es un array de sesiones*/

$x = count($_SESSION["ide"]);      

	  /*La variable k la uso para el contenido del formuarlio, son varios productos todos ellos en una lista, dicha lista es un array, de modo que si tengo 10 productos, habra un array de 10 posiciones en el que en cada una de esas posiciones contiene el contenido de esa lista*/
	   $k=0;
	   $z = count($_GET["Cajita"]) ;

		for($i=$x;$i<$z;$i++)
		{/*cajita y cantidad son los dos unicos datos que paso en el formulario*/
			$_SESSION["ide"][$i] = $_GET["Cajita"][$k];
			$_SESSION["cantidad"][$i] = $_GET["Cantidad"][$k];
			$_SESSION["numero"][$i] = $i; /*Almaceno el total de articulos comprados*/
			$k++;
			$valor = $_SESSION["ide"][$i];
		  $var = mysql_query("select * from catalogo where id like '$valor'");
			/* voy en busca del precio para ese IDE de producto mostrando en pantalla el total*/
		 	while($v = mysql_fetch_array($var))
			 {
 			 $total = $v["precio"] * $_SESSION["cantidad"][$i];
			 printf("<br>Ha escogido <b>%s</b> con un precio de %.2f € comprando %d productos a un total de %.2f €<br>",$v["producto"],$v["precio"],$_SESSION["cantidad"][$i],$total);
		    

			 }
		}	



     
?> 
Lo dicho no se porque a veces lo repite dos veces. Si alguien sabe el porque o como evitarlo que me lo diga, gracias.

Última edición por elmenda; 06/04/2010 a las 14:40
  #2 (permalink)  
Antiguo 06/04/2010, 09:52
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Ayuda Codigo PHPTengo un problema con un codigo en php, que me tiene algo

este script se ejecuta al recibir algún formulario??

lo digo porque lo ideal es que sea así... y que ademas compruebas con if-then-else si el formulario se envió.... además de que al final de realizar la acción siempre es bueno redireccionar hacia algún otro sitio...

si no sabes controlar esto da cabida a muchos problemas como el que comentas....

PDTA: pésimo titulo para un tema, de seguro muy pocos lo verán bien...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 06/04/2010, 10:11
 
Fecha de Ingreso: octubre-2009
Mensajes: 43
Antigüedad: 14 años, 6 meses
Puntos: 1
Respuesta: Ayuda Codigo PHPTengo un problema con un codigo en php, que me tiene algo

Hola!!

Te recomendaria comenzar por hacer un print_r($_GET['cajita']), para verificar que esten pasando las variables como son, y no duplicado.

Como dices que es en algunos casos, verifica que tengan de especial esos casos (caracteres, longitud, etc), tal vez vaya algo oculto y este ocasionando este error.

Tambien no sobraria hacer una verifica si el producto ya esta en el carro, que no lo agregue. Esto precisamente para evitar esta duplicidad, pero ya por "culpa" del cleinte
  #4 (permalink)  
Antiguo 06/04/2010, 14:32
 
Fecha de Ingreso: diciembre-2005
Mensajes: 46
Antigüedad: 18 años, 4 meses
Puntos: 0
Cita:
Iniciado por pateketrueke Ver Mensaje
este script se ejecuta al recibir algún formulario??

lo digo porque lo ideal es que sea así... y que ademas compruebas con if-then-else si el formulario se envió.... además de que al final de realizar la acción siempre es bueno redireccionar hacia algún otro sitio...

si no sabes controlar esto da cabida a muchos problemas como el que comentas....

PDTA: pésimo titulo para un tema, de seguro muy pocos lo verán bien...
Si existe formulario previo lo indico en el mensaje, que es un formulario donde solo se envia mediante POST dos datos, cantidad e IDE del producto.

Redireccionar es inultil, lo tengo codificado en html, pero el problema no se resuelve por un redireccionamiento comprobado esta. pues lo que realmente hace es duplicar cuando le da la gana porque no es siempre y no tiene un patron fijo, los producos marcados. Hay veces que marcas dos productos y te salen solo 2 y otras que te salen 4, y asi...

En cuanto al tema no rellene ese campo y me debe de haber cogido el principio del texto porque yo ese titulo no me suena, o despues de editar se cambiaria no se..

El problema que el error sale aleatoriamente.

Cita:
Iniciado por VirtualWork Ver Mensaje
Hola!!

Te recomendaria comenzar por hacer un print_r($_GET['cajita']), para verificar que esten pasando las variables como son, y no duplicado.

Como dices que es en algunos casos, verifica que tengan de especial esos casos (caracteres, longitud, etc), tal vez vaya algo oculto y este ocasionando este error.

Tambien no sobraria hacer una verifica si el producto ya esta en el carro, que no lo agregue. Esto precisamente para evitar esta duplicidad, pero ya por "culpa" del cleinte
Los datos los muestra correctamente de echo si te fijas en mi codigo muestro en pantalla el total sacado de base de datos

Código:
"printf("<br>Ha escogido <b>%s</b> con un precio de %.2f € comprando %d productos a un total de %.2f €<br>",$v["producto"],$v["precio"],$_SESSION["cantidad"][$i],$total);
"
Ese codigo lo saca en pantalla si compro dos articulos dos veces sale para cada articulo comprado, si compro 3 salen 3 y asi... los datos no se repiten.

Lo que me sorprende del codigo es que no se porque, que tendra que ver con las sesiones hay momentos que es como si se pulsara f5 una vez cargada la pagina para que se vuelva a ejecutar el codigo.

Pense utilizar variables estaticas de modo que solo se pudiera acceder al codigo una vez pero es inutil, porque no hay llamada recursiva a la funcion ni nada es algo extraño.

Última edición por GatorV; 06/04/2010 a las 16:03

Etiquetas: loco
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 10:19.