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