One approach is that the page in your form's action returns the form itself with the presence of error information (which fields must be modified by the user) and with the inputs filled in. For example, you have a file
form.php
and another one called
verifica.php
:
form.php
<!--Verifica se tem alguma mensagem de erro
(quando incluido pelo arquivo verifica.php (require_once))
-->
<?php
//verifica se existe a variavel $mensagemErros
//ela só vai existir se o arquivo form.php
//for incluido pelo arquivo verifica.php
if(isset($mensagemErros)){
echo '<div>' . $mensagemErros . '</div>';
}
?>
<!--No formulario basta checar o array $_POST para exibir
alguma informação submetida anteriormente-->
<form method="post" action="verifica.php">
<input type="text" name="a"
value="<?php echo isset($_POST['a']) ? $_POST['a'] : '';?>">
<input type="text" name="b"
value="<?php echo isset($_POST['a']) ? $_POST['b'] : '';?>">
<input type="submit" name="enviar_form">
</form>
verifica.php
<?php
//verifica se o formulario foi enviado
if(isset($_POST['enviar_form'])){
//verifica se tem erros (alguma função feita por você)
$temErros = true;
if($temErros){
$mensagemErros = "Foram encontrados os seguintes erros: ...";
require_once './form.php';
//ao chamar o arquivo form.php, o array global $_POST
//estara disponivel, sendo possivel alterar o atributo
//value de cada input, com os dados submetidos pelo usuario
}else{
//vai para outro lugar
header('Location: index.php');
}
}
//nada mais deve ser impresso
//para não se "misturar" com o html do formulário
The user initially accesses the file form.php
, when the form is submitted, the verifica.php
page will be called, if there is any validation error, the verifica.php
will return the form.php
file, showing the information error and inputs with values previously submitted.