Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
包含提交按钮的PHP表单验证_Php - Fatal编程技术网

包含提交按钮的PHP表单验证

包含提交按钮的PHP表单验证,php,Php,我一直在试图找到一种方法来验证我的PHP代码中的电子邮件。我只能给你我的代码的一部分,因为它真的很长。我想做的是让一个人通过点击提交按钮输入他们的电子邮件地址,如果他们以不可接受的格式输入了他们的电子邮件,就会出现一条错误消息。但我的问题是:如何将标记与函数validate email$字段结合起来?换句话说,我知道如何结合A部分和B部分,这很容易。但我真正想做的是把B部分和C部分结合起来,而不使用A部分。可能吗?我可以在函数validate email$字段中包含isset吗?我必须有一个提交

我一直在试图找到一种方法来验证我的PHP代码中的电子邮件。我只能给你我的代码的一部分,因为它真的很长。我想做的是让一个人通过点击提交按钮输入他们的电子邮件地址,如果他们以不可接受的格式输入了他们的电子邮件,就会出现一条错误消息。但我的问题是:如何将标记与函数validate email$字段结合起来?换句话说,我知道如何结合A部分和B部分,这很容易。但我真正想做的是把B部分和C部分结合起来,而不使用A部分。可能吗?我可以在函数validate email$字段中包含isset吗?我必须有一个提交按钮,我必须能够验证电子邮件

     (PART A)       <?php //formtest2.php
                       if (isset($_POST['email'])) $email = $_POST['email'];
                         else $email = "(Not entered)";
                     ?>


     (PART B)      <?php  
                   function validate_email($field)
                    {
                      if ($field == "") return "No email was entered<br>";
                        else if (!((strpos($field, ".") > 0) &&
                          (strpos($field, "@") > 0)) ||
                             preg_match("/[^a-zA-Z0-9.@_-]/", $field))
                              return "The email address is invalid<br>";
                                return "";
                     }
                     ?>


      (PART C)         <body>
                          Your email is: $email<br>
                            <form method="post"  action="brownuniversity.php">
                               What is your email address?
                                  <input type="text"  name="email">
                                       <input type="submit">
                            </form>
                         </body>

嗨首先你想改变这一切

 function validate_email($field)
                    {
                      if ($field == "") return "No email was entered<br>";
                        else if (!((strpos($field, ".") > 0) &&
                          (strpos($field, "@") > 0)) ||
                             preg_match("/[^a-zA-Z0-9.@_-]/", $field))
                              return "The email address is invalid<br>";
                                return "";
                     }
您必须在其他地方处理错误消息,但这更便于移植。我给你一个更好的电子邮件注册表,现在你可以这么做了

if(isset($_POST['email'])){
    $email = trim( $_POST['email'] ); //remove any whitespaces from pasting email.
    if(validate_email($email)){
    //send mail or whatever

    }else{
    //show errors

    }
}

您仍然需要检查验证中的isset$\u POST['email']是否不是检查它的真正位置,它应该只关注数据是否有效,而不是是否没有数据。在调用函数之前,您还需要检查表单是否已发布,并且isset满足这两个需求。我更新了答案,在没有设置的情况下,您实际上不需要验证消息,因为如果他们没有提交表单,则应始终在表单提交时设置验证消息。

似乎表单是发布到brownuniversity.php而不是formtest2.php。我认为您在formtest2.php中有正确的验证,如果您从formtest2.php调用validate_email。。。是的,这是一个疏忽,但我一直在发布到brownuniversity.php——这不是问题所在。我的问题是如何组合不同的部分并提出解决方案。好的,如果您发布到正确的页面,只需在else语句中调用来自brownuniversity.php的validate_email。然后,如果validate_电子邮件返回的内容不是您知道有错误的内容,您可以重定向回页面并显示错误,或者执行其他操作。OP需要更好的regx,当前的regx将匹配所有非电子邮件的内容,并且它只在结尾处查看单个字符ie no+。好的,明白,谢谢。好的,这很有道理。感谢您指出我的正则表达式错误并为我提供解决方案!当然,我用这个regx发电子邮件已经有一年左右了。现在来看,虽然我可以简化一下。
if(isset($_POST['email'])){
    $email = trim( $_POST['email'] ); //remove any whitespaces from pasting email.
    if(validate_email($email)){
    //send mail or whatever

    }else{
    //show errors

    }
}