Array
(
)

Limpar URL via GET

PHP
Raniel Nogueira
   - 10 nov 2013

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
#Códigoheader("Location:cadclientes.php");
mais retorna um erro e não funciona, existe outra maneira de fazer isso?
Action do meu formulario: #Códigoaction="?acao=gravar"
pagina de cadastro: cadclientes.php
#Código
<?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:
#Código
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>";
}
}
}

William (devwilliam)
   - 11 nov 2013

Qual a mensagem de erro que retorna?

Raniel Nogueira
   - 11 nov 2013

Fiz assim e deu ceerto:

#Código
<?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...

William (devwilliam)
   - 11 nov 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!!

Raniel Nogueira
   - 11 nov 2013

Tem algum exemplo que poderia me passar?

William (devwilliam)
   - 11 nov 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!

#Código
// 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.

#Código
// 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;

Raniel Nogueira
   - 11 nov 2013

Vou testar obrigado.

Din
   - 12 nov 2013

coloque um alerta com javascript informando que ja foi gravado e ao clicar dá um reload na pagina
#Código
<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

Raniel Nogueira
   - 13 nov 2013

Obrigado pela dica, vou testar mais acho que isso resolve meu problema.

Tiago Baldo
   - 19 ago 2014

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 ;-)

#Código
// 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;