Foros del Web » Programando para Internet » PHP »

Problema con los refrescos en un tablón de anuncios.

Estas en el tema de Problema con los refrescos en un tablón de anuncios. en el foro de PHP en Foros del Web. Tengo un formulario recursivo que inserta un comentario (nombre+texto) en una tabla MySQL que funciona a modo de tablón de anuncios. El problema viene que ...
  #1 (permalink)  
Antiguo 31/05/2006, 04:07
 
Fecha de Ingreso: marzo-2005
Mensajes: 197
Antigüedad: 12 años, 9 meses
Puntos: 1
Exclamación Problema con los refrescos en un tablón de anuncios.

Tengo un formulario recursivo que inserta un comentario (nombre+texto) en una tabla MySQL que funciona a modo de tablón de anuncios.

El problema viene que al enviar el formulario la página se reenvía a sí misma, inserta el nuevo comentario y lee todos los comentarios de nuevo, con lo que al refrescarla tras insertar un comentario, vuelve a enviar todo y se duplica el mensaje...

¿Hay algún modo de restringir este refresco?

Muchísimas gracias por anticipado y un saludo para todos.

Última edición por Koden; 31/05/2006 a las 06:20
  #2 (permalink)  
Antiguo 31/05/2006, 06:21
Avatar de deccweb  
Fecha de Ingreso: febrero-2003
Ubicación: Mataro
Mensajes: 365
Antigüedad: 14 años, 9 meses
Puntos: 0
y con que la refrescas? podrias poner el código.
__________________
Calle17.net

edgargranados.es
  #3 (permalink)  
Antiguo 31/05/2006, 09:56
 
Fecha de Ingreso: marzo-2005
Mensajes: 197
Antigüedad: 12 años, 9 meses
Puntos: 1
Sonrisa

Este es el código de tablon.php

Código PHP:
<?php
  
function destruir ()
  {
    
$_POST["par"] = "";
    unset (
$_POST["par"],$_POST["nombre"],$_POST["comentario"]);
  }

  
$dbh mysql_connect ("localhost","usr","pwd") or die ('I cannot connect to the database because: ' mysql_error ());
  
mysql_select_db ("db");

  if (isset (
$_POST["par"]) && !is_null ($_POST["par"]) && $_POST["par"] != "")
  {
    
$i "INSERT INTO comentarios(nombre,comentario) VALUES('" $_POST["nombre"] . "','" $_POST["comentario"] . "')";
    
mysql_query ($i,$dbh) or die ('I cannot execute the query because: ' mysql_error ());

    
destruir();

    
header ("Location: control_refresco.php");
  }
?>
<TABLE>
  <TR><TD class="menu" align="center">MENSAJES YA EXISTENTES</TD></TR>
  <TR>
    <TD>
      <table>
        <?php
          $a 
"SELECT nombre, comentario FROM comentarios ORDER BY id_comentario DESC";
          
$b mysql_query ($a,$dbh) or die ('I cannot execute the query because: ' mysql_error());
          while (
$c mysql_fetch_array ($b)){
        
?>
        <tr>
          <td>
            <table>
              <tr>
                <td width="20%"><?php echo $c["nombre"];?></td>
                <td width="80%"><?php echo $c["comentario"];?></td>
              </tr>
            </table>
          </td>
        </tr>
        <?php }?>
      </table>
    </TD>
  </TR>
</TABLE>
<p>&nbsp;</p>
<FORM METHOD="Post" ACTION="<?php echo $PHP_SELF;?>">
  <input type="hidden" name="par" value="par">
  Deja tu mensaje:<br>
  <b>Nombre:</b><br><INPUT NAME="nombre" TYPE="Text" SIZE=60 MAXLENGTH=60><br>
  <b>Mensaje:</b><br><textarea name="comentario" rows="10" cols="60"></textarea><br>
  <INPUT TYPE="Submit" VALUE="Enviar Opinión">
</FORM>
El código de control_refresco.php sería simplemente esto:

Código PHP:
<?php header ("Location: tablon.php");?>
Muchas gracias por tu interés.
  #4 (permalink)  
Antiguo 31/05/2006, 10:40
 
Fecha de Ingreso: mayo-2006
Mensajes: 2
Antigüedad: 11 años, 6 meses
Puntos: 0
Diferenciar si Apretas el boton

Estimado amigo espero que esto te ayude

El problema que tienes es que tienes que diferenciar entre un refresh y un submit para ello te paso el siguiente codigo

if ($_POST['Submit'] == Enviar Opinión'){
// insertas el registro
$i = "INSERT INTO comentarios(nombre,comentario) VALUES('" . $_POST["nombre"] . "','" . $_POST["comentario"] . "')";
mysql_query ($i,$dbh) or die ('I cannot execute the query because: ' . mysql_error ());

}

con esto no va ser necesario que utilices tu control refresh que tienes


Saludos Cordiales
  #5 (permalink)  
Antiguo 31/05/2006, 11:11
 
Fecha de Ingreso: marzo-2005
Mensajes: 197
Antigüedad: 12 años, 9 meses
Puntos: 1
He sustituído el if de tablon.php

Código PHP:
  if (isset ($_POST["par"]) && !is_null ($_POST["par"]) && $_POST["par"] != "")
  {
    
$i "INSERT INTO comentarios(nombre,comentario) VALUES('" $_POST["nombre"] . "','" $_POST["comentario"] . "')";
    
mysql_query ($i,$dbh) or die ('I cannot execute the query because: ' mysql_error ());

    
destruir();

    
header ("Location: control_refresco.php");
  } 
Por este otro que tú me diste

Código PHP:
if ($_POST['Submit'] == 'Enviar Opinión')
{
  
$i "INSERT INTO comentarios(nombre,comentario) VALUES('" $_POST["nombre"] . "','" $_POST["comentario"] . "')";
  
mysql_query ($i,$dbh) or die ('I cannot execute the query because: ' mysql_error ());

  
destruir();

Pero sigue sin funcionarme; es decir: sigue intsertando duplicados al pulsar F5... De todos modos, muchas gracias por tomarte las molestias...
  #6 (permalink)  
Antiguo 31/05/2006, 14:42
 
Fecha de Ingreso: mayo-2006
Mensajes: 2
Antigüedad: 11 años, 6 meses
Puntos: 0
Separa tu codigo

Bueno en ese caso tienes que separar el codigo

Formulario y proceso

Asi cuando hagas submit mandas los datos a otra pagina y haces tu proceso insertar.

una vez satisfecho el proceso vuelves a tu formulario fresco como una lechuga. Asi encierras el circulo continuamente

asi no tendras problemas con el refresh, es lo mejor yo siempre lo hago.

Saludos Cordiales.
  #7 (permalink)  
Antiguo 01/06/2006, 01:21
Avatar de deccweb  
Fecha de Ingreso: febrero-2003
Ubicación: Mataro
Mensajes: 365
Antigüedad: 14 años, 9 meses
Puntos: 0
Y al hacer el header ("Location: control_refresco.php"); te pasa las variables post? es q sino podrias mirar de q fuera por get.. asi cuando haces el header desaparecerian estas variables.

Nose.. no se me ocurre otra cosa
__________________
Calle17.net

edgargranados.es
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 09:37.