Foros del Web » Programando para Internet » PHP »

Inserciones dobles con php y mysql

Estas en el tema de Inserciones dobles con php y mysql en el foro de PHP en Foros del Web. Saludos, Tengo un problemilla que ya se me ha hecho enorme , estoy programando un sitio en php que realiza una conexión a una base ...
  #1 (permalink)  
Antiguo 08/08/2002, 14:49
 
Fecha de Ingreso: agosto-2002
Mensajes: 5
Antigüedad: 15 años, 4 meses
Puntos: 0
Inserciones dobles con php y mysql

Saludos,

Tengo un problemilla que ya se me ha hecho enorme , estoy programando un sitio en php que realiza una conexión a una base de datos mysql, cuando una pagina es abierta, se inserta la información que mande de un formulario pero por alguna razón esta se carga dos veces insertando dobles los registros, ya revise mi código una y otra vez y no encuentro el problema, manejo todas las secciones de mi codigo con funciones y un switch que en base a lo que reciba presento las secciones necesarias o realizo las inserciones por ejemplo..

agradezco cualquier comentario URGE
GRACIAS

si es posible que me contesten a mi correo lo agradezco sinceramente...

Axell.
  #2 (permalink)  
Antiguo 08/08/2002, 15:29
Avatar de bhonox  
Fecha de Ingreso: julio-2002
Ubicación: Rengo-Viña del Mar-Stgo
Mensajes: 1.213
Antigüedad: 15 años, 5 meses
Puntos: 0
Re: Inserciones dobles con php y mysql

creo q debes poner el codigo o parte de tu codigo donde haces la insercion en la tabla, o mejor seria desde el formulario

ATTE BHONOX
  #3 (permalink)  
Antiguo 08/08/2002, 15:55
 
Fecha de Ingreso: agosto-2002
Mensajes: 5
Antigüedad: 15 años, 4 meses
Puntos: 0
Re: Inserciones dobles con php y mysql

De hecho todo el código se encuentra en una misma pagina, perdon por no explicar esto, como comente esta pagina presenta un formulario cuando no recibe una variable llamada action, cuando esta es recibida y contiene el valor "guardar", se llama el procedimiento para el almacenamiento, si es insertada correctamente llama una funcion que imprime un mensaje indicando el proceso terminado con exito y en caso contrario un error, lo que he notado es que despues de llenar el formulario y enviar la informacion la pagina se ejecuta 2 veces insertando dos registros...

gracias !!!

  #4 (permalink)  
Antiguo 08/08/2002, 16:33
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Re: Inserciones dobles con php y mysql

Hola,

Como bien ha dicho BHONOX PON EL CODIGO!!!!!!!!!!!

Es que sin el solo podemos dar palos de ciego. Es que aunque seamos los mejores expertos en PHP del mundo mundial, SOMOS HUMANOS (la mayoria ;) ) y no podemos conocer tu codigo si no lo pones.

Espero no haberte molestado con el tono de mi respuesta. Para que veas que soy una buena persona (muy en el fondo), te voy a dar algun consejo para que intentes solucionarlo tu solito.

1.- ¿ en cuantos puntos ejecutas la consulta de insercion ? Mas que nada, es que para que se graben 2 registros hay que ejecutar 2 veces la insercion. Si tienes en todo tu codigo solo 1 sentenca del tipo $rs=mysql_query($consulta_insercion) y no esta dentro de ningun tipo de bucle, funcion recursiva o funcion que es llamada varias veces, es decir, solo se ejecuta una vez, entonces no tengo ni idea de lo que puede ser.
2.- Si tienes varios puntos donde se ejecuta la insercion, averigua cuales son los que se ejecutan. Para ello, yo usaria el viejo metodo de poner echos justo delante o justo detras de la linea donde se ejecuta la consulta. El mensaje del echo identificara que insercion se ejecuta. Lugo miras tu codigo para saber por que se han ejecutado. Una de las cosas que echo en falta en PHP es un depurador, que haria que el seguimiento de la ejecucion del script fuera pan comido.
3.- Comentas que usas varias ramas de ejecucion, y que usas switch. ¿ has revisado que no te falta ningun switch, o ; o } o si no te faltan, que esten bien colocados ? ¿ las condiciones estan bien definidas, no has puesto = cuando querias poner == ? Una gran mayoria de los errores son por culpa de equivocaciones y olvidos al escribir.
4.- ¿has revisado la logica de tus condiciones? Repasalo a mano, simulando tu la ejecucion del script.

Prueba los consejos que te doy. Quizas, con mucha suerte, he dado con el fallo y lo puedes solucionar. Son consejos fruto de la experiencia. Aunque sin el codigo es como intentar leer el futuro.

Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 08/08/2002, 18:34
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Re: Inserciones dobles con php y mysql

jajaja Adivina adivinanza .. q error será sin ver el codigo? ni un error de PHP textual ..

Un saludo,
  #6 (permalink)  
Antiguo 08/08/2002, 19:51
 
Fecha de Ingreso: agosto-2002
Mensajes: 5
Antigüedad: 15 años, 4 meses
Puntos: 0
Re: Inserciones dobles con php y mysql

<?

session_start();

if (!isset ($HTTP_SESSION_VARS['usrData'])){
exit();
die();
}

function headerPage(){

?>
<html>
<head>
<title>Intersys México S.A. de C.V.</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="../extras/style.css" rel="stylesheet" type="text/css">
</head>
<body leftmargin="5" topmargin="0" marginwidth="0" marginheight="0">
<? } //headerPage

function encabezadoPage(){
global $usrData;
?>
<table width="830" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="left" class="item"></td>
</tr>
<tr>
<td align="left" class="titulo">Control de Minutas</td>
</tr>
<tr>
<td align="left" class="itemsml"><a href="index.php?action=crear"></a>
<? if ($usrData['minutasA'] == 1 && $usrData['minutasC'] == 1){ ?>
<table width="150" border="1" cellspacing="0" bordercolor="#FF6600">
<tr>
<td width="69" align="center" bgcolor="#FF6600" class="itemsml"><a href="index.php?action=crear"><fon t color="#FFFFFF">Agregar</font></a></td>
<td align="center" bgcolor="#FF6600" class="itemsml"><a href="index.php"><font color="#FFFFFF">Buscar</font></a></td>
</tr>
</table>
<? } ?>
<? if ($usrData['minutasA'] == 0 && $usrData['minutasC'] == 1){ ?>
<table width="75" border="1" cellspacing="0" bordercolor="#FF6600">
<tr>
<td align="center" bgcolor="#FF6600" class="itemsml"><a href="index.php"><font color="#FFFFFF">Buscar</font></a></td>
</tr>
</table>
<? } ?>
<? if ($usrData['minutasA'] == 1 && $usrData['minutasC'] == 0){ ?>
<table width="75" border="1" cellspacing="0" bordercolor="#FF6600">
<tr>
<td width="69" align="center" bgcolor="#FF6600" class="itemsml"><a href="index.php?action=crear"><fon t color="#FFFFFF">Agregar</font></a></td>
</tr>
</table>
<? } ?>
</td>
</tr>
<tr
  #7 (permalink)  
Antiguo 08/08/2002, 19:56
 
Fecha de Ingreso: agosto-2002
Mensajes: 5
Antigüedad: 15 años, 4 meses
Puntos: 0
Re: Inserciones dobles con php y mysql

perdon, el código es algo extenso, lo pongo a su disposición en esta pagina:

cabe mensionar que la inserción es de la siguiente manera:

se inserta un registro con la información de una minuta (información de una junta), una vez insertado se toma el id de este y se procede a insertar un registro por cada uno de los pendientes registrados en la minuta, mi problema es que son los pendientes los que se duplican:

http://148.246.129.238/codigo/index.zip
http://148.246.129.238/codigo/db.zip

omitan en la parte inicial del archivo la información de la sesion

index.zip --> codigo
db.zip --> base de datos

gracias y disculpen por no iniciar poniendo el codigo...

axell.
  #8 (permalink)  
Antiguo 09/08/2002, 04:42
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Re: Inserciones dobles con php y mysql

Hola,

Por lo que veo, el problema lo tienes con la seccion de guardar, en concreto al llamar a la funcion almacenaPendiente(). Como esta dentro de un bucle, tienes que verificar que se ejecuta el numero correcto de veces. Para eso, te aconsejo que justo delante de llamar a almacenaPendiente() dentro del if dentro del bucle, hagas echos de las variables que vas ha escribir en el registro. Asi veras que registros s se escriben en cada ejecucion. Si es que se escriben mas registros de los que deberian, revisa condiciones del bucle y del if. Si las condiciones estan bien, comprueba el valor de las variables que controlan el bucle y el if. Si tienen valores que no son correctos, trazas sus asignaciones a lo largo del flujo del programa. Si pruebas todo lo anterior, y sigue sin funcionar, revisa la logica del programa. Y es que en eso no te podemos ayudar. Tu eres el que has hecho ( o mantienes) el script, tu sabes lo que tiene que hacer en cada momento. Yo no he visto ningun error de codigo (;, } y demas). Pero he visto cosas "extrañas", que no tienen que estar mal, todo depende de la logica del programa. Por ejemplo, lo de $id_minuta. Lo obtienes al llamar a almacena(), y luego, sin hacer nada con ese valor, lo pisas con el valor que te devuelve la funcion obtienePorFecha(). Para mi eso no tiene sentido, pero puede que sea la forma de hacerlo de acuerdo con la logica del programa.

Ya lamento no poderte ayudar mas. Intenta trazar, aunque sea a mano, la ejecucion del script, linea a linea, viendo que valores toman las variables. Quizas encuentres que lo que en su dia te parecia logico y que era como tenia que ser, es lo que ahora hace que no te funcione. Suerte.


Josemi

Aprendiz de mucho, maestro de poco.
  #9 (permalink)  
Antiguo 09/08/2002, 09:55
 
Fecha de Ingreso: agosto-2002
Mensajes: 5
Antigüedad: 15 años, 4 meses
Puntos: 0
Re: Inserciones dobles con php y mysql

Josemi:

gracias por tus recomendaciónes, a decir verdad esas cosas como lo de $id_minuta mi flujo original era obtener el numero identificador de la minuta almacenada con la instrucción mysql_insert_id pero al realizarse dos inserciones causaba problemas y busque alternativas, (desquiciadas quiza, pero tu sabes lo que es desesperarse cuando algo no sale y urge)...

gracias, y estaré en contacto con esto...

saludos !

axell.
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 08:07.