Pergunta

eu tenho uma página de envio em html. Quando envio os dados do formulário, ele vai para uma página PHP, que insere os dados no banco de dados.

Minha pergunta é como eu garantiria que os dados na página HTML não sejam nulos ou vazios sem usar o JavaScript? Existe alguma maneira que isso possa ser feito no PHP? obrigado!

Foi útil?

Solução

Basta usar estruturas de controle como de costume:

$non_empties = array('name', 'email', 'address');

foreach ($non_empties as $field) {
    if (! isset($_POST[$field]) || $_POST[$field] == '') {
        show_error("Please fill your $field, thank you.");
    }
}

$db->insert();

Exemplo mais avançado:

// Defined in your library
function validate_as_non_empty(Array $non_empties) {
    foreach ($non_empties as $field) {
        if (! isset($_POST[$field]) || $_POST[$field] == '') {
            throw new Exception("Please fill your $field, thank you.");
        }
    }
}

// Defined in your library
function validate_as_foo(Array $arr) { ... }

// Your request handler
try {
    validate_as_non_empty(array('name', 'address'));
    validate_as_foo(array('email'));
    $db->insert();
} catch (Exception $e) {
    show_error($e->getMessage());
}

Existem pelo menos milhões de maneiras de fazer validação. Geralmente você tem algum tipo de estrutura para confiar. Os exemplos acima são apenas dados para inspiração.

Outras dicas

No topo da sua página PHP, (a página a que você vinculou no atributo de ação do formulário) coloque:

if (isset($_POST['submit_check']) && strlen($_POST['whatever'])) { // submit_check is a hidden form field
    insert_to_db();
    header('Location: success.php'); // redirect to another page to prevent double-submits
    exit;
}

Então, seu HTML pode parecer:

<form action="" method="post"> 
    <input type="text" name="whatever"/>
    <input type="hidden" name="submit_check" value="1"/> 
</form>

O valor da ação em branco significa postar na mesma página, mas você pode postar em outra página, se quiser.

Recupere os dados enviados usando o $ _Post Super-global em seu arquivo PHP como este:

$ _Post ['primeiro nome'] para cada elemento HTML que está sendo pós-ED. Para Eaxmple, em seu HTML:

<input type="text" name="firstname" />

Em seguida, valide os dados usando PHP, com Regex, ISSET, etc. e redirecione de acordo para uma página de sucesso ou de volta ao formulário HTML.

Você também pode fazer o mesmo usando Ajax (a mesma validação do PHP será aplicada, apenas o modelo de transferência de dados é um pouco diferente)

Se o que você está perguntando é: 'Posso garantir que os dados sejam válidos no lado do cliente sem JavaScript', a resposta é não.

Mas se tudo o que você deseja fazer é validar os dados antes de inseri -los no seu banco de dados, certamente.

foreach ($_POST as $key=> $value) {

  switch ($key) {
   case 'my_value_name':
      //test $value is not null and other validation;
      //insert into database function
      break;

   ...

  }

}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top