[RESOLVIDO] Inputs sendo resetados após pressionar botão

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">&nbsp;</span><br/>
				E-mail:<br/>
				<input type="text" name ="email" id="email"><br/><span class="warning" id="erroemail">&nbsp;</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">&nbsp;</span><br/>
				Nome de usuário:<br/>
				<input type="text" name="username" id="username"><br/><span class="warning" id="errouser">&nbsp;</span><br/>
				Senha:<br/>
				<input type="password" name="password1" id="password1"><br/><span class="warning" id="erropass1">&nbsp;</span><br/>
				Repita a senha:<br/>
				<input type="password" name="password2" id="password2"><br/><span class="warning" id="erropass2">&nbsp;</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

  1. 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']; ?>")

  2. 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? :rofl:

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. :slight_smile: