← PHP

Apagar cache de uma form

Lida 3071 vezes

Offline

johndays 
Membro
Mensagens 387 Gostos 1
Feedback +3

Troféus totais: 24
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 4 Level 3 Level 2 Level 1 100 Posts

Boas noites,

Tenho uma dúvida em como posso contornar este problema, imaginem esta situação :

Código: (html4strict) [Seleccione]
<form name="form1" action="#?dontcacheme" method="post">
<input name="nome_equipa" type="text" value="Nome da Equipa" />
<input name="submit" type="submit" value="Inscrever" />
</form>

Quando carrego "Inscrever" pela primeira vez, ele executa uma determinada $query. O problema é que quando faço f5 à página, o browser guarda em cache a informação da form e executa a $query novamente. Alguma ajuda? Existe alguma forma de contornar o problema?

Basicamente queria que executasse a $query se o botão fosse realmente pressionado, e não pelo facto de fazer refresh à página.

Abraço.
Offline

alopes 
Membro
Mensagens 373 Gostos 8
Feedback -1

Troféus totais: 22
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Level 4 Level 3 Level 2 Level 1 100 Posts 50 Posts 10 Posts

Coloca o form a usar um número gerado de forma aleatória.
Offline

johndays 
Membro
Mensagens 387 Gostos 1
Feedback +3

Troféus totais: 24
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 4 Level 3 Level 2 Level 1 100 Posts

Como assim?
Offline

Souza 
Elite
Mensagens 1816 Gostos 1
Troféus totais: 28
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

Porque manténs o visitante na página com a query a ser executada? Após a query à base de dados, fazes um header location para levar para uma página final, caso uses ajax não tens esse problema.

Como tens isso estruturado?
Offline

johndays 
Membro
Mensagens 387 Gostos 1
Feedback +3

Troféus totais: 24
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 4 Level 3 Level 2 Level 1 100 Posts

Está assim :

Código: (html4strict) [Seleccione]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xh
tml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

</head>

<body>


<form name="form1" action="#?dontcacheme" method="post">
<input name="nome_equipa" type="text" value="Nome da Equipa" />
<input name="jogador1" type="text" value="Jogador 1" />
<input name="jogador2" type="text" value="Jogador 2" />
<input name="jogador3" type="text" value="Jogador 3" />
<input name="submit" type="submit" value="Inscrever" />
</form>

<hr />
<h3>Lista de Inscritos</h3>
</body>

<?php

$host
="localhost"$db="torneio"$user="torneio"$pw="1234";
 
mysql_connect($host$user$pw) or die(mysql_error());
 
mysql_select_db($db);
if(
$_POST['submit']==true){

 
 
$nome_equipa=$_POST['nome_equipa'];
 
$jogador1=$_POST['jogador1']; $jogador2=$_POST['jogador2'];
 
$jogador3=$_POST['jogador3'];
 
$query"INSERT INTO torneio (nome_equipa,jogador1,jogador2,jogador3)
 VALUES ('
$nome_equipa','$jogador1','$jogador2','$jogador3')";
 
mysql_query($query);}
 
$query2mysql_query("SELECT * FROM  `torneio");
 
$num_rows=mysql_num_rows($query2);
 echo 
$num_rows;
 
 
?>


</html>
Offline

Souza 
Elite
Mensagens 1816 Gostos 1
Troféus totais: 28
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

Lá está, foi o que imaginei, das duas uma, ou executas um ajax snippet  para enviar os dados para um ficheiro no servidor, isto faz com que evites sair da página actual, pelo que me parece é o que queres e podes melhorar isso ou então mudas o submit para "enviarformulario.php" e adicionas isto nesse fincheiro:

<?php
 
$host="localhost"; $db="torneio"; $user="torneio"; $pw="1234";
 mysql_connect($host, $user, $pw) or die(mysql_error());
 mysql_select_db($db);
if($_POST['submit']==true){
 
 
 $nome_equipa=$_POST['nome_equipa'];
 $jogador1=$_POST['jogador1']; $jogador2=$_POST['jogador2'];
 $jogador3=$_POST['jogador3'];
 $query= "INSERT INTO torneio (nome_equipa,jogador1,jogador2,jogador3)
 VALUES ('$nome_equipa','$jogador1','$jogador2','$jogador3')";
 mysql_query($query);}
 
$query2= mysql_query("SELECT * FROM  `torneio");
 $num_rows=mysql_num_rows($query2);
 echo $num_rows;
header('Location: ../index.php');
 
 
?>

adiciona a última linha para sair dessa página, em 1 ou 2 segundos sais dessa página e o F5 já não submete informação nenhuma

Offline

johndays 
Membro
Mensagens 387 Gostos 1
Feedback +3

Troféus totais: 24
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 4 Level 3 Level 2 Level 1 100 Posts

Muito obrigado Souza, foi exactamente isso que fiz.

Bom domingo!