How to call php in html and validate a form?

Asked

Viewed 8,469 times

1

I am validating a form where the user will fill in the fields :

  • Name
  • Surname
  • Email
  • Telephone
  • Message

Through these, I want to validate if the user does not type in these fields appears a message saying that it is necessary to fill in the fields.

I’ve managed to create in php a validation for these fields, but as I am a programmer still new in php,I don’t know if I’m doing this call right php,within the html I’m using method post,to pick up the fields.

Php code :

<html>
<body>
<?php
$nome = $_POST["nome"];
$sobrenome = $_POST["sobrenome"];
$email = $_POST["email"];
$telefone = $_POST["telefone"];
$mensagem = $_POST["mensagem"];
$erro = 0;


//Verifica se o campo nome não está em branco.
if(empty($nome) OR strstr ($nome,'')==false)
{
    echo("Favor digitar seu nome"; $erro =1;);  
}

//Verifica se o campo sobrenome não está em branco.
if(empty($sobrenome) OR strstr ($nome,'') ==false)
{
    echo("Favor digitar seu sobrenome";$erro=1;);
}

//Verifica se o campo email não está em branco.
if(strlen($email)<8 || strstr($email,'@')==false)
{
    echo("Favor digitar seu email corretamente";$erro = 1;);    
}

//Verifica se o campo telefone está sendo preenchido com texto.
if(!is_numeric($telefone)) 
{
    echo("Preencha o campo telefone somente com números.";$erro = 1;);
}

//Verifica se o campo email não está em branco.
if(empty($mensagem) OR strstr ($mensagem,'') ==false)
{
    echo("Favor digitar sua mensagem";erro = 1;)    
} 
?>
</body>
</html>

I’m using the form action = "validar.php" in the form. At the time I place to send the form, it appears nothing, php in which I created, called validar.php.Doesn’t even check the fields.

How can I make this work ? If anyone can help me I will be grateful.

  • When you submit the form it goes directly to action, and that file is where you have to do the validations

  • 1

    Why not use the required tag in form inputs?

  • This code you have placed is from the archive validar.php? Also put your html code.

  • @Diego I am now using the required tag on the form inputs.

  • @Falion that solves your problem right?

  • No, actually almost, because I want you to have specific messages for each textbox, for example the name : "Fill in the field with your name".

Show 1 more comment

2 answers

4


The code php is full of syntax error (mainly in echo). The correct (not so correct) would be:

<html>
<body>
<?php
$nome = $_POST["nome"];
$sobrenome = $_POST["sobrenome"];
$email = $_POST["email"];
$telefone = $_POST["telefone"];
$mensagem = $_POST["mensagem"];
$erro = 0;


//Verifica se o campo nome não está em branco.
if(empty($nome) OR !strstr($nome,''))
{
    echo "Favor digitar seu nome";  
}

//Verifica se o campo sobrenome não está em branco.
if(empty($sobrenome) OR !strstr($nome,''))
{
    echo "Favor digitar seu sobrenome";
}

//Verifica se o campo email não está em branco.
if(strlen($email)<8 || !strstr($email,'@'))
{
    echo "Favor digitar seu email corretamente";    
}

//Verifica se o campo telefone está sendo preenchido com texto.
if(!is_numeric($telefone)) 
{
    echo "Preencha o campo telefone somente com números.";
}

//Verifica se o campo email não está em branco.
if(empty($mensagem) OR !strstr($mensagem,''))
{
    echo "Favor digitar sua mensagem";    
} 
?>
</body>
</html>

An example of a form:

<html>
<head>
    <meta charset="utf-8" />
    <title>POST</title>
</head>

<body>
    <form action="teste.php" method="post">
        <input name="nome" type="text" placeholder="Seu nome..." />
        <input name="sobrenome" type="text" placeholder="Seu sobrenome..." />
        <input name="email" type="email" placeholder="Seu email..." />
        <input name="telefone" type="tel" placeholder="Seu telefone..." />
        <textarea name="mensagem" type="text" placeholder="Sua mensagem..."> </textarea>
        <input name="enviar" type="submit" value="Enviar" />
    </form>
</body>

</html>

Could use the attribute required HTML to make the field mandatory. So:

<input name="nome" type="text" placeholder="Seu nome..." required />

Another better way would be:

<html>
<head>
    <meta charset="utf-8" />
    <title>POST</title>
</head>
<body>
<?php
$nome = $_POST["nome"];
$sobrenome = $_POST["sobrenome"];
$email = $_POST["email"];
$telefone = $_POST["telefone"];
$mensagem = $_POST["mensagem"];
$erro = 0;


//Verifica se o campo nome não está em branco.
echo !empty($nome) ? "Nome: {$nome}<br/>" : "Favor digitar seu nome<br/>";

//Verifica se o campo sobrenome não está em branco.
echo !empty($sobrenome) ? "Sobrenome: {$sobrenome}<br/>" : "Favor digitar seu sobrenome<br/>";

//Verifica se o campo email não está em branco.
echo (!empty($email) and filter_var($email, FILTER_VALIDATE_EMAIL)) ? "Email: {$email}<br/>" : "Favor digitar seu email ou um email válido<br/>";

//Verifica se o campo telefone está sendo preenchido com texto.
echo (strlen($email) >= 8 and filter_var($telefone, FILTER_VALIDATE_INT))
    ? "Telefone: {$telefone}<br/>"
    : "Preencha o campo telefone somente com números.<br/>";


//Verifica se o campo email não está em branco.
echo !empty($mensagem) ? "Mensagem: {$mensagem}<br/>" : "Favor digitar sua mensagem<br/>";
?>
</body>
</html>

Briefly, the ! takes the inverse result, when I put !empty($var), I mean when the variable is NOT empty.

But what about the if? Are gone?

Yes and no, I used the ternary operators, which can be explained here:

The basics - PHP the right way

To see more: PHP the right way

  • Hello friend, your code worked but in certain parts not,for example it does not speak to the user "Please type your name" and yes "Fill in the field",and in the part of the phone it does not check if the user typed only numbers, because I tested with text and was normally. How can I fix this ?

  • You used the answer form?

  • No, I used my own.

  • I saw in the comment above, if you are using the attribute required then it is default that it will not let you click send with an empty field showing the message "Fill this field"

  • But if I take the required out of the code, it doesn’t work that your code,

  • Here is normal.. Try with my reply form.

  • I tested with your code now and it also does not validate.

  • Here it was normal, I think you are not understanding is the concept of PHP and the way it is being used. Anyway the form will be sent, even if the phone number is composed of letters. But in PHP it will echo on the screen saying that the phone should be composed of numbers. If you do not want to pass the form, use Ajax or return the error by parameter with the header("Location:pagina.php?erro='O erro que deu'")

Show 3 more comments

0

You can do the validation as follows:

<?php

$input = $_POST;
$erro = false;

if (isset($input['enviar'])) {

    if (in_array("",$input)){

      $erro = 'Favor preencher todos os campos do formulário';

   } elseif (filter_var($input['email'],FILTER_VALIDATE_EMAIL)) {

      $erro = 'Favor informar um e-mail válido';

   } elseif(!is_numeric($input['telefone'])) {

     $erro = 'O campo telefone deve conter apenas números';
   }

   if ($erro){
     echo $erro;
   }

}

?>

or if you want to pass the message to each field

<?php

$input = $_POST;
$erro = [];

if (isset($input['enviar'])) {

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

      if ($value == ""){

        $campo = str_replace(["_","-"]," ",$key);

        $error[] = 'O campo '.$campo.' deve ser preenchido';
      }

   }

    if (empty($error) && filter_var($input['email'],FILTER_VALIDATE_EMAIL))      {

      $erro[] = 'Favor informar um e-mail válido';

   } elseif(empty($error) && !is_numeric($input['telefone'])) {

     $erro[] = 'O campo telefone deve conter apenas números';
   }

   if ($erro){
     var_dump($erro);
   }

}

?>

Browser other questions tagged

You are not signed in. Login or sign up in order to post.