Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Submit

Srs, bom dia!

Estou com um problema que eu não sei se é possível soluciona-lo com PHP:

Eu tenho um formulário onde eu executo um post. Para gerenciar as mensagens de erro eu as gravei em um array caso um campo não seja preenchido pelo o usuário eu faço a impressão das mensagens.

Meu problema é, quando eu executo um click no botão de add, as mensagens são impressas mas os campos que estavam preenchidos são apagados. É possível via PHP manter os campos que já foram preenchidos em tela?

FORM
<?php require_once('validation.php') ?>    
    <section>      
      <div class="container">
      <h2 class="title">Adicionar usuário</h2>    
      <form action="../../controllers/user/new.php" method="post">                
        <fieldset>
          <label for="name">Nome</label>
          <input type="text" class="input-name" name="name" id="input-name" placeholder="digite o seu nome" required>
        </fieldset>
        <fieldset>
          <label for="email">E-mail</label>
          <input type="email" class="input-email" name="email" id="input-email" placeholder="digite o seu email" required>
        </fieldset>                
        <fieldset>
          <label for="password">Senha</label>
            <input type="password" class="input-password" name="password" 
            id="input-password" placeholder="digite a sua senha" required>                
            <button type="submit" id="add-user">Adicionar</button>                    
        </fieldset>                
        </div>
      </form>
      </div>
    </section>    

      VALIDATION
       <?php
      session_start();      
        require_once('../../controllers/global/validation.php');
        require_once('../../controllers/global/session.php');

        if(array_key_exists('emptyField', $_SESSION)){ 
        $erros = global_validation_set_erro();?>
        <table class="alert">
          <?php foreach($erros as $erro): ?>
          <tr>      
            <td><?= $erro ?></td>                  
          </tr>
        <?php 
          global_kill_session($erro);                                
          endforeach; 
         ?>         
        </table>  
      <?php
      }
      ?>      

   TRATAMENTO DOS ERROS.
     function global_session_new($type){      
     $_SESSION[$type] = $type;
  }    

  function global_validation_set_erro(){        
    $erros = Array();
    $erros = $_SESSION;  
    array_shift($erros);  
    return $erros;
  }

  function global_kill_session($type){
      unset($_SESSION[$type]);
  }
4 respostas
solução!

Oi Leandro, tudo bem? É possível fazer isso sim, da mesma forma que fez com os erros, você pode criar um array para guardar o que o usuário já preencheu e verificar se o valor existe ou não dentro do atributo value de cada input e imprimi-lo.

Deu pra pegar a ideia ou quer um trecho de código pra ter uma ideia mais próxima do que eu to falando?

Oi Wanderson. Tudo bem!

Entendi. Eu vou tentar fazer isso caso eu encontre dificuldade eu peço o código.

Obrigado :)

Ótimo, conta com a gente sempre. :)

Oi Wanderson!

Eu consegui implementar a função graças a sua orientação. Obrigado.

Estou disponibilizado o código caso alguém encontre a mesma necessidade.

FORM

<?php require_once('erros-handling.php'); ?>        
    <section>      
      <div class="container">
      <h2 class="title">Adicionar usuário</h2>    
      <form action="../../controllers/user/new.php" method="post">                
        <fieldset>
          <label for="name">Nome</label>
          <input type="text" class="input-name" name="name" value="<?=$field['name']?>" id="input-name" placeholder="digite o seu nome">
        </fieldset>
        <fieldset>
          <label for="email">E-mail</label>
          <input type="email" class="input-email" name="email" value="<?=$field['email']?>" id="input-email" placeholder="digite o seu email">
        </fieldset>                
        <fieldset>
          <label for="password">Senha</label>
            <input type="password" class="input-password" name="password" 
            id="input-password" value="<?=$field['password']?>" placeholder="digite a sua senha">                
            <button type="submit" id="add-user">Adicionar</button>                    
        </fieldset>

NEW.php

global_session_input_field('name', $_POST['name']);
 global_session_input_field('email', $_POST['email']);
 global_session_input_field('password', $_POST['password']);

SESSION_INPUT_FIELD

function global_session_input_field($field, $value){
    $_SESSION[$field] = $value;
  }

KILL_SESSION

function global_kill_session($name){
      unset($_SESSION[$name]);
  }

ERROS-HANDLING

<?php         
        $field = array('name' =>"", 'email' =>"", 'password' => "");  
        array_key_exists('name', $_SESSION) ? 
          $field['name'] = $_SESSION['name'] : "";
        global_kill_session('name'); 

        array_key_exists('email', $_SESSION) ? 
          $field['email'] = $_SESSION['email'] : ""; 
        global_kill_session('email'); 

        array_key_exists('password', $_SESSION) ? 
          $field['password'] = $_SESSION['password'] :  ""; 
        global_kill_session('password');         
     ?>