Foros del Web » Programando para Internet » PHP »

Si hago refresh se recargan los datos en la DB

Estas en el tema de Si hago refresh se recargan los datos en la DB en el foro de PHP en Foros del Web. Hola queria hacerles esta consulta: Estoy usando un scritp para insercion de registros a una base de datos. Una vez ingresados los datos a la ...
  #1 (permalink)  
Antiguo 15/03/2004, 10:48
 
Fecha de Ingreso: octubre-2003
Mensajes: 304
Antigüedad: 20 años, 5 meses
Puntos: 0
Si hago refresh se recargan los datos en la DB

Hola queria hacerles esta consulta:

Estoy usando un scritp para insercion de registros a una base de datos. Una vez ingresados los datos a la base, el script me hace un include donde me muestra el contenido del registro recien insertado.

El problema que tengo es que cuando yo hago refresh de esta pagina, obviamente, se me agrega de nuevo el registro a la BD.

Para evitar esto estoy tratando de que el script primero le pregunte a la BD si el registro con tales caracteristicas existe, y si no existe lo agregue, de lo contrario que no lo agregue.

El asunto es que no puedo lograr el resultado que quiero, alguien me puede decir si ando por el camino correcto u hay otra forma de llegar al mismo fin?

Este es el script ($variable es la variable por medio de la cual identifico el registro, no utilizo el id, porque hasta despues de ingresado no lo tengo, $variable, es por ejemplo el titulo de una nota, o el subtitulo. El include "http://www.url.com" toma la $variable y busca los datos correspondientes a esa variable para mostrar el registro en pantalla )

$sql= mysql_db_query("base_de _datos", " SELECT * FROM tabla WHERE campo= $variable" , $link );

if(isset($sql)){include("http://www.url.com?&variable=".$variable.""}

else{mysql_db_query("base_de _datos", " INSERT INTO tabla( campo... ) VALUES (valores... ) ", $link);
include("http://www.url.com?&variable=".$variable.""}

MUCHAS GRACIAS!
  #2 (permalink)  
Antiguo 15/03/2004, 11:21
 
Fecha de Ingreso: julio-2003
Ubicación: No hay destino
Mensajes: 31
Antigüedad: 20 años, 9 meses
Puntos: 0
Lo que pasa esque al hacer esto: if(isset($sql)){include("http://www.url.com?&variable=".$variable.""}
solo estas comprabando la consulta, lo que debes de hacer es ver si ubo alguna fila de resultados, lo que indicaría que ese registro ya existe, la comprobación quedaría así:
Código PHP:
if(mysql_num_rows($sql)<1)
{
   
mysql_db_query("base_de _datos"" INSERT INTO tabla(campo... ) VALUES (valores... ) "$link); 
include(
"http://www.url.com?variable=".$variable.""

}
else
{
     include(
"http://www.url.com?&variable=".$variable.""}

Aunque lo ideal sería que mostraras el registro en otra página, fuera de donde lo insertas.
  #3 (permalink)  
Antiguo 15/03/2004, 12:31
 
Fecha de Ingreso: octubre-2003
Mensajes: 304
Antigüedad: 20 años, 5 meses
Puntos: 0
Muchas gracias por tu respuesta Durán,
sabes que mi idea original era redireccionarlo a otra pagina donde me muestre solo los resultados

El tema es que lo intente hacer con "header ( location:..."
pero no puedo pasar la variable por la url para la pagina que muestra los resultados, porque me da error: "can´t modify header information"

Sabras alguna manera de redireccionar y pasar la variable por url? o alguna otra manera de pasar la variable?

Saludos!
  #4 (permalink)  
Antiguo 15/03/2004, 13:23
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Si pones el código que usastes .. seguro que te podrémos orientar sobre el uso correcto de header() .. ya que esta función require que NO exista nada más de HTML/salida en general enviada al clientes antes de su uso .. y la solución pasa simplemente por reestructurar tu código HTML/PHP que usas (mas concretamente en quitar todo HTML en la parte del proceso y validación de esas variables).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 15/03/2004, 13:50
 
Fecha de Ingreso: octubre-2003
Mensajes: 304
Antigüedad: 20 años, 5 meses
Puntos: 0
Hola!
El codigo que usé es el siguiente:

header ("Location: http://www.dominio.com/directorio/re...do.php?titulo=".urlencode($titulo)." ");



Gracias por su ayuda!
  #6 (permalink)  
Antiguo 15/03/2004, 14:22
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pero .. ese código fuera de contexto no dice mucho ...

Debes poner el código completo de tu script que .. al final o donde corresponda haga esa llamada a esa función header() e indicar el mensaje de error completo que te dá.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 15/03/2004, 17:40
 
Fecha de Ingreso: octubre-2003
Mensajes: 304
Antigüedad: 20 años, 5 meses
Puntos: 0
Cluster!
Bueno aca te muestro el codigo que uso, las variables $OK son dos variables que defino en otra parte del script y si las dos dan "1 " se sube la informacion a la base y ademas se redirecciona a la pagina que mostraría los resultados. Si una de las dos no es igual a "1" no se sube la info, y da mensaje de error

El tema al usar este script PHP me da el error "can´t modify header information..."

if ($ok='1'and $ok2='1' )
{ mysql_db_query("base_de_datos", " INSERT INTO tabla ( titulo ) VALUES ( '$titulo' ) ", $link);



header("Location: http://www.dominio.com/registro_insertado.php?titulo=".urlencode($titulo)."");


}
else {echo'ERROR';};

Bueno espero me puedan dar una mano, asi aprendo a hacer este paso, que me parece que lo voy a usar muchisimo a lo largo del tiempo...
Muchas gracias!!
  #8 (permalink)  
Antiguo 15/03/2004, 18:12
 
Fecha de Ingreso: abril-2003
Mensajes: 656
Antigüedad: 21 años
Puntos: 1
el error que te da , quiere decir que estas sacando informacion por la cabecera http, osea que puede ser:

Que tengas espacios, o algun echo antes del header,
que si haces un include (es muy frecuente) a otro escript por ejemplo a uno de conexion a la BDD, o al config con las variables de estas, pues tienes lineas o espacios despues del tag de cierre de php ?>, vigila bien esto, que despues de este tag de cierre no haya ningun espacio,

a ver si te sirve

Saludos
  #9 (permalink)  
Antiguo 16/03/2004, 06:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
El error que te muestre PHP sobre todo para el caso concreto de problemas con cabeceras .. indica PHP la línea de tu código que hace un header() .. o usa un session_start() o un setcookie y ademas muestra en que línea se probocó la salida hacia el navegador ..

Por eso es tan IMPORTANTE que nos digas exactamente y textualmente el error que te dá PHP ademas del código COMPLETO que usas (incluido los <? y ?> de PHP) y resto de código que uses en esa misma página ..

Revisa lo que te comenta Jordi1.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #10 (permalink)  
Antiguo 16/03/2004, 12:42
Avatar de echevemaster  
Fecha de Ingreso: diciembre-2002
Ubicación: Carabobo, Venezuela
Mensajes: 84
Antigüedad: 21 años, 4 meses
Puntos: 1
Igualmente puedes considerar hacer uso de las funciones
Código PHP:
ob_start() 
y
Código PHP:
ob_end_flush() 
,que lo que haran es hacer un buffer de la pagina que te dara la posibilidad de hacer sesiones despues de la salida del html, estas funciones se utilizan al principio y al final del script
  #11 (permalink)  
Antiguo 16/03/2004, 13:31
 
Fecha de Ingreso: octubre-2003
Mensajes: 304
Antigüedad: 20 años, 5 meses
Puntos: 0
amigos, les explico: el documento es procesar.php, no tiene espacios antes del "<?" ni tampoco despues del "?>",

El codigo completo ( saqué la parte de subir la foto 2 que es igual a la 1):
<?php
include("../header.php");
include("index_cine.php");
include("../conex.php");
$link=Conectarse();


$titulo = $_POST["titulo"];


//////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////// SUBIR IMAGEN #1 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

$nombre_archivo = $HTTP_POST_FILES['foto1']['name'];
$tipo_archivo = $HTTP_POST_FILES['foto1']['type'];
$tamano_archivo = $HTTP_POST_FILES['foto1']['size'];

if($nombre_archivo==''){echo'<font size="2" face="Verdana, Arial, Helvetica, sans-serif">No se selecciono ninguna FOTO 1</font>';
echo'<br>';
$ok='1'; }
else{//<---------llave A
//compruebo si las características del archivo son las que deseo
if (!((strpos($tipo_archivo, "gif") || strpos($tipo_archivo, "jpeg")) && ($tamano_archivo < 100000)))
{echo '<font size="2" face="Verdana, Arial, Helvetica, sans-serif">La extensión o el tamaño del archivo 1 no es correcta. <br><br><table><tr><td><li>Se permiten archivos .gif o .jpg<br><li>se permiten archivos de 100 Kb máximo.</td></tr></table></font>';
}
else{ //<----llave B
//intento subir las fotos
if (move_uploaded_file($HTTP_POST_FILES['foto1']['tmp_name'], "../../img/ ".$nombre_archivo ))
{echo '<font size="2" face="Verdana, Arial, Helvetica, sans-serif">Foto 1 ingresada correctamente<font>';
echo '<br>';
$ok = '1';}
//sino se puedieron subir las imagenes, mostrar el siguiente texto
else{ //<-------llave C
echo '<font size="2" face="Verdana, Arial, Helvetica, sans-serif">Ocurrió algún error al subir el fichero. No pudo guardarse.</font>';
$ok = '0';
} //<-------llave C

}//<---llave B
};//<-------llave A

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////// INGRESAR REGISTRO A DB //////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////// y mostrar el resultado //////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if ($ok='1'and $ok2='1' )
{
mysql_db_query("base_de_datos", " INSERT INTO tabla ( titulo, foto_1 , foto_2)
VALUES ( '$titulo' , '$nombre_archivo' , '$nombre_archivo2' ) ", $link);
header("Location: http://www.dominio.com/registro_insertado.php?titulo=".urlencode($titulo)."");

}
else {echo'ERROR';};



?>

El error que me da es el siguiente:
Warning: Cannot modify header information - headers already sent by (output started at /www/docs/dominio.com/public_html/desarrollo2/header.php:4) in /www/docs/dominio.com/public_html/desarrollo2/procesar.php on line 96


Probé sacandole el include HEADER de la linea 2 pero nada... :(
Gracias de antemano...
  #12 (permalink)  
Antiguo 16/03/2004, 13:43
 
Fecha de Ingreso: abril-2003
Mensajes: 656
Antigüedad: 21 años
Puntos: 1
te esta diciendo que hay una salida a las cabeceras en este archivo :

(output started at /www/docs/dominio.com/public_html/desarrollo2/header.php:4)
en el header, linea 4, osea que alli hay html, o espcacios o ecos o algo asi

si te das cuenta, este archivo lo cargas con un include, y por lo que me parece , (al llamarse header) es la parte de arriba de tu web. osea que le sacas html.

Y fijate que en este escrip tines varios echos de salida no??

{echo '<font size="2" face="Verdana, Arial, Helvetica, sans-serif">Foto 1 ingresada correctamente<font>';
echo '<br>';
$ok = '1';}
//sino se puedieron subir las imagenes, mostrar el siguiente texto
else{ //<-------llave C
echo '<font size="2" face="Verdana, Arial, Helvetica, sans-serif">Ocurrió algún error al subir el fichero. No pudo guardarse.</font>';
$ok = '0';
} //<-------llave C

Pues no te funcionara, tienes de entender que antes de un header() no puede haver ninguna salida html, OK?

restrucutua tu escrip para que eso no ocurra





Saludos
  #13 (permalink)  
Antiguo 16/03/2004, 14:51
 
Fecha de Ingreso: octubre-2003
Mensajes: 304
Antigüedad: 20 años, 5 meses
Puntos: 0
buenisimo, entiendo mejor el funcionamiento, voy a hacer las reformas que se me ocurre que tengo que hacer y despues les cuento.
Saludos y muchas gracias!
  #14 (permalink)  
Antiguo 16/03/2004, 16:45
 
Fecha de Ingreso: octubre-2003
Mensajes: 304
Antigüedad: 20 años, 5 meses
Puntos: 0
Señores, lo resolviii! (...lo resolvimos deberia decir!)

Lo que hize fue poner el "header ("location..." antes que cualquier "echo'...", luego saque cualquier "include" con contenido html y en lugar de ponerlo en el archivo de proceso lo agregue a la pagina a la cual me redireccionó el "header ("location..."
y funciona!

MUCHAS GRACIAS por su ayudaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaa!!
  #15 (permalink)  
Antiguo 23/04/2004, 00:27
 
Fecha de Ingreso: noviembre-2003
Mensajes: 114
Antigüedad: 20 años, 5 meses
Puntos: 0
Esto lo aprendi hoy y fuera error!!!!!!!!!

ob_start()

Y

ob_end_flush()

Gracias a todos los que postearon sobre este asunto.
__________________
Soporte y Creaciones PHP-Nuke:
NukeProjects.Net

if($Necesitas=="Ayuda"){
echo "No dudes en pedirla";
}
  #16 (permalink)  
Antiguo 23/04/2004, 07:24
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
DJ-Dom ..

Pero usar el control de buffer de PHP debes saber que es un gasto de recursos innecesario cuando puedes reorganizar tu código (y de paso entender mejor como funciona esto de diseñar aplicaciones "cliente-servidor" y PHP en general).

Las soluciones "rápidas" no implican que sean las más eficientes si bien te sacan del apuro.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 03:37.