Foros del Web » Programando para Internet » PHP »

Se envia doble informacion a base de datos.

Estas en el tema de Se envia doble informacion a base de datos. en el foro de PHP en Foros del Web. Esperando estar en la seccion correcta..... HOLAS!!:.. Necesito un poco de ayuda.... Acabo de seguir un tuto, para crear un pequeño formulario en php y ...
  #1 (permalink)  
Antiguo 29/04/2009, 19:59
Avatar de Snoopy2  
Fecha de Ingreso: diciembre-2002
Ubicación: Lima
Mensajes: 332
Antigüedad: 21 años, 4 meses
Puntos: 1
Se envia doble informacion a base de datos.

Esperando estar en la seccion correcta.....

HOLAS!!:..

Necesito un poco de ayuda....

Acabo de seguir un tuto, para crear un pequeño formulario en php y conectarlo a una base de datos...

Todo ok, pero el problema es que envia doble informacion a la base de datos.

Segun el tuto, esto no deberia pasar por que ya esta cubierto, pero igual ocurre.

Aqui les dejo el query, agradeceria ayuda...

Código PHP:
<?php
$db
=mysql_connect("localhost","base","123123") or die ("No puedo conectarme a la base de datos");
mysql_select_db("datos");
$opt=$HTTP_GET_VARS["opt"];
if (
$opt==1)
{
$nombre=$HTTP_GET_VARS["nombre"];
$email=$HTTP_GET_VARS["email"];
$sql="insert into prospecto (nombre, email) values ('".$nombre."','".$email."')";
$res=mysql_query($sql,$db) or die (mysql_error());
    }
?>

<!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=utf-8" />
<title>Documento sin título</title>
</head>

<script language="javascript">
function verifica()
{
if (f.email.value=="")
{alert ("pro favor ingrese su mail");
return;}
f.opt.value=1;
f.submit();
}


</script>
<body>
<form name="f">
<input type="hidden" name="opt">
<table width="200" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td>Nombre</td>
    <td><label>
      <input type="text" name="nombre" id="textfield" />
    </label></td>
  </tr>
  <tr>
    <td>Email</td>
    <td><input type="text" name="email" id="textfield2" /></td>
  </tr>
  <tr>
    <td colspan="2"><input type="submit" name="button"  onclick=verifica() id="button" value="Enviar" /></td>
  </tr>
</table>
</form>
</body>
</html>
__________________
________________
"El que la sigue la consigue"....con mucho esfuerzo...
  #2 (permalink)  
Antiguo 29/04/2009, 20:08
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Se envia doble informacion a base de datos.

pues no... es imposible que se inserte dos veces a la base de datos...

osea, solo hay un INSERT y solo un mysql_query(); y según el flujo del script, todo es válido...

¿¿como es que aseguras que el dato se inserta doble???

¿¿de verdad no es que ya tienes esos datos, en la base de datos???

(o eres tu, o soy yo.... pero alguien esta confundido)


suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 29/04/2009, 20:17
Avatar de Snoopy2  
Fecha de Ingreso: diciembre-2002
Ubicación: Lima
Mensajes: 332
Antigüedad: 21 años, 4 meses
Puntos: 1
jajaja...bueno , de seguro no soy yo, ...

me explico:

Cargo la pagina, ......se carga, luego ingreso los datos, y le doy click al boton de enviar....se envia, luego, reviso la base de datos y vuala!...se registraron dos veces los datos.....

PD: Por si te lo preguntas, no clicke 2 veces, ya que al clickar la primera desaparecen los datos.

Segun el tuto, las lineas en donde sale OPT, era para eso mismo, eliminar la opcion de que ingresen los datos por duplicado, cosa que "graciosamente", esta sucediendo...
__________________
________________
"El que la sigue la consigue"....con mucho esfuerzo...

Última edición por GatorV; 29/04/2009 a las 20:47
  #4 (permalink)  
Antiguo 29/04/2009, 20:48
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Se envia doble informacion a base de datos.

Tema trasladado desde PHP Configuracion
  #5 (permalink)  
Antiguo 29/04/2009, 21:22
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 17 años, 6 meses
Puntos: 122
Respuesta: Se envia doble informacion a base de datos.

Es por tu funcincón de JS, Estas haciendo submit del formulario dos veces. Tendrías que regresar cancelar la accion por default del boton submit. Esto es lo que pasa:

Presionas el boton y se hace el submit del formulario. Después se activa la función de JS la cual,"curiosamente" también hace un submit. Por eso es que tienes dos veces los datos. Si no me crees, borra el onclick y verás que se soluciona el problema.
__________________
twitter: @imbuzu
  #6 (permalink)  
Antiguo 29/04/2009, 21:52
Avatar de Snoopy2  
Fecha de Ingreso: diciembre-2002
Ubicación: Lima
Mensajes: 332
Antigüedad: 21 años, 4 meses
Puntos: 1
HOla BUzu, bueno, elimine el onclick=verifica() y ahora no envia nada.

me falto algo?

OK, logre eliminar la repeticion, eliminando el JS. y obviamente el onclik.

GRACIAS!

Pero ahora me queda una duda, como haria para comprobar que los datos estan llenos?
__________________
________________
"El que la sigue la consigue"....con mucho esfuerzo...

Última edición por GatorV; 29/04/2009 a las 22:23
  #7 (permalink)  
Antiguo 29/04/2009, 22:06
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 17 años, 6 meses
Puntos: 122
Respuesta: Se envia doble informacion a base de datos.

Como te dije, tendrías que cancelar la acción del botón. Un return false generalmente hace el trabajo. Además, asegúrate de hacer el chequeo del lado del servidor también ya que Js como método de seguridad no es exactamente un buen método.
__________________
twitter: @imbuzu
  #8 (permalink)  
Antiguo 29/04/2009, 22:08
Avatar de Snoopy2  
Fecha de Ingreso: diciembre-2002
Ubicación: Lima
Mensajes: 332
Antigüedad: 21 años, 4 meses
Puntos: 1
Respuesta: Se envia doble informacion a base de datos.

gracias BUZU por tu time!
__________________
________________
"El que la sigue la consigue"....con mucho esfuerzo...
  #9 (permalink)  
Antiguo 29/04/2009, 23:10
Avatar de Adolfiten  
Fecha de Ingreso: enero-2008
Ubicación: Frente a mi monitor...
Mensajes: 572
Antigüedad: 16 años, 3 meses
Puntos: 7
Respuesta: Se envia doble informacion a base de datos.

Sino colocá un

Código HTML:
<button onclick="javascript:verifica()">ENVIAR</button> 
fuera del formulario.
  #10 (permalink)  
Antiguo 29/04/2009, 23:14
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Se envia doble informacion a base de datos.

El problema es que usando un button sin más se pierde el sentido semántico que debería tener (además de no ser accesible sin Javascript).

Si lo que se pretende con el botón es Enviar el formulario, lo correcto es usar el botón submit. Luego, en el evento onsubmit se realizan las validaciones correspondientes y si falla, sólo hay que cancelar la acción del evento.

Saludos.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #11 (permalink)  
Antiguo 29/04/2009, 23:25
Avatar de Adolfiten  
Fecha de Ingreso: enero-2008
Ubicación: Frente a mi monitor...
Mensajes: 572
Antigüedad: 16 años, 3 meses
Puntos: 7
Respuesta: Se envia doble informacion a base de datos.

Lo único malo que le encuentro es la dependencia de JS, después me parecen lo mismo.
  #12 (permalink)  
Antiguo 29/04/2009, 23:41
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Se envia doble informacion a base de datos.



si, yo era el que estaba confundido... suerte!!


por cierto, yo opino que por flexibilidad valides también del lado del servidor, digo... para no depender del Javascript
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #13 (permalink)  
Antiguo 30/04/2009, 13:20
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 17 años, 6 meses
Puntos: 122
Respuesta: Se envia doble informacion a base de datos.

Adolfiten, eso que propones no es una buena solución por las razones que señaló David. No se debe de depender de Js por cuestiones de accesibilidad.
__________________
twitter: @imbuzu
  #14 (permalink)  
Antiguo 30/04/2009, 13:23
Avatar de Snoopy2  
Fecha de Ingreso: diciembre-2002
Ubicación: Lima
Mensajes: 332
Antigüedad: 21 años, 4 meses
Puntos: 1
Respuesta: Se envia doble informacion a base de datos.

Bueno encontre un articulo ayer sobre JS o PHP en lo que era validar, y ya lo tengo claro, si lo encuentro lo linkeo , por que me parecio muy bien explicado.

Gracias.
__________________
________________
"El que la sigue la consigue"....con mucho esfuerzo...
  #15 (permalink)  
Antiguo 30/04/2009, 21:01
Avatar de Adolfiten  
Fecha de Ingreso: enero-2008
Ubicación: Frente a mi monitor...
Mensajes: 572
Antigüedad: 16 años, 3 meses
Puntos: 7
Respuesta: Se envia doble informacion a base de datos.

Es un buen punto.

De la misma forma cualquier aplicación que tenga ajax para funcionar, no es totalmente accesible. Me parece que a estas alturas el uso de JS es más que natural, de todas formas el punto de la accesibilidad es cierto.
  #16 (permalink)  
Antiguo 01/05/2009, 13:33
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 17 años, 6 meses
Puntos: 122
Respuesta: Se envia doble informacion a base de datos.

Cita:
De la misma forma cualquier aplicación que tenga ajax para funcionar, no es totalmente accesible. Me parece que a estas alturas el uso de JS es más que natural, de todas formas el punto de la accesibilidad es cierto.
Si, es muy natural en los navegadores, pero no en otros dispositivos. Y aun que sea muy natural, hay usuarios (aqui en FDW he conocido por lo menos uno) que han preferido navegar sin Js. Curioso, pero cierto. Me gustaría que el mundo fuera perfecto y no tuviéramos que preocuparnos de esas cosas, pero desgraciadamente no es así.

Saludos.
__________________
twitter: @imbuzu
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 16:11.