Limpar URL via GET
Bem minha dúvida é que eu tenho um formulário de cadastro com retorno de mensagem na mesma página, para isso criei uma função para gravar no banco, só que quando o usuario cadastra um cliente, a url do get fica na barra de endereço e se ele pressionar enter grava os mesmos dados quantas vezes quiser, já tentei usar o
mais retorna um erro e não funciona, existe outra maneira de fazer isso?
Action do meu formulario:
pagina de cadastro: cadclientes.php
Função para gravar no banco:
header("Location:cadclientes.php");mais retorna um erro e não funciona, existe outra maneira de fazer isso?
Action do meu formulario:
action="?acao=gravar"
pagina de cadastro: cadclientes.php
<?php
if(isset($_POST['cadastrar']))
{
include 'config/funcoes.php';
if(!empty($_POST['nome']) && !empty($_POST['telefone']) &&
!empty($_POST['email'])&& !empty($_POST['usuario'])&&
!empty($_POST['senha']))
{
gravar();
}
else
{
echo '<div class="alert alert-warning">Verifique se algum campo necessario está em branco.</div>';
}
}
Função para gravar no banco:
function gravar()
{
$con = mysql_connect("localhost","root","");
mysql_select_db("paulista_pinturas",$con);
if(isset($_GET['acao']) && $_GET['acao'] == 'gravar')
{
$nome = $_POST['nome'];
$cpf = $_POST['cpf'];
$telefone = $_POST['telefone'];
$celular = $_POST['celular'];
$email = $_POST['email'];
$usuario = $_POST['usuario'];
$senha = $_POST['senha'];
$sql = "INSERT INTO clientes (nome,cpf,telefone,celular,email,usuario,senha)"
. " VALUES('$nome', '$cpf', '$telefone', '$celular', '$email', '$usuario', '$senha')";
$resultado = mysql_query($sql,$con);
if($resultado == TRUE)
{
echo "<div class='alert alert-success offset2 span8'>
<button type='button' class='close' data-dismiss='alert'>×</button>
<strong>Atenção: </strong>Cadastro realizado com seucesso!
</div>";
}
else
{
echo "<div class='alert alert-success'>
<button type='button' class='close' data-dismiss='alert'>×</button>
<strong>Atenção: </strong>Erro ao cadastrar, contacte o seu
webmaster para resolver seu problema.
</div>";
}
}
}
Raniel Gomes
Curtidas 0
Respostas
William
10/11/2013
Qual a mensagem de erro que retorna?
GOSTEI 0
Raniel Gomes
10/11/2013
Fiz assim e deu ceerto:
Mais ai não retorna nenhuma mensagem de que o cadastro realizado com sucesso...
<?php
if(isset($_POST['cadastrar']))
{
include 'config/funcoes.php';
if(!empty($_POST['nome']) && !empty($_POST['telefone']) &&
!empty($_POST['email'])&& !empty($_POST['usuario'])&&
!empty($_POST['senha']))
{
gravar();
header("Location:cadcliente.php");
echo '<div class="alert alert-success">Cadastro realizado com sucesso.</div>';
}
else
{
echo '<div class="alert alert-warning">Verifique se algum campo necessario está em branco.</div>';
}
}
?>
Mais ai não retorna nenhuma mensagem de que o cadastro realizado com sucesso...
GOSTEI 0
William
10/11/2013
Geralmente esses retornos de verificação sucesso ou erro eu jogo dentro de uma SESSION, depois só verifico na página onde será exibida a mensagem!!
GOSTEI 0
Raniel Gomes
10/11/2013
Tem algum exemplo que poderia me passar?
GOSTEI 0
William
10/11/2013
Colega vou postar um exemplo simples aqui, mas usando PDO porque as funções mysql_ do PHP já estão sendo descontinuadas e pessoalmente não recomendo mais a utilização das mesmas!
Observe que atribui o retorno da execução para uma SESSION, esse retorno pode ser TRUE se a inserção ocorreu com sucesso ou FALSE se houve falha.
// Instruções usando PDO
// Conexão com o banco de dados
$pdo = new PDO('mysql:host=localhost; dbname=dbteste', 'root', '00000');
// Instruções para inserção dos dados capturando o retorno
$sql = "INSERT INTO TAB_TESTE(campo1, campo2)VALUES(?, ?)";
$stm = $pdo->prepare($sql);
$stm->bindValue(1, 'valor1');
$stm->bindValue(2, 'valor2');
$retorno = $stm->execute();
// Atribui o retorno booleano a SESSION
$_SESSION['retorno'] = $retorno;
// Redireciona para página
header("Location:cadcliente.php");
Observe que atribui o retorno da execução para uma SESSION, esse retorno pode ser TRUE se a inserção ocorreu com sucesso ou FALSE se houve falha.
// Na página cadcliente.php // Verifica se existe a SESSION if(isset($_SESSION['retorno']) && $_SESSION['retorno'] == TRUE): echo '<div class="alert alert-success">Cadastro realizado com sucesso.</div>'; else: echo '<div class="alert alert-warning">Verifique se algum campo necessario está em branco.</div>'; endif;
GOSTEI 0
Raniel Gomes
10/11/2013
Vou testar obrigado.
GOSTEI 0
Claudio Lopes
10/11/2013
coloque um alerta com javascript informando que ja foi gravado e ao clicar dá um reload na pagina
Dica: não gosto de fazer operações com o banco via GET, utilize $_post ou até mesmo ajax
<script type="text/javascript">alert("Dados Gravados com sucesso!");window.location.reload();</script>
Dica: não gosto de fazer operações com o banco via GET, utilize $_post ou até mesmo ajax
GOSTEI 0
Raniel Gomes
10/11/2013
Obrigado pela dica, vou testar mais acho que isso resolve meu problema.
GOSTEI 0
Tiago Baldo
10/11/2013
Se for usar variáveis de sessão para mostrar alertas nas páginas, não pode esquecer que ao mostrar a mensagem logo após precisa-se limpar o conteúdo dessa variável, senão srá mostrado em todas as páginas que você configurar para mostrar os alertas nela contidos ;-)
// Na página cadcliente.php
// Verifica se existe a SESSION
if(isset($_SESSION['retorno']) && $_SESSION['retorno'] == TRUE):
echo '<div class="alert alert-success">Cadastro realizado com sucesso.</div>';
unset($_SESSION['retorno']);
else:
echo '<div class="alert alert-warning">Verifique se algum campo necessario está em branco.</div>';
endif;
GOSTEI 0
Sanderson Lima
10/11/2013
Poderia fazer o controle pelo banco de dados, criando uma SP que receberia os dados e antes de inserir novo registro, consultaria se ele já existe na base. Caso positivo, retornaria uma mensagem informando que não poderia haver duplicidade e caso negativo, procederia com a inserção das informações, retornando uma mensagem informando do sucesso da operação!
GOSTEI 0