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ódigo

header("Location:cadclientes.php");

mais retorna um erro e não funciona, existe outra maneira de fazer isso?
Action do meu formulario: #Código
action="?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
|
MVP
Pontos: 45
    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;