Jump to content


Photo

Problema No Meu Script


  • Faça o login para participar
18 replies to this topic

#1 Fernando Wobeto

Fernando Wobeto

    webmaster

  • Usuários
  • 341 posts
  • Sexo:Masculino

Posted 01/02/2006, 07:32

Bom dia para todos,

seguinte, fiz um mural de recado onde ele tem apenas um arquivo chamado mural.php.

onde o formulário de envio possui o botão submit assim:

<input type="submit" name="postar" value="Enviar recado">

no inicio do arquivo tem uma critica para que se existir a variável postar (submit) ele faça a inclusão no mysql do recado, dessa forma:

<?
if($postar){
comando sql para inserir os dados postados.
}
?>

Só que estou tendo um problema:
Quando posto um recado no mural, e clico no refresh do navegador, ele posta denovo e assim vai... cada refresh que eu dou ele posta o último recado postado.

Tentei dar um unset($postar) mas nao adiantou.

Alguém pode me ajudar para quebrar a variável $posar no final da inserção sql?

Obrigado (y)
|--------------------------------------------------|
| MSN: fernando_wobeto@hotmail.com
| E-MAIL: fernandowobeto@gmail.com
| Desenvolvedor Web
|--------------------------------------------------|

#2 paes

paes

    GustavoPaes.Net

  • Usuários
  • 1393 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP
  • Interesses:Rumo ao topo!

Posted 01/02/2006, 07:36

Troque:
if($postar){

Por:
if( isset($_POST['postar'])){

E antes de fechar esse if() coloque o unset($_POST['postar']) ou
$_POST['postar'] = NULL

Se o method que vc está enviando for GET, mude o POST por GET.
Tente ai.

Até
Site: GustavoPaes.net

^ Rumo ao Topo ^

#3 Stormbringer

Stormbringer

    I'd love to stay with you all

  • Ex-Admins
  • 2927 posts
  • Sexo:Não informado
  • Localidade:Goiânia - GO
  • Interesses:Atualmente: pesquisa e desenvolvimento de web-games

Posted 01/02/2006, 07:37

e se aqui:

<?
if($postar){
comando sql para inserir os dados postados.
}
?>

vc fizer:
<?
if($postar){
comando sql para inserir os dados postados.
?>
<script>window.open('suapagina.php', '_self');</script>
<?
}
?>

é uma gambiarra que vai fazer com que o refresh nao tenha dados de POST... mas se a pessoa usar o "voltar" do navegador, dará o problema, heheh



uma forma elegante porem, seria vc, ao gravar o recado, gravar IP e timestamp
e no script de gravaçao ver se o mesmo IP jah gravou em X tempo(tipo, nos ultimos 5 minutos)... se sim, vc nao grava nada

๑۩۞۩๑Let the Carnage Begin!!๑۩۞۩๑


#4 paes

paes

    GustavoPaes.Net

  • Usuários
  • 1393 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP
  • Interesses:Rumo ao topo!

Posted 01/02/2006, 07:48

É parece que a minha forma não irá dar resultado!
Agora que caiu a ficha aqui :D

Mas tente a do Stormbringer. Verificar se ele já não postou nos ultimos 5min, mais ou menos, daí fica um sistema bom, pra evitar spam tbm ;)

Até
Site: GustavoPaes.net

^ Rumo ao Topo ^

#5 Fernando Wobeto

Fernando Wobeto

    webmaster

  • Usuários
  • 341 posts
  • Sexo:Masculino

Posted 01/02/2006, 07:59

paes,

tentei o que vc me sugeriu mas nao adiantou...olha abaixo o meu código inteiro:

<?
##Host do banco de dados##
$host = "localhost";
##Usuário do banco de dados##
$user = "";
##Senha do banco de dados##
$senha = "";
##Nome do banco de dados do site##
$banco = "";

 // conexão com o banco

$conexao = mysql_connect($host,$user,$senha) or die ("Erro ao conectar com o Servidor");

$db = mysql_select_db ($banco,$conexao) or die ("Erro ao se conectar com o Banco de dados");
 

 //verifica se foi postado algo ou se está sendo apenas visualizado o mural
if(isset($_POST['postar'])){
mysql_query("insert into mural(nome,email,texto) values('$nome','$email','$texto')") or die ("Erro");
unset($_POST['postar']);
}
 //seleciona os dados do mural no bd para listar
$sql = "select * from mural";
$dados = mysql_query($sql);
?> 
<!-- Gera a tabela para listar os dados postados no mural-->
<table>
            <tr>
                        <td><b>Nome</b></td><td><b>Recado</b></td>
            </tr>
<?
while($array = mysql_fetch_array($dados)){
?>
            <tr>
                        <td><a href="mailto:<? echo $array['email'];?>"><? echo $array['nome'];?></a></td><td><? echo $array['texto'];?></td>

            </tr>
<?
}
?>
</table>
<!-- Gera a tabela com o formulário para postagem de recados-->
<form name="form1" method="POST">
<table>
            <tr>
                        <td colspan="2"><b>Deixe seu recado em nosso mural</b></td>
            </tr>
            <tr>
                        <td>Nome:</td><td><input type="text" name="nome"></td>
            </tr>
            <tr>
                        <td>E-mail:</td><td><input type="text" name="email"></td>
            </tr>
            <tr>
                        <td>Recado:</td><td><textarea name="texto">Deixe seu recado aqui...</textarea></td>
            </tr>
            <tr>
                        <td colspan="2"><input type="submit" value="Enviar recado" name="postar"></td>

            </tr>
</table>
</form>

Veja funcionando: http://usuarios.lyco...mural/mural.php

Obrigado (y)
|--------------------------------------------------|
| MSN: fernando_wobeto@hotmail.com
| E-MAIL: fernandowobeto@gmail.com
| Desenvolvedor Web
|--------------------------------------------------|

#6 Fernando Wobeto

Fernando Wobeto

    webmaster

  • Usuários
  • 341 posts
  • Sexo:Masculino

Posted 01/02/2006, 08:03

Acho que vou fazer diferente, vou colocar dentro do formulário um campo hidden setando como nome acao e valor postar

Ai no if digo que se acao for igual a postar ele faz a inserção e no final do if define acao como zero ou vazio...sei lá..

vou testar (y)
|--------------------------------------------------|
| MSN: fernando_wobeto@hotmail.com
| E-MAIL: fernandowobeto@gmail.com
| Desenvolvedor Web
|--------------------------------------------------|

#7 gonacts

gonacts

    "Agora eu tb tenho um Tux..." =D

  • Usuários
  • 1030 posts
  • Sexo:Não informado

Posted 01/02/2006, 08:09

nao vai adiantar vc setar um hidden com um valor....pois o hidden TODA a vez q a ação do form é executada ele vai junto, ai sempre q vc der o F5 ele vai mandar o ultimo valor...

o q vc pode fazer é redirecionar, como já foi dito aki nos tópicos acima, ou então vc fazer da seguinte forma, sempre q vc der um GRAVAR no bd vc verifica se existe uma msg EXATAMNETE igual a esse, senao existir vc grava, do contrario nao....

pq o q acontece qnd vc dá refresh é exatamente isso, ele duplica os dados do form la no bd...

sakô?! :blink:
"Ninguém é tão inteligente que não possa aprender e ninguém é tão burro que não possa ensinar.."
"As dúvidas engrandecem nossa sabedoria, mas não basta somente tirá-las, temos que entendê-las"

#8 Fernando Wobeto

Fernando Wobeto

    webmaster

  • Usuários
  • 341 posts
  • Sexo:Masculino

Posted 01/02/2006, 08:13

nao vai adiantar vc setar um hidden com um valor....pois o hidden TODA a vez q a ação do form é executada ele vai junto, ai sempre q vc der o F5 ele vai mandar o ultimo valor...

o q vc pode fazer é redirecionar, como já foi dito aki nos tópicos acima, ou então vc fazer da seguinte forma, sempre q vc der um GRAVAR no bd vc verifica se existe uma msg EXATAMNETE igual a esse, senao existir vc grava, do contrario nao....

pq o q acontece qnd vc dá refresh é exatamente isso, ele duplica os dados do form la no bd...

sakô?! :blink:

sim sim...saquei!

Testei com hidden e realmente nao deu :(

vou tentar assim entao..

EDIT:

gonacts, vou fazer da forma que vc falou de ver se tem uma msg igual, mas a critica no bd tinha que ser duas: uma que tem que ver se tem igual e essa igual tem que ser a ultima postada.

Pq se lá adiante alguem tentar postar uma frase que já tiver ele nao vai...e isso deveria deixar.



valeu (y)

Edição feita por: Fernando Wobeto, 01/02/2006, 08:20.

|--------------------------------------------------|
| MSN: fernando_wobeto@hotmail.com
| E-MAIL: fernandowobeto@gmail.com
| Desenvolvedor Web
|--------------------------------------------------|

#9 Peri

Peri

    Consultor SAP

  • Usuários
  • 565 posts
  • Sexo:Não informado
  • Localidade:São Paulo - SP

Posted 01/02/2006, 09:22

Ola amiguinhos =p

A pouco tempo existiu um topico aqui no forum onde foi apresentado o mesmo problema e eu indiquei a seguinte solucao:

Ter um campo hidden de controle , sendo este campo setado como "1" (por exemplo) quando o usuario clicar em ENVIAR (entao vc seta o hidden e da submit na pagina).
Agora vc ira verificar se o hidden foi setado , se sim vc faz o sql , senao nao faz nada . Agora tem a magica , ao vc verificar que o hidden esta setado vc vai, apos fazer seu sql, mandar seu hidden pra "0". Pronto , pode dar f5 a vontade que seu hidden estara "0" e assim seu sql nao eh executado.
Praticamente um milagre nao eh mesmo ?
hehehe

[]s
+-----------------------------------------------------------------------------------------------------------
UH Terêrê ... Voltei!

#10 Fernando Wobeto

Fernando Wobeto

    webmaster

  • Usuários
  • 341 posts
  • Sexo:Masculino

Posted 01/02/2006, 09:25

Ola amiguinhos =p

A pouco tempo existiu um topico aqui no forum onde foi apresentado o mesmo problema e eu indiquei a seguinte solucao:

Ter um campo hidden de controle , sendo este campo setado como "1" (por exemplo) quando o usuario clicar em ENVIAR (entao vc seta o hidden e da submit na pagina).
Agora vc ira verificar se o hidden foi setado , se sim vc faz o sql , senao nao faz nada . Agora tem a magica , ao vc verificar que o hidden esta setado vc vai, apos fazer seu sql, mandar seu hidden pra "0". Pronto , pode dar f5 a vontade que seu hidden estara "0" e assim seu sql nao eh executado.
Praticamente um milagre nao eh mesmo ?
hehehe

[]s

Peri,

eu fiz isso e nao funcionou..e foi bem como o gonacts falou no seu último post.

COMo vc fez isso funcionar? :o

Fernando
|--------------------------------------------------|
| MSN: fernando_wobeto@hotmail.com
| E-MAIL: fernandowobeto@gmail.com
| Desenvolvedor Web
|--------------------------------------------------|

#11 Peri

Peri

    Consultor SAP

  • Usuários
  • 565 posts
  • Sexo:Não informado
  • Localidade:São Paulo - SP

Posted 01/02/2006, 09:42

Segue um codigo que fiz de cabeca , resumido :

<?php

if ($valorH = 1){
     $SQL = "Insert into blablablablablabla from blablabla"
     "execute SQL"
}
$valorH = 0; 

?>

<html>
 <body>
  <form name = "form1" >
   <input type="hidden" name="controle" value="<?echo $valorH;?>"
   <input type="text" name="mensagem">
   <input type="button" name="Enviar"  value="Enviar"   onclick="javascript:form1.controle.value = 1;form1.submit();"
  </form>
 </body>
</html>


Ve se roda ai manin
[]s
+-----------------------------------------------------------------------------------------------------------
UH Terêrê ... Voltei!

#12 Fernando Wobeto

Fernando Wobeto

    webmaster

  • Usuários
  • 341 posts
  • Sexo:Masculino

Posted 01/02/2006, 09:59

Segue um codigo que fiz de cabeca , resumido :

<?php

if ($valorH = 1){
     $SQL = "Insert into blablablablablabla from blablabla"
     "execute SQL"
}
$valorH = 0; 

?>

<html>
 <body>
  <form name = "form1" >
   <input type="hidden" name="controle" value="<?echo $valorH;?>"
   <input type="text" name="mensagem">
   <input type="button" name="Enviar"  value="Enviar"   onclick="javascript:form1.controle.value = 1;form1.submit();"
  </form>
 </body>
</html>


Ve se roda ai manin
[]s

Testei aqui e continua postando quando dá refresh.

Tive até que tirar o form1.submit(); do seu script pq estava me apresentando um segundo problema que postava duas vezes de uma vez! (n)

Fernando
|--------------------------------------------------|
| MSN: fernando_wobeto@hotmail.com
| E-MAIL: fernandowobeto@gmail.com
| Desenvolvedor Web
|--------------------------------------------------|

#13 Balala

Balala

    What you want for yourself?

  • Ex-Admins
  • 3357 posts
  • Sexo:Não informado
  • Localidade:Jaraguá do Sul - SC
  • Interesses:http://forum.wmonline.com.br/index.php?showtopic=5792

Posted 01/02/2006, 10:07

if(isset($_POST['postar'])){

   mysql_query("insert into mural(nome,email,texto) values('$nome','$email','$texto')") or die ("Erro");

   header("Location: essa_pagina.php");

}

Balala - Admin Geral Webfórum - Retired
Twitter
Stop Spreading Lies!
Posted Image

#14 sowrever

sowrever

    Normal

  • Usuários
  • 75 posts
  • Sexo:Masculino
  • Localidade:jaraguá do sul / sc
  • Interesses:mulheres

Posted 01/02/2006, 10:09

simples e pratico =]

com o header ele vai carregar a pag denovo, ja mostrando o novo post mas n gravando novamente no db \o\
:P
msn: mathe@diretoriow.com.br
icq: n lembro
e-mail: mathe@diretoriow.com.br

#15 Fernando Wobeto

Fernando Wobeto

    webmaster

  • Usuários
  • 341 posts
  • Sexo:Masculino

Posted 01/02/2006, 10:31

é, do Jeito que o Balala postou funciona..mas se conseguisse evitar que a page desse reload duas vezes seria melhor :huh:

Valeu ai Balala...fiz assim por enquanto (y)
|--------------------------------------------------|
| MSN: fernando_wobeto@hotmail.com
| E-MAIL: fernandowobeto@gmail.com
| Desenvolvedor Web
|--------------------------------------------------|




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq