Boa tarde
Estou criando um sistema de cadastro porém me deparei com o seguinte problema, existem alguns inputs para o cadastramento do usuário e um botão “Registre-se”, quando esse botão é pressionado, as variáveis do POST são passadas à variáveis da SESSION, o problema é que quando esse botão é ativado, apesar o PHP conseguir resgatar esse valor, os inputs ficam em branco, ou seja, tudo que o usuário digitou é perdido.
Como resolver esse problema?
<form method="post">
<div class="registerform">
Nome:<br/>
<input type="text" name="nome" id="nome"><br/><span class="warning" id="erronome"> </span><br/>
E-mail:<br/>
<input type="text" name ="email" id="email"><br/><span class="warning" id="erroemail"> </span><br/>
Gênero:<br/>
<input type="radio" name="genre1" value="M" id="genre1">Masculino<br/>
<input type="radio" name="genre2" value="F" id="genre2">Feminino<br/><span class="warning" id="errogenre"> </span><br/>
Nome de usuário:<br/>
<input type="text" name="username" id="username"><br/><span class="warning" id="errouser"> </span><br/>
Senha:<br/>
<input type="password" name="password1" id="password1"><br/><span class="warning" id="erropass1"> </span><br/>
Repita a senha:<br/>
<input type="password" name="password2" id="password2"><br/><span class="warning" id="erropass2"> </span><br/>
</div>
<br/><input type="submit" name="enviar" value="Registar!" class="botao" >
</form>
<?php
if(isset($_POST['enviar'])){
$_SESSION['n'] = $_POST['nome'];
$_SESSION['e'] = $_POST['email'];
$_SESSION['u'] = $_POST['username'];
$_SESSION['p'] = $_POST['password1'];
if(isset($_POST['genre2'])){
$_SESSION['g'] = $_POST['F'];
}
else{
$_SESSION['g'] = $_POST['M'];
}
}
?>
O problema não ocorre somente com os inputs, visto que faço uma verificação dos dados com js também, e códigos como:
document.getElementById(“erroemail”).innerHTML = “E-mail inválido!”;
document.getElementById(“email”).style.backgroundColor = “#ffc4c4”;
também são resetados, ou seja, essas mensagens de erro não permanecem na tela.
Ola
me desculpe, mas nada do que o usuario digitou foi perdido.
este é o comportamento padrão do browser: vc submeteu um submit
do seu form
, os dados foram enviados por POST e vc salvou na session.
se vc quer evitar o comportamento padrão, vc tem duas opçoes
-
no php vc deve verificar se cada input ja contem um valor salvo na session e, se tiver, vc preenche no formulario ( atributo value, tipo value="<?= $_SESSION['x']; ?>"
)
-
ao invés de utilizar um submit de um formulario com html puro, vc pode enviar os dados via javascript usando AJAX.
uma forma é mais server-side, a outra é mais client-side. depende do que vc quer fazer e dos seus conhecimentos.
1 curtida
O problema não ocorre somente com os inputs, visto que faço uma verificação dos dados com js também, e códigos como:
document.getElementById(“erroemail”).innerHTML = “E-mail inválido!”;
document.getElementById(“email”).style.backgroundColor = “#ffc4c4”;
também são resetados, ou seja, essas mensagens de erro não permanecem na tela.
Faz tudo em javascript.
Faz o request em Ajax
Em 1900 e guaraná com rolha eu faria isso com jQuery + jQuery validator
Mas aconselho a trocar o php para outro endpoint exemplo:
formulario.html (ou php pra criar a sessão/ cookie etc )
form.php (recebe dados via post, responde um json se precisar )
Onde o
Obrigado, irei tentar dessa forma.
Já pensei em fazer assim mas imaginei que poderia ser arriscado comprometer informações como a função utilizada pra passar esses dados e os argumentos utilizados por ela, uma vez que, o client pode facilmente visualizar o código JS.
Esse pode realmente ser um fator de risco ou é só paranoia minha?
Questão de comodidade, se quer ter os dados no navegador, correrá esse risco, agora… nada impede (e altamente recomendado) você validar os dados também no php e não somente no js como você diz ter feito, isso aumenta a segurança, tendo em vista que o usuário não terá acesso direto ao servidor onde o php está hospedado…
Pessoal, agradeço à todos pela ajuda, pesquisando muito à fundo descobri que o navegador estava refrescando a página pois eu, por inexperiência estava utilizando um input do tipo submit para chamar a função JS, sendo que o submit(me corrijam se eu estiver errado), refresca a página após enviar os dados do form ao servidor.
Mas enfim, muito obrigado à todos.