MYSQL.los datos se insertan varias veces en la bbdd

#1
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
 

lags_80

Bovino maduro
#3
A lo mejor si presionas muchas veces el botón de guardar. hace q te guarde muchas veces el mismo registro :p
 
#6
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
 
#8
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);
 
#10
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
 
#11
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
 
#12
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
 

pacrosoft

Bovino adolescente
#13
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
 

ivfaris

Bovino adicto
#14
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
 

darinchy

Bovino maduro
#15
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...
 
#16
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---
 

naruto_zeroner

Bovino de alcurnia
#17
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
 

Giovanni924

Bovino de alcurnia
#18
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";
}
 
#19
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
 
#20
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
 
Arriba