Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde, estou com um formulário de cadastro de e-mails, bem simples com somente um campo.
O problema é que ele fica no footer do site, portanto, quando o usuário cadastrar o e-mail eu quero que somente uma mensagem seja exibida (uma div por exemplo já resolve). Mas a questão é: Como eu faço pro formulário não redirecionar? Pra ele somente exibir essa div com a mensagem de sucesso?
Segue o código abaixo:
HTML
<form name="f1" action="newsletter.php" method="POST">
<input required="required" name="email" type="text" placeholder="Digite seu e-mail...">
<button type="submit"><i class="fa fa-check"></i> Cadastrar</button>
</form>
PHP
<?php
$conexao = mysql_connect ("host", "user", "pass");
mysql_select_db ("db_name");
$email = $_POST["email"];
$query = "INSERT INTO cadastro (email) VALUES ('".$email."')";
$inserir = mysql_query($query);
if ($inserir) {
echo "E-mail cadastrado com sucesso!";
} else {
echo "Ocorreu um erro.";
echo "Dados sobre o erro:" . mysql_error();
}
?>
Valeu!
Outra opção para não ter que usar o ajax, e colocar o script php dentro do arquivo em
que esta o formulário e na action chamar ele mesmo. Não vai deixar de redirecionar,
porém vai redirecionar pro próprio arquivo em que você estava... E então passava um
parâmetro, assim você saberia se a pagina foi acessada após o envio do formulário
<form name="f1" action="?param=emailEnviado" method="POST"> [...] </form>
Ajax é a solução, até mesmo para poupar banda. É algo assim:
$.ajax({
type: 'post', // ou get
url: 'pagina.php', // página contendo todo o script PHP de validação de envio de formulário
data: {
NAME_1: $('input[name="NAME_1"]').val(), // envia o valor de <input name=NAME_1...
NAME_2: $('input[name="NAME_2"]').val() // envia o valor de <input name=NAME_2...
},
success: function(result) {
alert(result); // pega a mensagem da página PHP e tráz em forma de mensagem do navegador
}
})>
Ajax é a solução, até mesmo para poupar banda.
Se for pra poupar.. seria indicado não usar jQuery?
var data = 'param1=value1¶m2=value2';
var request = new XMLHttpRequest();
request.open('POST', 'pagina.php', true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded charset=UTF-8');
request.onload = function () {
if (request.status >= 200 && request.status < 400) {
alert(request.responseText);
}
};
request.send(data);>
Outra opção para não ter que usar o ajax, e colocar o script php dentro do arquivo em
que esta o formulário e na action chamar ele mesmo. Não vai deixar de redirecionar,
porém vai redirecionar pro próprio arquivo em que você estava... E então passava um
parâmetro, assim você saberia se a pagina foi acessada após o envio do formulário
<form name="f1" action="?param=emailEnviado" method="POST"> [...] </form>
RESOLVIDO! VALEU!
Você pode usar ajax para disparar este formulário.
Movendo para a área correta, JS.