Hola!

Registrándote como bakuno podrás publicar, compartir y comunicarte en privado con otros bakuos :D

Regístrame ya!

MYSQL.los datos se insertan varias veces en la bbdd

  • Autor de tema Autor de tema kaly7
  • Fecha de inicio Fecha de inicio

kaly7

Becerro
Desde
17 Abr 2009
Mensajes
48
Hola, tengo un pequeño problema que siempre me ha pasado pero nunca he sabido solucionar, bueno al tema:
tengo una base de datos con 3 campos para introducir datos los cuales se guardan mediante un formulario de busqueda, lo que hago es un $_POST de los datos del formulario y estos los inserto con un insert en la base de datos, pues bien siempre y digo siempre se me insertarn 2, 3, 4 o 5 veces los mismos datos con una diferencia de tiempo de pocos segundos, el codigo con el que inserto los datos es el siguiente:

PHP:
require('conexionbd.php');
$busqueda=$_POST['q'];
$fecha=time();
mysql_selectdb('mi_bd');
$consulta="INSERT INTO consultas (numero, consulta, fecha) value ('','".$busqueda."','".$fecha."')";
$insertar=mysql_query($consulta,$bd);

no se que es lo que hago mal pero siempre se insertan varias veces los mismos datos.

¿alguna solucion? (que seguro que la hay)

Un saludo
 
A lo mejor si presionas muchas veces el botón de guardar. hace q te guarde muchas veces el mismo registro :P
 
seguro que es todo el código?

el codigo de insertar en la base de datos es ese, si te refieres que si he puesto todo el codigo de la web... no, jejeje no lo he puesto.

y tampoco presiono varias veces el boton de guardar.

Un saludo
 
usas sesiones? a mi me pasava lo mismo cuando finalizaba una session.
 
usas sesiones? a mi me pasava lo mismo cuando finalizaba una session.

que va, no uso sesiones ni cookies ni nada, es mas, para que veais la web es http://www.buscarpdf.com, lo que hago es guardar cada busqueda para luego hacer un apartado con las ultimas busquedas, pero no puedo ponerlo todavia porque siempre se guarda cada consulta 3 o 4 veces, esto me ha pasado ya con mas webs, pero nunca lo he podido solucionar.

Un saludo
 
el codigo de insertar en la base de datos es ese, si te refieres que si he puesto todo el codigo de la web... no, jejeje no lo he puesto.

y tampoco presiono varias veces el boton de guardar.

Un saludo
Postea todo el archivo, no todo el sitio...
 
Postea todo el archivo, no todo el sitio...

Pongo el body que es donde está basicamente la web, en la cabecera tengo meta-etiquetas y llamadas a javascript.
HTML:
<body>
<div id="divprincipal" align="center">
<table border="0" cellpadding="0" cellspacing="0">
    <tr>
        <td>
            <img src="logo.png"/>
        </td>
    </tr>
</table>
<br />
<table border="0" cellpadding="0" cellspacing="0"></table>
    <tr>
        <td>
    <form action="bus.php" id="formBusqueda" name="formBusqueda">
        <input type="text" name="q" class="cajabusq"/>
        <input type="submit" name="sa" class="botonbuscar" value="Buscar" />
    </form>
       </td>
        
    </tr>
     </form>
</table>
<br />
</div>
<div id="resultados">

</div>
</body>

y bus.php tiene el siguiente codigo que es el que inserta los datos en la base de datos:
PHP:
require('conex_bd.php');
$busqueda=$_POST['q'];
$fecha=time(); 
mysql_selectdb('mi_bd');
$consulta="INSERT INTO consultas (numero, consulta, fecha) value ('','".$busqueda."','".$fecha."')";
$insertar=mysql_query($consulta,$bd);
 
Hola, tengo un pequeño problema que siempre me ha pasado pero nunca he sabido solucionar, bueno al tema:
tengo una base de datos con 3 campos para introducir datos los cuales se guardan mediante un formulario de busqueda, lo que hago es un $_POST de los datos del formulario y estos los inserto con un insert en la base de datos, pues bien siempre y digo siempre se me insertarn 2, 3, 4 o 5 veces los mismos datos con una diferencia de tiempo de pocos segundos, el codigo con el que inserto los datos es el siguiente:

PHP:
require('conexionbd.php');
$busqueda=$_POST['q'];
$fecha=time();
mysql_selectdb('mi_bd');
$consulta="INSERT INTO consultas (numero, consulta, fecha) value ('','".$busqueda."','".$fecha."')";
$insertar=mysql_query($consulta,$bd);
no se que es lo que hago mal pero siempre se insertan varias veces los mismos datos.

¿alguna solucion? (que seguro que la hay)

Un saludo

Cambia el comando "require('conexionbd.php');" por "require_once('conexionbd.php');"

lo que esta pasando es que estas abriendo muchas conexiones y cada vez que haces un insert esta haciendolo en diferentes conexiones, con require_once no importa la cantidad de paginas siempre se mantiene una sola conexion.

Saludos
 
ami me pasaba lo mismo pero cuando eran distintas tablas, te dejo el sitio que cree para un trabajo si es algo similar a lo que quieres te comparto el código ya que ahorita no estoy en mi pc

http://videosyseries.com/prueba/pruebita2.php
gracias pero no es eso lo que busco exactamente, aunque me gustaria saber de donde sacas esos iconos de consultar, formulario...


Cambia el comando "require('conexionbd.php');" por "require_once('conexionbd.php');"

lo que esta pasando es que estas abriendo muchas conexiones y cada vez que haces un insert esta haciendolo en diferentes conexiones, con require_once no importa la cantidad de paginas siempre se mantiene una sola conexion.

Saludos

Vale acabo de cambiarlo y estaré probando unas horas, si funciona (que seguramente funcione) te lo comento.

Un saludo a los 2
 
Bueno pues ya he conseguido solucionar el problema, no se si es de la manera mas correcta, pero el caso es que se ha solucionado, y es desde phpmyadmin selecciono el campo de la tabla que quiero que no se repitan los insert que haga, en el apartado de accion le pongo a dicho campo la opcion de único, asi no se me van a insertar 2 veces el mismo valor.

Un saludo
 
Es valido pero...

Bueno pues ya he conseguido solucionar el problema, no se si es de la manera mas correcta, pero el caso es que se ha solucionado, y es desde phpmyadmin selecciono el campo de la tabla que quiero que no se repitan los insert que haga, en el apartado de accion le pongo a dicho campo la opcion de único, asi no se me van a insertar 2 veces el mismo valor.

Un saludo

Bueno estoy mas de acuerdo con la ultima idea , puedes decirnos si usaste require_once

Grax
 
Bueno pues ya he conseguido solucionar el problema, no se si es de la manera mas correcta, pero el caso es que se ha solucionado, y es desde phpmyadmin selecciono el campo de la tabla que quiero que no se repitan los insert que haga, en el apartado de accion le pongo a dicho campo la opcion de único, asi no se me van a insertar 2 veces el mismo valor.

Un saludo

Pues si solucionaste un problema pero no de la mejor manera, intenta probando el require_once; ya que con lo que hiciste fue no permitiendo campos con el mismo valor, pero si no es una llave primaria entonces puede tener el mismo valor que otro campo. Bueno nose si me explique bien. saludos
 
Bueno, que tal si modificas el codigo de la base de datos en la tabla consultas, colocandole una clave primaria a dicha tabla.
algo como asi:
create table consultas (numero int not null primary key, consulta varchar(20) not null,fecha date);
y prueba a ver...
 
sABES AMIGO DESDE TU BD DECLARA EN numero INDENTITY O OTRA OPCION ES QE CREA UN SP PARA COMPARAR
numero, consulta, fecha O UTILIZA EL distinTIC SI SIGES UTILIZANDO EL CODIGO
HACI
$consulta="INSERT INTO consultas (numero, consulta, fecha) value ('','".$busqueda."','".$fecha."')";
VAS A TENER MUCHOS PROBLEMAS NO HAGAS CASO MEJOR UTILIZA--- DB2---
 
wooow nunca habia visto un problema asi y unas soluciones asi jajajja
son raros bueno en fin

que tal si te pongo el codigo de todo

tienes tu tabla

create table consultas
(
id_busqueda int unsigned not null auto_increment primary key,
busqueda varchar(255) not null,
fecha date not null
)

luego aqui tienes tu formulario con el cual envias los datos

<body>
<div id="divprincipal" align="center">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<img src="logo.png"/>
</td>
</tr>
</table>
<br />
<table border="0" cellpadding="0" cellspacing="0"></table>
<tr>
<td>
<form action="bus.php" id="formBusqueda" name="formBusqueda">
<input type="text" name="q" class="cajabusq"/>
<input type="submit" name="sa" class="botonbuscar" value="Buscar" />
</form>
</td>

</tr>
</form>
</table>
<br />
</div>
<div id="resultados">

</div>
</body>

jaa este te lo copie pork me dio wueba escribirlo jajaj

y luego tienes tu codigo php con el que resibes los datos de tu formulario
y los insertas en la base de datos

require_once("conexion.php");

$busqueda = $_POST["q"];
//Digamos que ya tienes seleccionada la base de datos ok

$consulta = "insert into consultas values (' ', '".$busqueda."', 'now()')";
$insertar = mysql_db_query($bd, $consulta, $conexion);

si ok ahi esta espero y te sirba de algo saludos
 
Debes colocar un isset al boton porque cada vez q la pagina actualiza te saldra ese problema lo que debes hacer es

hacer un if algo asi
if($_POST['nombre del boton'] != null){

Aca iria todo tu codigo }

else

{
echo "Ingrese Datos";
}
 
bueno ahora si que me meto jjajaja, aun nole agarro la onda de programar pero para ayudarles consulten al gran guille el tiuen unos buenos a portes de programacion. saludos amigos bakunosss
 
Bueno estoy mas de acuerdo con la ultima idea , puedes decirnos si usaste require_once

Grax

Lo primero gracias a todos por el interes y las respuestas, no utilizo require_once, he utilizado include, la "chapuzilla" que he usado me va de perlas, porque lo que yo quiero conseguir no es guardar toooodas las busquedas que se realizen, sino mostrar las 100 ultimas busquedas, lo que hago es lo siguiente:

el usuario hace la consulta de por ejemplo.... libro de la segunda guerra mundial, con $_POST compruebo si esa consulta ya existe en la base de datos, en el caso de que exista, no la vuelvo a introducir, porque no quiero saber cuantas veces se ha buscado ese libro, sino que actualizo la fecha de busqueda, a la fecha actual para que aparezca en el index de la web como la ultima busqueda realizada.

No se si me explico, pero este metodo me ha servido para lo que yo quiero.

De nuevo gracias a todos.

Si teneis alguna consulta mas no dudare en contestarla.

Un saludo
 
Volver
Arriba