Tela de cadastro. Só cadastrar 1 vez e ter opção de atualizar os dados

8 respostas
mysqlphp
R

Pessoal, boa noite!

Estou desenvolvendo um sistema web onde o usuário terá uma tela de cadastro e esses dados só serão cadastrado 1 vez e o usuário terá a opção de atualizar os mesmos quando quiser.

Já está funcionando, porém a tela fica lá e se o usuário quiser cadastrar novamente irá fazer.

A pergunta é: Como fazer com que o usuario só consiga cadastrar 1 vez?

Estou usando PHP e Mysql.

8 Respostas

L

Há algumas formas, a mais primitiva é validar item a item do formulário e verificar se os mesmos já foram salvos no banco de dados.

R

Feito!

if ($Data > 0){
echo “

Altere o cadastro existente!

”;

Fiz isso pra cada input, porém quando outro usuario que ainda não tem cadastro tenta fazer ñ consegue.

Como posso resolver?

L

Assim você está generalizando a validação para todos os usuários, inclusive quem nem entrou!

Você precisa ter um campo no banco de dados (rg, cpf, email, etc) para só assim, usar os dados informados pelo usuário, fazendo um select no banco usando esse campo distinto (não pode haver repetição certo?) e só assim tomar a decisão de bloquear o usuário ou não… como está a estrutura da tabela?

R

Entendi.

Tem um campo id_usuario (chave estrangeira) na tabela Config que é a que não quero mais de 1 cadastro, vou pegar o email do usuario juntando as duas.

Daí como eu faço a condição pra comparar o usuario logado pelo email?

L

Não aconselho você juntar, porque se entrar o mesmo email com outro id_usuario, vai gerar uma combinação diferente, indo contra o que você quer…

Para comparar, você precisa fazer um select no banco usando o email que o usuario informou no cadastro, se o email já existir na base, o select vai te trazer um registro certo? Essa é sua garantia que ele já foi cadastrado… poste o trecho de código pra clarear…

R
<?php if (isset($_POST['Cadastrar'])) { $Cod_Mot = $_POST['codmot']; $Data = $_POST['data']; $Custo_pneu = $_POST['custo_pneu']; $Km_troca_pneu = $_POST['km_troca_pneu']; $Valor_troca_oleo = $_POST['valor_troca_oleo']; $Km_troca_oleo = $_POST['km_troca_oleo']; $Preco_combustivel = $_POST['preco_combustivel']; $Consumo_combustivel = $_POST['consumo_combustivel']; $Valor_veiculo = $_POST['valor_veiculo']; $Valor_seguro = $_POST['valor_seguro']; $Prestacao_veiculo = $_POST['prestacao_veiculo']; $Despesas_Anuais = $_POST['despesas_anuais']; if ($Data == '' or $Preco_combustivel == '' or $Consumo_combustivel == '') { echo "

Faltou preencher algum campo!

"; }else if ($Data > 0 or $Custo_pneu > 0 or $Km_troca_pneu > 0 or $Valor_troca_oleo > 0 or $Km_troca_oleo > 0 or $Preco_combustivel > 0 or $Consumo_combustivel > 0 or $Valor_veiculo > 0 or $Valor_seguro > 0 or $Prestacao_veiculo > 0 or $Despesas_Anuais > 0 ){ echo "

Altere o cadastro existente!

"; }else{
$query ="INSERT INTO config (id_usuario, data_configuracao, custo_pneu, km_troca_pneu, custo_troca_oleo, km_troca_oleo,
preco_medio_combustivel, consumo_combustivel, valor_veiculo, seguro_anual, prestacao_veiculo, despesas_anuais, valor_aluguel)

VALUES ($Cod_Mot, $Data, $Custo_pneu, $Km_troca_pneu, $Valor_troca_oleo, $Km_troca_oleo, $Preco_combustivel,

$Consumo_combustivel, $Valor_veiculo, $Valor_seguro, $Prestacao_veiculo,$Despesas_Anuais)";

$data = mysql_query($query) or die(mysql_error());
if ($data) {
  			header("Location: configfixo.php");
  		}else{
  			echo "Alguma coisa não correu  muito bem... Tenta outra vez mais tarde";
  		}

} }
?>

L

Podemos usar esse codmot como campo único? apenas um único cadastro pode ter esse campo?

Se sim, você pode fazer uma query antes desses if’s…

$sql = "select id_usuario from config where id_usuario = '$Cod_Mot'";
$pesquisa = mysql_query($sql);
$registrosEncontrados = mysql_num_rows($pesquisa);

E no else if ($Data > 0 or $Custo_pneu > 0…) pode ficar assim

...
} else if ($registrosEncontrados > 0) {
    echo "<h3 id='mensagem'>Altere o cadastro existente!</h3>";
}...

Agora, se quiser manter seu código atualizado, logo você vai precisar trocar todas as funções mysql_… por mysqli ou pdo o mais rápido possível, pois do jeito que está, além de não existir no php7, você corre sérios riscos de sql injection caso esteja em produção… futuramente pesquise sobre prepared statments no php…

R

Me ajudou muitooo.

Obrigado!

Criado 16 de abril de 2017
Ultima resposta 19 de abr. de 2017
Respostas 8
Participantes 3