Foros del Web » Programando para Internet » PHP »

Orientacion PHP y MySQL

Estas en el tema de Orientacion PHP y MySQL en el foro de PHP en Foros del Web. Estoy teniendo un problema y quisiera saber por donde empezar a revisar mi script. Porque supuestamente funciona bien. Funciona mal cuando este script corre en ...
  #1 (permalink)  
Antiguo 06/12/2004, 13:19
Avatar de granbosteron  
Fecha de Ingreso: agosto-2004
Mensajes: 164
Antigüedad: 13 años, 3 meses
Puntos: 1
Exclamación Orientacion PHP y MySQL

Estoy teniendo un problema y quisiera saber por donde empezar a revisar mi script. Porque supuestamente funciona bien.

Funciona mal cuando este script corre en el servidor On-Line correspondiente a la Pagina Web al cual pertenece.

El Script es un carrito de compras, el cual si me lo pongo a explicar y a mostrarselos a ustedes, quiza ni quieran revisarlo.

El problema es el siguiente. Tengo para registrar las ordenes de compra en 3 TABLAS :
1- TABLA ORDENES (guardo ID de la orden y datos del usuario)
2- TABLA PRODUCTOS (guardo ID de la orden y los productos)
3- TABLA TOTAL (guardo ID de la orden y el TOTAL (precio) de la suma de productos)

EL ERROR:
Lo probe y funciona bien, pero algunas veces llegan ordenes de compra de otros usuarios, por las cuales en las TABLAS 1 y 2 se inserta todo bien, pero al llegar a la TABLA 3 en vez de guardarme un solo registro del ID de la orden mas el total de la orden, me guarda 2 registros con diferentes totales. El precio de estos totales corresponde igualemente al precio de los productos.

Ejemplo del script (muy por arriba):

Código PHP:
INSERT TABLA1 (NUEVO ID ORDENDATOS DEL USUARIO);

foreach(
PRODUCTOS){
INSERT TABLA2 (ID ORDENDATOS DEL PRODUCTO);
$total+=$producto_precio;
}

INSERT TABLA3 (ID ORDEN$total); 
Ejemplo (con error):
Código HTML:
TABLA 1      ID ORDEN          USUARIO
                 1             Cachito

TABLA 2      ID ORDEN          PRODUCTO       PRECIO
                 1                112          $ 10
                 1                 45          $ 11

TABLA 3      ID ORDEN                         TOTAL
                 1                             $ 10
                 1                             $ 11
Ejemplo (deberia ser asi):
Código HTML:
TABLA 1      ID ORDEN          USUARIO
                 1             Cachito

TABLA 2      ID ORDEN          PRODUCTO       PRECIO
                 1                112          $ 10
                 1                 45          $ 11

TABLA 3      ID ORDEN                         TOTAL
                 1                             $ 21
Vean como es el script, porque lo primero que me va a decir es que EL INSERT DEL TOTAL DEBE ESTAR DENTRO DE UN WHILE O DEL FOREACH, pero no es asi, es tal cual como ven en el script mas arriba. Ademas como dije antes yo lo pruebo agregando muchos productos o de a 2 productos o de un solo producto y siempre me funciona bien. Pero tengo ordenes de otros usuarios que me llegan con ese ERROR.

Que puede ser??? muchas visitas en el sitio ?? alguna interrupcion en los INSERT del MySQL ??? algun problema de Sessiones ??

Si pueden orientarme en los posibles errores y soluciones, se los agradeceria mucho !!
Perdon la extencion del problema.
__________________
Saludos :adios: :adios: :adios:
  #2 (permalink)  
Antiguo 06/12/2004, 14:24
Avatar de granbosteron  
Fecha de Ingreso: agosto-2004
Mensajes: 164
Antigüedad: 13 años, 3 meses
Puntos: 1
Alguna idea ???
esta bien que pregunte Aqui en el Foro de PHP.... o pude ser un problema de Bases de datos ? ....

Mas bien me parece que es de codigo con respecto a muchas visitas o algun tipo de interrupcion cuando se ejecuta dicho script ... que puede ser y que soluciones empiezo a buscar ??

Otra vez Gracias....!!!
__________________
Saludos :adios: :adios: :adios:
  #3 (permalink)  
Antiguo 06/12/2004, 16:35
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 14 años, 7 meses
Puntos: 35
loading.........



Ohhh mi amigo le diste todo tu tiempo a explicarlo pero yo no se como ayudarte específicamente, solo puedo decirte que pongas en codigo php como coges las sumas de los productos, pero si dices que a veces te llega bien ya veces mal, debe ser alguna ejecucion interrumpida.



connection closed.
__________________

Maborak Technologies
  #4 (permalink)  
Antiguo 06/12/2004, 20:30
Avatar de granbosteron  
Fecha de Ingreso: agosto-2004
Mensajes: 164
Antigüedad: 13 años, 3 meses
Puntos: 1
Gracias por tu respuesta...

Los precios los recojo de un array en session que contiene los ID en BASE de los productos.... entonces antes de insertarlos... consulto la base de datos y luego para el TOTAL los voy almacenando en la variable $total.

Alguien tiene mas opiniones al respecto ???
Puede existir algun tipo de interrupcion cuando proceso los INSERT en la Base de datos...

Saludos
__________________
Saludos :adios: :adios: :adios:
  #5 (permalink)  
Antiguo 06/12/2004, 20:44
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Bueno... ahora que ya lo explicaste todo... lo mejor es que pongas aquí el código que utilizas...porque así como lo cuentas parece estar bien...
Sin ver el código lamentablemente nos pondríamos a divinar y a dar opiniones a ciegas sobre algo que tal vez no sea el error.

Saludos
  #6 (permalink)  
Antiguo 06/12/2004, 21:28
Avatar de granbosteron  
Fecha de Ingreso: agosto-2004
Mensajes: 164
Antigüedad: 13 años, 3 meses
Puntos: 1
Gracias por tu respuesta.

Bueno les paso el codigo para que lo vean, esta es la estructura pero simplifique en los datos mas importantes, si no serian muchos y se volverian locos...

Código PHP:
<?
    
// NUEVA ORDEN
    
$gen=query("SELECT MAX(orden_id) FROM ORDENES");
    if(list(
$idmax)= fetch($gen)){
      
$idmax++;
      
//TOMO DE LA BASE LOS DATOS DEL USUARIO EN SESSION
      
$cur=query("SELECT nombre, apellido 
      FROM USUARIOS
      WHERE usuario_id='"
.$_SESSION['id_user']."'");
       list(
$nombre$apellido) = fetch($cur);
        
      
#ORDEN
      
$insert="INSERT into ORDENES(orden_id, nombre, apellido)";
      
      
$values="values($idmax, '$nombre', '$apellido')";
      
$insert=$insert.$values;
      
query($insert);
      
      
//PRODUCTOS
      
$i=0;
      
$orden_total=0;
      foreach(
$_SESSION['items'] as $variable => $valor){
      
$i++;
      if(
$valor){
        
//OBTENGO PRECIO EN BASE DE C/PRODUCTO
        
$cur_var=query("SELECT producto_id, producto_nombre, precio
        FROM PRODUCTOS 
        WHERE producto_id='$valor'"
);
          list(
$producto_id$producto_nombre$precio) = fetch($cur_var);


        
$insert="INSERT into ORDEN_PORDUCTO(orden_id, producto_id, producto_nombre, cantidad)";
        
$values="values($idmax, '$producto_id', '$producto_nombre', '".$_SESSION['cantidad'][$i]."')";
        
$insert=$insert.$values;
        
query($insert);
      
        
$orden_total+=$precio*$_SESSION['cantidad'][$i];
      }
      }
      
//ORDEN TOTAL
      
$insert_total="INSERT into ORDEN_TOTAL(orden_id, orden_total)";
      
$values="values($idmax, '$orden_total')";
      
$insert_total=$insert_total.$values;
      
query($insert_total);
    }
?>
A ver si asi lo comprenden mejor.
GRACIAS
__________________
Saludos :adios: :adios: :adios:
  #7 (permalink)  
Antiguo 07/12/2004, 07:53
Avatar de granbosteron  
Fecha de Ingreso: agosto-2004
Mensajes: 164
Antigüedad: 13 años, 3 meses
Puntos: 1
Es valido este script que encontre ????????
en realidad lo saque de la prog. de un foro...

Código PHP:
// addslashes to vars if magic_quotes_gpc is off
// this is a security precaution to prevent someone
// trying to break out of a SQL statement.
//
if( !get_magic_quotes_gpc() ){
    if( 
is_array($HTTP_GET_VARS) ){
        while( list(
$k$v) = each($HTTP_GET_VARS) ){
            if( 
is_array($HTTP_GET_VARS[$k]) ){
                while( list(
$k2$v2) = each($HTTP_GET_VARS[$k]) ){
                    
$HTTP_GET_VARS[$k][$k2] = addslashes($v2);
                }
                @
reset($HTTP_GET_VARS[$k]);
            }else{
                
$HTTP_GET_VARS[$k] = addslashes($v);
            }
        }
        @
reset($HTTP_GET_VARS);
    }

    if( 
is_array($HTTP_POST_VARS) ){
        while( list(
$k$v) = each($HTTP_POST_VARS) ){
            if( 
is_array($HTTP_POST_VARS[$k]) ){
                while( list(
$k2$v2) = each($HTTP_POST_VARS[$k]) ){
                    
$HTTP_POST_VARS[$k][$k2] = addslashes($v2);
                }
                @
reset($HTTP_POST_VARS[$k]);
            }else{
                
$HTTP_POST_VARS[$k] = addslashes($v);
            }
        }
        @
reset($HTTP_POST_VARS);
    }

    if( 
is_array($HTTP_COOKIE_VARS) ){
        while( list(
$k$v) = each($HTTP_COOKIE_VARS) ){
            if( 
is_array($HTTP_COOKIE_VARS[$k]) ){
                while( list(
$k2$v2) = each($HTTP_COOKIE_VARS[$k]) ){
                    
$HTTP_COOKIE_VARS[$k][$k2] = addslashes($v2);
                }
                @
reset($HTTP_COOKIE_VARS[$k]);
            }else{
                
$HTTP_COOKIE_VARS[$k] = addslashes($v);
            }
        }
        @
reset($HTTP_COOKIE_VARS);
    }

__________________
Saludos :adios: :adios: :adios:
  #8 (permalink)  
Antiguo 07/12/2004, 14:21
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Cita:
Iniciado por granbosteron
Es valido este script que encontre ????????
en realidad lo saque de la prog. de un foro...
Si lo sacaste de la programación de un foro (supongo phpBB) es porque funciona... no entiendo a qué te refieres con "es válido"...
Lo que hace ese pedazo de código es verificar si la directiva magic_quotes_gpc está activa... si no lo está, agrega los slashes "manualmente".
Y lo que tampoco hallo es la relación ente tu pregunta original y ésta última.
Saludos
  #9 (permalink)  
Antiguo 07/12/2004, 23:05
Avatar de granbosteron  
Fecha de Ingreso: agosto-2004
Mensajes: 164
Antigüedad: 13 años, 3 meses
Puntos: 1
Gracias por tu respuesta!!!..

Te explico...
Si lo saque de phpbb2, seguramente funciona.

Este Script lo baje para revisarlo, guiandome en relacion a la existencia de algun tipo de interrupcion durante el proceso de consulta o actualizacion con la base MySQL....

Con todo lo que explique desde el principio, lo unico que se me ocurre es que mi Script no funcione por algun tipo de interrupcion durante el proceso con la base de datos...

sirve para esto ?? el script ultimo que les mostre..
o para que es en realidad??

Gracias de nuevo!
__________________
Saludos :adios: :adios: :adios:
  #10 (permalink)  
Antiguo 08/12/2004, 18:04
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Cita:
Iniciado por granbosteron
Con todo lo que explique desde el principio, lo unico que se me ocurre es que mi Script no funcione por algun tipo de interrupcion durante el proceso con la base de datos...

sirve para esto ?? el script ultimo que les mostre..
o para que es en realidad??
Ya te lo dije...
Cita:
Iniciado por jpinedo
Lo que hace ese pedazo de código es verificar si la directiva magic_quotes_gpc está activa... si no lo está, agrega los slashes "manualmente".
Lo mismo puedes hacer tú simplemente con la función addslashes()... puedes ver la documentación en el manual.

Ahora, tú dices que el error puede ser provocado por alguna interrupción... y definitivamente ese no es el caso... porque se insertan varios registros donde debería insertarse uno.

Lo que debería hacer es controlar el flujo de ese código poniendo funciones de salida como:
Código PHP:
echo "El flujo pasa por aquí"
Lo más probable es que sea algún error tonto y pequeño que ya de tanto buscarlo se nos hace "invisible"...

Saludos
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 07:10.