Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marcos Jr

Exibir mensagem ao enviar formulário

Recommended Posts

Olá,

 

Eu tenho um formulário de envio de e-mail funcionando belezinha, ao clicar ele é redirecionado para uma página com o nome "Mensagem Enviada".

 

Ele usa o FormMail.CGI para enviar a mensagem.

<form id="form1" name="form1" method="post" action="../cgi-sys/FormMail.cgi">
<input type="hidden" name="recipient" value="meu@email.com">
<input type="hidden" name="subject" value="Pedido">

<!-- Página para qual é redirecionado após clicar em enviar/subit E página se não for enviado -->
<input type="hidden" name="redirect" value="../envio-confirmado.php">

<!-- Página para qual é redirecionado se ocorrer algum erro durante o envio -->
<input type="hidden" name="missing_fields_redirect" value="../erro.php">
Mas eu não queria desta forma, eu quero que ao clicar em enviar seja exibida uma mensagem no topo do formulário, ou que o formulário sumisse e a mensagem fosse exibida, isso sem ir para outro página, sem redirecionar.

 

Alguém sabe como eu posso fazer isto usando PHP ou outra linguagem que de para colocar em um página PHP? Eu pensei em colocar o formulário em um IFRAME, mas como ele exibi umas mensagens em cada campo se não preenchido, deixando ele bem mais alto, fazendo sumir boa parte do formulário dentro IFRAME e o que alguns navegadores fazem com IFRAME é um LIXO. Então a forma legal é exibir uma mensagem usando PHP ou outra linguagem.

 

Desculpe se já tiver está solução no fórum, mas eu pesquisei e não encontrei.

 

Agradesço desde já qualquer ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Marcos não entendi bem sua pergunta...

 

Você quer enviar um e-mail com script cgi e exibir uma mensagem (ao enviar) sem redirecionar a página?? é isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

em redirect envie para a mesma página

 

no começo da página php teste se foi POST, se sim defina uma mensagem do tipo $str_message = "formulário enviado"; e escreva na tela

se nao for POST entao coloque o codigo do formulário

 

if (isset($_POST["enviar"])) {

mensagem de enviado

} else {

formulário de envio

}

 

é isto?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado pela ajuda dos dois... Muito obrigado mesmo.

 

Marcos não entendi bem sua pergunta...

 

Você quer enviar um e-mail com script cgi e exibir uma mensagem (ao enviar) sem redirecionar a página?? é isso?

Sim, um formulário básico, e o script de envio é o FormMail.cgi que vem no cPanel. Tem como?

 

 

em redirect envie para a mesma página

 

no começo da página php teste se foi POST, se sim defina uma mensagem do tipo $str_message = "formulário enviado"; e escreva na tela

Lost Bruner,

 

O método é POST.

<form id="form1" name="form1" method="post" action="../cgi-sys/FormMail.cgi">

 

Mas não entendi como usar esse código, eu coloquei este código na página e não deu certo:

<?php $str_message = "formulário enviado"; ?>

Sou bem ignorante em PHP rss

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, acho que entendi melhor.

 

Acredito que você tem que fazer com que o cgi, apos enviar a mensagem redirecione pra página de origem trazendo alguma variável pra você saber se a msg foi enviada ou nao.

 

Aí sim você testaria essa variável com o php e decidiria o que fazer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Difícil é eu conseguir/saber fazer isto. Se alguém puder me ajudar.

 

Ou não tem um método mais fácil que ao clicar em Subit uma mensagem seja exibida e o script CGI não redirecione? Pois se eu não colocar a página de redirecionamento, ele cai em uma página em branco com os dados preenchidos no form.

 

Bem, acho que entendi melhor.

 

Acredito que você tem que fazer com que o cgi, apos enviar a mensagem redirecione pra página de origem trazendo alguma variável pra você saber se a msg foi enviada ou nao.

 

Aí sim você testaria essa variável com o php e decidiria o que fazer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara tem mil e um jeitos...

1ª PHP =

<?
//pega o valor status
$status = $_GET["status"];

//traz a msg de status
if ($status=="Enviado"){
$msg = "Seu formulário foi enviado com sucesso!";
// mostra a div com o msg
$display: block;
}else{
$msg = "Ocorreram erros ao tentar enviar o seu formulário!";
// mostra a div com o msg
$display: block;
}

if ($status==""){
//se não existir valor em status, esconder a div
$display: none;
}
?>
<div id="status" style="display: <?=$display?>"><?=$msg?></div>
<!-- Página para qual é redirecionado após clicar em enviar/subit E página se não for enviado -->
<input type="hidden" name="redirect" value="caminhodoseuformulario.php?status=Enviado">

<!-- Página para qual é redirecionado se ocorrer algum erro durante o envio -->
<input type="hidden" name="missing_fields_redirect" value="caminhodoseuformulario.php?status=Erro">

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado Paje, obrigado mesmo.

 

Mas deu erro, em localhost usando o Wamp não deu certo, mas no servidor de hospedagem, não deu certo mesmo, e até exibiu um erro.

 

se error: syntax error, unexpected ':' in /home/maxisb/public_html/pedido.php on line 135

Mesmo em localhost sem o erro não exibiu a mensagem, nem eu digitando a URL direta meusite.com/pedido.php?status=Enviado pra testar.

 

Olha o código, eu numerei as linhas, o erro segundo o servidor foi na 135.

 

133 $msg = "Seu formulário foi enviado com sucesso!";

134 // mostra a div com o msg

135 $display:block;

136 }else{

137 $msg = "Ocorreram erros ao tentar enviar o seu formulário!";

 

Eu coloquei o código da seguinte forma:

a parte me PHP eu coloquei fora do form, a div eu coloquei onde eu queria que a mensagem fosse exibida, e os imput eu coloquei dentro do formulário normal. Tentei colocar tudo junto também e nada. E sempre da erro quando é no servidor.

 

Uma coisa que eu não sabia é que havia diferença em colocar <? ou <?php, se eu colocar <?php no início do código ao invés de <? da erro na linha 136, até em localhost.

 

cara tem mil e um jeitos...

1ª PHP =

<?
//pega o valor status
$status = $_GET["status"];

//traz a msg de status
if ($status=="Enviado"){
$msg = "Seu formulário foi enviado com sucesso!";...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigao,

 

Se o SMTP local nao estiver configurado a funcao mail nao funciona mesmo... talvez seja melhor fazer testes no servidor de hospedagem

 

olhe este trecho de código, jah utilizei muito, nao sei se atende, mas...

 

<?php
TODO O CÓDIGO PHP
?>
<!-- depois de enviado o email... -->
<script language="JavaScript">alert('A sua mensagem foi enviada com sucesso!');
location.href='index.php';</script>
<!-- retorna para o index.. pode definir outra pagina tb... -->

Abçs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Felipe, muito obrigado, eu vou tentar deste método...

 

 

O que digo que não funcionou foi a exibição da mensagem. Eu não estou usando PHPMail() e sim um script CGI, eu consigo enviar e-mail de localhost fácil pelo formulário de e-mail já que ele envia os dados para o script em meu host que os processa e envia para o e-mail.

 

@edit

 

Felipe, eu usei o código, e entendi, ele exibe uma mensagem e em seguida usa o comando location para enviar para a página que você, só não entendi pq ele ficava em um ciclo sem fim, ou melhor entendi, mas não sei resolver rs.

 

Mas eu queria um método igual o Paje Santos tinha passado, algo que exibisse uma mensagem no topo, que eu pudesse estilizar ela usando CSS, naquele método tem como.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com base no código do PAJE eu consegui, só substitui o código PHP por este:

 

<?

$status = $_GET['status'];

 

if($status == enviado) {

echo "Enviado com sucesso";

}

 

if($status == erro) {

echo "Nao foi possivel enviar";

}

 

?>

 

E retirei a DIV, vou tentar personalizar com a DIV agora.

 

Olhando o código que ele me passou eu vi que era fácil usando PHP, não precisava ser algo que ao clicar no botão a mensagem fosse exibida, e sim um redirecionamento para a mesma página com a nova mensagem exibida.

 

O que eu fiz foi usar query string e bem clean mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

foi uma destração minha.... encontrei o erro em $display: block e em $display: none . tem que ser $display = "block"; e $display = "none";

tá ae o codigo corrigido

 

<?
//pega o valor status
$status = $_GET["status"];

//traz a msg de status
if ($status=="Enviado"){
$msg = "Seu formulário foi enviado com sucesso!";
// mostra a div com o msg
$display="block";
}else{
$msg = "Ocorreram erros ao tentar enviar o seu formulário!";
// mostra a div com o msg
$display="block";
}

if ($status==""){
//se não existir valor em status, esconder a div
$display="none";
}
?>
<div id="status" style="display: <?=$display?>"><?=$msg?></div>
<!-- Página para qual é redirecionado após clicar em enviar/subit E página se não for enviado -->
<input type="hidden" name="redirect" value="caminhodoseuformulario.php?status=Enviado">

<!-- Página para qual é redirecionado se ocorrer algum erro durante o envio -->
<input type="hidden" name="missing_fields_redirect" value="caminhodoseuformulario.php?status=Erro">

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.