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