用php发送html表单无法解决

用php发送html表单无法解决,php,forms,send,Php,Forms,Send,我在用php发送简单的html表单时遇到了大问题。 我的问题是,当所有字段都为空时,它仍然发送消息。 我不知道为什么这个代码仍然发送空表单 <form id="form1" name="form1" method="post" action="forma.php"> <p> <label for="ime">Ime:</label> <input type="text" name="ime" id="ime" /&

我在用php发送简单的html表单时遇到了大问题。 我的问题是,当所有字段都为空时,它仍然发送消息。 我不知道为什么这个代码仍然发送空表单

    <form id="form1" name="form1" method="post" action="forma.php">
  <p>
    <label for="ime">Ime:</label>
    <input type="text" name="ime" id="ime" />
  </p>
  <p>
    <label for="prezime">Prezime:</label>
    <input type="text" name="prezime" id="prezime" />
  </p>
  <p>
    <label for="email">e-mail:</label>
    <input type="text" name="email" id="email" />
  </p>
  <p>
    <label for="poruka">Poruka:</label>
    <textarea name="poruka" cols="40" rows="10" id="poruka"></textarea>
  </p>
  <p>
    <input type="submit" name="submit" value="submit" />
  </p>
</form>
我的php代码:

<?php
if (isset($_POST['submit']))
{

$ime= $_POST['ime'];
$prezime= $_POST['prezime'];
$email= $_POST['email'];
$poruka= $_POST['poruka'];

$email_from = 'neki@email.com';
$email_subject = "forma sa sajta";
$email_body = "Ime: $ime. \n". "Prezime: $prezime \n". "email: $email \n". "poruka: $poruka" ;
$to = "myemail@gmail.com";
mail ($to, $email_subject, $email_body);

echo "Message is sent";

}

else {

echo "Message is not sent";

}

?>
同样,当我填写字段时,消息被发送。没关系,我收到了电子邮件。 但当我只点击提交而不填写字段时,它仍然会向我的电子邮件发送消息

这个代码有什么问题?我尽我所能,但没有成功


谢谢。

问题在于,您只是检查是否设置了提交

您的if语句应如下所示:

if(isset($_POST['submit']) && all_other_fields_are_valid($_POST)){...}

function all_other_fields_are_valid($fields)
{
   //logic to decide what fields and values you require goes here
}

您需要检查所有必填字段。仅选中“提交”,它将尝试邮寄:

if (isset($_POST['submit']
        , $_POST['ime']
        , $_POST['prezime']
        , $_POST['email']
        , $_POST['poruka']))
此外,您还可以使用新的HTML5 required属性从客户端进行验证:

 <input type="text" name="ime" id="ime" required />

这样,您就不会为格式错误的请求浪费服务器资源。

实际上,由于它们是作为空变量发送的,因此在isset中,即使提交时输入字段中没有文本,它们的计算结果仍然为true

if($_POST['ime'] && $_POST['prezime'] && $_POST['email'] && $_POST['poruka']) {
    // do stuff here
}

只要所有这些都有值,并且没有一个值是“false”或“0”,只有当有人在所有输入字段中输入文本时,才会计算为true。

这将检查是否设置了所有必需的后变量,如果它们为空,并给出错误:

<?php
if (isset($_POST['submit'], $_POST['ime'], $_POST['prezime'], $_POST['email'], $_POST['poruka']))
{
    $error = "";
    if($_POST['ime'] == ""){
        $error .= "ima was empty!<br />";
    }
    if($_POST['prezime'] == ""){
        $error .= "prezime was empty!<br />";
    }
    if($_POST['email'] == ""){
        $error .= "email was empty!<br />";
    }
    if($_POST['poruka'] == ""){
        $error .= "poruka was empty!<br />";
    }

    if($error == ""){

        $ime= $_POST['ime'];
        $prezime= $_POST['prezime'];
        $email= $_POST['email'];
        $poruka= $_POST['poruka'];

        $email_from = 'neki@email.com';
        $email_subject = "forma sa sajta";
        $email_body = "Ime: $ime. \n". "Prezime: $prezime \n". "email: $email \n". "poruka: $poruka" ;
        $to = "myemail@gmail.com";
        mail ($to, $email_subject, $email_body);

        echo "Message is sent";

    } else {

        echo $error;
    }
} else {

    echo "Message is not sent";

}

?>

您仅检查POST数组中是否存在submit。并非所有字段都存在。您需要检查每个字段是否为空。PHP不会自动检查表单的值,您必须自己进行检查。您可以在表单中进行if-else验证,当验证失败时,将一些字段设置为红色:使用javascript可以进行非常强大的验证。Bruh,我注意到你从来没有接受过任何问题的答案。虽然我们免费提供答案,但我们确实希望在正确的时候得到奖励。请接受解决问题的答案。对前面的问题也要这样做。看一看空函数,它会检查var是否存在,并且不会计算为false。