Foros del Web » Programando para Internet » PHP »

Cuando se recarga la pag, vuelve a guardar datos

Estas en el tema de Cuando se recarga la pag, vuelve a guardar datos en el foro de PHP en Foros del Web. Hola que tal, hice un sistema de comentarios, pero tengo un inconveniente, cada vez que se recarga la pagina, vuelve a mandar el ultimo comentario ...
  #1 (permalink)  
Antiguo 29/05/2012, 22:12
 
Fecha de Ingreso: diciembre-2010
Mensajes: 160
Antigüedad: 14 años
Puntos: 1
Cuando se recarga la pag, vuelve a guardar datos

Hola que tal, hice un sistema de comentarios, pero tengo un inconveniente, cada vez que se recarga la pagina, vuelve a mandar el ultimo comentario y guardandolo en la base de datos. Que prodra ser?

dejo el code completo, muchas gracias de antemano!

Código PHP:
//Comentarios New
echo'<link href="/comments/estilocomentarios.css" rel="stylesheet" type="text/css" />
<span class="num_comments "> <span id="num_com_add">'
,$context['numcom'],'</span> Comentarios</span>
<span class="onpost"> '
$context['subject'],'</span>';
//Conecto
$publicado='Publicado';
echo
'<div class="TODO"><div class="COMENTARIOS">';
$q=mysql_query("select name, comentarios,fecha from comentarios where p_id='$topic' and estado='OK' order by fecha ");


while(
$nt=mysql_fetch_array($q)){ $comentarios=nl2br($nt['comentarios']);

echo 
'<div class="clearfix comment-box is-user ">
<div class="floatL fondoavatar">
<img id="error_avatar" src="/images/def/avatar.png" width="70" height="70" />
</div>
<div class="floatR comment-body">'
;
echo 
'<div class="clearfix comment-info"><div class="floatL"><b>',$nt[name],'</b></strong>&nbsp;<span>'.date("d-m-Y",strtotime($nt['fecha'])).'</span></div></div>';
echo 
'<div class="comment-content clearfix">',$comentarios,'</div>';
echo 
'</div></div>';
}
echo 
'</div>';

//Capturo Comments

@$todo=$_POST['todo'];
if(isset(
$todo) and $todo=="post_comment"){

$name=$_POST['name'];
$name=mysql_real_escape_string($name);
$email=$_POST['email'];
$email=mysql_real_escape_string($email);
$comentarios=$_POST['comentarios'];
$comentarios=mysql_real_escape_string($comentarios);

$estado 'OK';
$msg='';

if( 
strlen($name) <or strlen($name) > 25){
$msg=$msg.'<div class="RESULTADO">Su nombre debe tener m&aacute;s de 3 letras y menos de 25. </div><BR>';
$estado'NOTOK';}

if( 
strlen($comentarios) <){
$msg=$msg.'<div class="RESULTADO">Su comentario debe tener m&aacute;s de 3 letras por lo menos.</div><BR>';
$estado'NOTOK';}
//****************************
if(!preg_match("/^[a-z0-9]+([_\\.-][a-z0-9]+)*" ."@"."([a-z0-9]+([\.-][a-z0-9]+)*)+"."\\.[a-z]{2,}"."$/",$email)){
$msg=$msg.'<div class="RESULTADO">Su email, no es correcto.</div><BR>';
$estado'NOTOK';}
//****************************


if($estado<>"OK"){
echo 
$msg;
}else{
$fecha=date("Y-m-d");
$estado='SR'// Cambiar por OK si desea que todos los mensajes se aprueben automáticamente una vez publicados.
$query=mysql_query("insert into comentarios(p_id,publicado,fecha,name,email,comentarios,estado) values('$topic','$publicado','$fecha','$name','$email','$comentarios','$estado')");
echo 
mysql_error();
echo 
'<div class="RESULTADO">Gracias por su comentario. Falta solo autorizarlo por el administrador</div><br>';
}
}


//Envio Comments
echo'<div class="TITULO">COMENTARIOS</div>';

echo 
'<div class="CASILLAS"><form method="post" action=""><input type="hidden" name="todo" value="post_comment"><span class="EstiloROJO">* </span>
Nombre:&nbsp;&nbsp;<br /><input name="name" type="text" class="fondocasillausuario" size="42">
<br />
<span class="EstiloROJO">* </span>E-mail
(No saldr&aacute; publicado):&nbsp;&nbsp;<br /><input name="email" type="text" class="fondocasillausuario" size="42">
<br />
<span class="EstiloROJO">* </span>Comentarios:&nbsp;&nbsp;<br />
<textarea name="comentarios" cols="40" rows="3" class="fondocasillausuario"></textarea><br /><br />
<input type="reset" class="BOTONcomentarioborrar" value="Borrar">
&nbsp;&nbsp;<input type="submit" class="BOTONcomentarioenviar" value="Publicar">
</form></div></div>'
;



//Fin Comentarios New 
  #2 (permalink)  
Antiguo 30/05/2012, 06:48
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 4 meses
Puntos: 1532
Respuesta: Cuando se recarga la pag, vuelve a guardar datos

es el error típico de un principiante, a cada proceso de data por POST, debes de redireccionar:

header('location: url');
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 31/05/2012, 11:29
Avatar de engelsarcep  
Fecha de Ingreso: mayo-2012
Ubicación: Nicaragua
Mensajes: 11
Antigüedad: 12 años, 6 meses
Puntos: 0
Respuesta: Cuando se recarga la pag, vuelve a guardar datos

Hola amigo , todos pasamos por eso.!!!! lo que te recomiendo es que al insertar un comentario en la BDS hagar un redireccionamiento a otra pagina que diga "Su comentario fue enviado con Exito" y le pones un link que lo direccione nuevamente a la pgina (diciendo volver a la pagina)

el redireccionamiento lo puedes hace con este codigo
<META HTTP-EQUIV="REFRESH" CONTENT="1;URL=confirmarcomentario.php">
  #4 (permalink)  
Antiguo 31/05/2012, 11:31
Avatar de engelsarcep  
Fecha de Ingreso: mayo-2012
Ubicación: Nicaragua
Mensajes: 11
Antigüedad: 12 años, 6 meses
Puntos: 0
Respuesta: Cuando se recarga la pag, vuelve a guardar datos

O si lo quieres mas estructurado, puedes trabajar con <iframe> mandandole los parametros desde la pagina de donde te encuentras y asi evitaras todos los problemas de sobrecarga!! ya que la seccion comentarios solo estara en un iframe y no se va recargar al presionar f5 o al recargar!!
  #5 (permalink)  
Antiguo 31/05/2012, 12:54
Avatar de patriciomase  
Fecha de Ingreso: abril-2012
Ubicación: Mar del Plata
Mensajes: 323
Antigüedad: 12 años, 8 meses
Puntos: 34
Respuesta: Cuando se recarga la pag, vuelve a guardar datos

y si le volves a mandar los mismos datos otra vez es lógico que los vuelva a insertar. Si no queres separar la parte de inserción en otro archivo (lo podrías llamar con ajax), lo que podés hacer es comparar el comentario contra el último insertado, y si es distinto lo insertas. Si no es una aplicación con miles de comentarios por hora debería funcionar bastante bien.

Etiquetas: mysql, pag, recarga, sql, vuelve, usuarios
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 08:09.