Foros del Web » Programando para Internet » PHP »

Porque me inserta dos veces??

Estas en el tema de Porque me inserta dos veces?? en el foro de PHP en Foros del Web. Hola que tal. Estoy haciendo un aplicativo con PHP en el que necesito abrir un pop-up e ingresar los datos de una persona. Todo esto ...
  #1 (permalink)  
Antiguo 02/09/2008, 09:12
 
Fecha de Ingreso: julio-2008
Ubicación: Caldas, Antioquia, Colombia
Mensajes: 81
Antigüedad: 15 años, 9 meses
Puntos: 4
Porque me inserta dos veces??

Hola que tal.

Estoy haciendo un aplicativo con PHP en el que necesito abrir un pop-up e ingresar los datos de una persona. Todo esto me va bien, solo que cuando guardo y reviso en la base de datos me ha insertado el registro dos veces. La llave primaria es un campo auto-increment, por lo que no me saca error.
Esta falla solo se presenta cuando lo ejecuto en IE porque en FF me funciona perfectamente.
No se si tendra que ver, pero antes de abrir la ventana valido la existencia de la persona por medio de ajax. :S

Espero me colaboren.
Gracias y Saludos
  #2 (permalink)  
Antiguo 02/09/2008, 10:15
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 22 años, 5 meses
Puntos: 655
Respuesta: Porque me inserta dos veces??

¿Con qué estas insertando en MySQL? Con PHP
¿Utilizas una sentencia INSERT pura? No, utilizo un script de PHP.

Leyendo lo anterio, ¿Donde es muy probable que esté el problema? en el código de PHP.

Trasladado de BD a PHP.
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
  #3 (permalink)  
Antiguo 02/09/2008, 10:19
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 15 años, 11 meses
Puntos: 43
Respuesta: Porque me inserta dos veces??

Colca el codigo con el que insertas en la Db a ver q puede estar sucediendo!

Saludos
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #4 (permalink)  
Antiguo 02/09/2008, 10:26
 
Fecha de Ingreso: julio-2008
Ubicación: Caldas, Antioquia, Colombia
Mensajes: 81
Antigüedad: 15 años, 9 meses
Puntos: 4
Respuesta: Porque me inserta dos veces??

Hola.

Aca esta el codigo con que inserto. he verificado y todos los datos llegan bien porque he realizado un echo a $query y me sale perfecta incluso la ejecuto en el editor de sentencias de phpmyadmin e ingresa perfectamente 1 solo registro.
pero si lo ejecuto este script por alguna razon (y solo en IE) me ingresa dos registro.

PD: No he incluido en la query el campo idpersona, que es el campo autonumerico y lllave primaria de la tabla.

Código PHP:
$query 'INSERT INTO personas (Doc_persona,Nom_persona,NMTelefono,DSDireccion,DSmunicipio, DSDepto,DSPais,User_ingreso,FEingreso) ';
$query.= "VALUES ('$documento','$Nom_persona','$NMTelefono','$DSDireccion','$DSmunicipio','$DSDepto','$DSPais','$User_ingreso','$FEingreso')";
mysql_query($query); 
Gracias por su colaboracion.
  #5 (permalink)  
Antiguo 02/09/2008, 10:59
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 15 años, 11 meses
Puntos: 43
Respuesta: Porque me inserta dos veces??

realizas algun tipo de redireccionamiento a la misma pagina en algun momento??
el codigo de insert parece estar correcto, pero a lo que me refiero es al codigo completo de la pagina, es necesario saber porq IE inserta dos veces, es posible que sea algun bucle o un redireccionamiento.

Saludos
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #6 (permalink)  
Antiguo 02/09/2008, 11:43
 
Fecha de Ingreso: agosto-2008
Mensajes: 21
Antigüedad: 15 años, 8 meses
Puntos: 3
Respuesta: Porque me inserta dos veces??

Cita:
Iniciado por jasv Ver Mensaje
Hola.

Aca esta el codigo con que inserto. he verificado y todos los datos llegan bien porque he realizado un echo a $query y me sale perfecta incluso la ejecuto en el editor de sentencias de phpmyadmin e ingresa perfectamente 1 solo registro.
pero si lo ejecuto este script por alguna razon (y solo en IE) me ingresa dos registro.

PD: No he incluido en la query el campo idpersona, que es el campo autonumerico y lllave primaria de la tabla.

Código PHP:
$query 'INSERT INTO personas (Doc_persona,Nom_persona,NMTelefono,DSDireccion,DSmunicipio, DSDepto,DSPais,User_ingreso,FEingreso) ';
$query.= "VALUES ('$documento','$Nom_persona','$NMTelefono','$DSDireccion','$DSmunicipio','$DSDepto','$DSPais','$User_ingreso','$FEingreso')";
mysql_query($query); 
Gracias por su colaboracion.


Yo haria un metodo para asegurarme que el problema no es del navegador. Prueba con 2 navegadores distintos.

Despues, yo meteria esto antes del MYSQL en php
Código PHP:


if(isset($_POST['UN-CAMPO-DEL-FORMULARIO'])) {

$query 'INSERT INTO personas (Doc_persona,Nom_persona,NMTelefono,DSDireccion,DSmunicipio, DSDepto,DSPais,User_ingreso,FEingreso) ';
$query.= "VALUES ('$documento','$Nom_persona','$NMTelefono','$DSDireccion','$DSmunicipio','$DSDepto','$DSPais','$User_ingreso','$FEingreso')";
mysql_query($query);  


  #7 (permalink)  
Antiguo 02/09/2008, 12:17
 
Fecha de Ingreso: julio-2008
Ubicación: Caldas, Antioquia, Colombia
Mensajes: 81
Antigüedad: 15 años, 9 meses
Puntos: 4
Respuesta: Porque me inserta dos veces??

Cita:
realizas algun tipo de redireccionamiento a la misma pagina en algun momento??
Pues al final hago un redireccionamiento, pero no a la misma pagina sino a otra:

Código PHP:
<?
include ('conecdb.php');
 
$conn=conex();
$idpersona=$_POST['idpersona'];
$tipodocumento=$_POST['tipodocumento'];
$Doc_persona=$_POST['Doc_persona'];
$documento=$tipodocumento.':'.$Doc_persona;
$Nom_persona=$_POST['Nom_persona'];
$NMTelefono=$_POST['NMTelefono'];
$DSDireccion=$_POST['DSDireccion'];
$DSmunicipio=$_POST['DSmunicipio'];
$DSDepto=$_POST['DSDepto'];
$DSPais=$_POST['DSPais'];
$User_ingreso=$_POST['User_ingreso'];
$FEingreso=$_POST['firstinput'];
$query 'INSERT INTO personas (Doc_persona,Nom_persona,NMTelefono,DSDireccion,DSmunicipio, DSDepto,DSPais,User_ingreso,FEingreso) ';
$query.= "VALUES ('$documento','$Nom_persona','$NMTelefono','$DSDireccion','$DSmunicipio','$DSDepto','$DSPais','$User_ingreso','$FEingreso');";
mysql_query($query);
$id=mysql_insert_id();
echo 
"<script>window.alert('Registro Satisfactorio en la Base de datos!');
        location.href='nueva_cliente.php?idper="
.$id."&tel=".$NMTelefono."';                
    </script>"
;    
?>

Cita:
Iniciado por FajitaMaster Ver Mensaje
Yo haria un metodo para asegurarme que el problema no es del navegador. Prueba con 2 navegadores distintos.
Pues ya lo he probado en Firefox y funciona perfecto.
Pero en Internet Explorer es donde tengo el problema.

Para que me entiendan un poco como funciona lo que estoy haciendo, lo voy a tratar de explicar un poco:

En un formulario tengo un campo de texto y boton. Aca digito el codigo del usuario a buscar. Cuando presiono el boton, ejecuto una rutina en javascript que por medio de ajax hace la consulta para saber si el usuario existe o no. El resultado de la respuesta ajax lo recojo en otra funcion de javascript donde si el codigo no se encuentra, abre una ventana emergente donde esta el formulario para ingresar el nuevo usuario. Aca es donde esta el problema. Cuando le doy guardar los datos me ingresa bien el registro en la base de datos pero me ingresa 2 registros. (Repito... solo en IE). Espero que esto les ayude a ayudarme.

Gracias.
  #8 (permalink)  
Antiguo 02/09/2008, 12:30
 
Fecha de Ingreso: julio-2008
Ubicación: Caldas, Antioquia, Colombia
Mensajes: 81
Antigüedad: 15 años, 9 meses
Puntos: 4
Respuesta: Porque me inserta dos veces??

Cita:
Iniciado por FajitaMaster Ver Mensaje
Despues, yo meteria esto antes del MYSQL en php
Código PHP:


if(isset($_POST['UN-CAMPO-DEL-FORMULARIO'])) {

$query 'INSERT INTO personas (Doc_persona,Nom_persona,NMTelefono,DSDireccion,DSmunicipio, DSDepto,DSPais,User_ingreso,FEingreso) ';
$query.= "VALUES ('$documento','$Nom_persona','$NMTelefono','$DSDireccion','$DSmunicipio','$DSDepto','$DSPais','$User_ingreso','$FEingreso')";
mysql_query($query);  


Pues me ha funcionado asi. Muchas Gracias.
Aunque igual me queda la duda de porque pasaba.
Lo importante es que ya me dio.
Saludos.
  #9 (permalink)  
Antiguo 03/09/2008, 01:49
 
Fecha de Ingreso: octubre-2005
Ubicación: Perú
Mensajes: 303
Antigüedad: 18 años, 6 meses
Puntos: 0
Sonrisa Respuesta: Porque me inserta dos veces??

Puedes publicar el codigo del formulario que envia esos datos? quizas te pueda ayudar
__________________
DESARROLLO Y DISEÑO DE PAGINAS WEB, HOSTING, DOMINIO, TRUJILLO PERU
Diseño web
Trujillo - Perú
  #10 (permalink)  
Antiguo 03/09/2008, 07:21
 
Fecha de Ingreso: julio-2008
Ubicación: Caldas, Antioquia, Colombia
Mensajes: 81
Antigüedad: 15 años, 9 meses
Puntos: 4
Respuesta: Porque me inserta dos veces??

Hola gracias por la colaboracion. Aca esta el codigo completo con el que envio los datos. Saludos...

Código HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Nueva Persona</title>
<link href="application.css" rel="stylesheet" type="text/css" />
<style type="text/css">
<!--
.Estilo2 {
	font-family: Arial, Helvetica, sans-serif;
	font-size: medium;
}
.Estilo3 {color: #000000}
-->
</style>
<script LANGUAGE="JavaScript" type="text/javascript" >
function validar(form)

{	
	if (form.Doc_persona.value == "")  { 
	alert("Por favor ingrese el documento"); 
	form.Doc_persona.focus ();
    return false;
    }
	
	if (form.Nom_persona.value == "")  { 
	alert("Por favor ingrese  el nombre de la persona"); 
	form.Nom_persona.focus ();
    return false;
    }
	
	if (form.NMTelefono.value == "")  { 
	alert("Por favor ingrese el telefono"); 
	form.NMTelefono.focus ();
    return false;
    }
	
	 if (form.DSDireccion.value == "")  { 
	alert("Por favor ingrese  la direccion"); 
	form.DSDireccion.focus ();
    return false;
    }	
	
	 if (form.DSmunicipio.value == "")  { 
	alert("Por favor ingrese el municipio"); 
	form.DSmunicipio.focus ();
    return false;
    }	
	
	if (form.DSDepto.value == "")  { 
	alert("Por favor ingrese el departamento"); 
	form.DSDepto.focus ();
    return false;
    }	
	
	if (form.DSPais.value == "")  { 
	alert("Por favor ingrese el país"); 
	form.DSPais.focus ();
    return false;
    }	
	
	
	if (form.firstinput.value == "")  { 
	alert("Por favor ingrese la fecha"); 
	form.firstinput.focus ();
    return false;
    }	

    form.submit();
 	return true;
}



</script>

<script language="javascript" src="cal2.js">
/*
Xin's Popup calendar script-  Xin Yang (http://www.yxscripts.com/)
Script featured on/available at http://www.dynamicdrive.com/
This notice must stay intact for use
*/
</script>
<script language="javascript" src="cal_conf2.js"></script>
</head>

<body>
<form name="npersona" action="personas3.php" method="post">
<br />
  <table width="433" border="0" align="left">
    <tr>
      <td>Tipo de documento: </td>
      <td><select name="tipodocumento" id="tipodocumento">
          <option value="N" general="general" <? if ($_GET['tdoc']=="N"){ echo 'SELECTED';}?>>N</option>
          <option value="C" <? if ($_GET['tdoc']=="C"){ echo 'SELECTED';}?>>C</option>
      </select></td>
    </tr>
    <tr>
      <td width="201">Documento:</td>
      <td width="218"><input name="Doc_persona" type="text" id="Doc_persona" size="40" value="<? echo $_GET['doc'];?>"/></td>
    </tr>
    <tr>
      <td>Nombre de la persona:</td>
      <td><input name="Nom_persona" type="text" id="Nom_persona" size="40" /></td>
    </tr>
    <tr>
      <td>Tel&eacute;fono: </td>
      <td><input name="NMTelefono" type="text" id="NMTelefono" size="40" /> </td>
    </tr>
    <tr>
      <td>Direcci&oacute;n:</td>
      <td><input name="DSDireccion" type="text" id="DSDireccion" size="40" /></td>
    </tr>
    <tr>
      <td>Municipio:</td>
      <td><input name="DSmunicipio" type="text" id="DSmunicipio" size="40" /></td>
    </tr>
    <tr>
      <td>Departamento:</td>
      <td><input name="DSDepto" type="text" id="DSDepto" size="40" /></td>
    </tr>
    <tr>
      <td>Pa&iacute;s: </td>
      <td><input name="DSPais" type="text" id="DSPais" size="40" /></td>
    </tr>

      <input name="User_ingreso" type="hidden" id="User_ingreso" size="40" value="<? ?>" />
 
     
      <input type="hidden" name="firstinput" size="20" value="<? echo date("Y/m/d");?>"/>          
	<tr>
      <td colspan="2" align="center"><label>
        <input type="submit" name="guadar" value="Guardar" onclick="return validar(this.form)"/>
        <input type="button" name="cancelar" value="Cancelar"  onclick="javascript:window.close();"/>
      </label></td>
    </tr>
  </table>
</form>
</body>
</html> 
  #11 (permalink)  
Antiguo 03/09/2008, 08:22
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: Porque me inserta dos veces??

Hola jasv,

Te pasaba eso debido a que en el control de flujo de tu script seguramente mandabas llamar a tu script directamente y al no tener un control de flujo se realizaba el insert, al tu agregar el if, estas delimitando el control de flujo a que solo se ejecute si hay un valor por post.

Saludos.
  #12 (permalink)  
Antiguo 06/09/2008, 03:53
 
Fecha de Ingreso: octubre-2005
Ubicación: Perú
Mensajes: 303
Antigüedad: 18 años, 6 meses
Puntos: 0
Respuesta: Porque me inserta dos veces??

Hola. Disculpa que no te haya contestado antes, estuve realizando mis actividades laborales. Lo que hago normalmente para enviar un form
mediante javascript es el sgte



tengo un formulario. Ojo. este no tiene el atributo action ni method(quiza spor eso se envia 2 veces).

<form name="form1" id="form1">

los datos a enviar...

<input name="cmdconfirmar" type="button" value="Confirmar" onClick="confirmar();">

</form>

y mas abajo tengo el javascript(que lo utilizo para enviar los datos por post o get, en este caso post):


function confirmar()
{
document.forms.form1.action='reporte_inventario.ph p';
document.forms.form1.method='post';
document.forms.form1.submit();
}


Espero te haya ayudado en algo. Saludos.
__________________
DESARROLLO Y DISEÑO DE PAGINAS WEB, HOSTING, DOMINIO, TRUJILLO PERU
Diseño web
Trujillo - Perú
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 13:04.