我在php中有一个isset检查,if语句检查各种函数是否返回false。问题是,在第一次错误回归后它不会退出。
我确信我遗漏了PHP语法中的基本内容。
<?php
$name = $_POST['name'];
$email = $_POST['email'];
$email2 = $_POST['email2'];
function nameCheck($name)
{
if (strlen($name)<1 || strlen($name)>40)
{
return false;
}
else
{
return true;
}
}
function emailCheck($email)
{
$regex = "/^[*\w]{1,25}+@[*\w]{1,20}+\.[*\w]{1,10}$/";
if (preg_match($regex, $email))
{
return true;
}
}
function emailMatch($email, $email2)
{
if ($email === $email2)
{
return true;
}
else
{
return false;
}
}
if (isset($_POST['submit']))
{
if (!nameCheck($name))
{
echo '<script type="text/javascript"> alert("Fail name!")</script>';
return false;
}
elseif (!emailCheck($email))
{
echo '<script type="text/javascript"> alert("Fail email check!")</script>';
return false;
}
elseif (!emailMatch($email,$email2))
{
echo '<script type="text/javascript"> alert("Fail email match!")</script>';
return false;
}
else
{
mail ("email@email.com", "this", "message");
echo '<script type="text/javascript"> alert("Success!")</script>';
}
}
?>
我正在使用警告框来发送代码文本。 每个警报框不仅会出现,甚至会成功! 我究竟做错了什么? TX
这只是我正在玩的代码来学习考试,我实际上并不需要在网站上使用它,所以这只是练习。
答案 0 :(得分:2)
目前您的代码是有效的:
if (! check) {
echo();
return;
}
if (! check) {
echo();
return;
}
但是函数之外的return
并没有做任何事情 - PHP无法将控件返回到。
您需要做的是切换这些支票,使其格式化为:
if (isset($_POST['submit']))
{
if (!nameCheck($name))
{
die('<script type="text/javascript"> alert("Fail name!")</script>');
}
elseif
......
}
else
{
mail ("email@email.com", "this", "message");
echo '<script type="text/javascript"> alert("Success!")</script>';
}
使用die
将打印出字符串的内容,并立即停止执行代码。
关于功能......
如果你要使用他们的返回值,你需要确保他们总是返回一些东西。目前,emailCheck
是:
function emailCheck($email)
{
$regex = "/^[*\w]{1,25}+@[*\w]{1,20}+\.[*\w]{1,10}$/";
if (preg_match($regex, $email))
{
return true;
}
}
如果没有匹配,则会返回null
;虽然当您在if
声明中检查时,会评估为false
,因此您的支票无法通知。当你调用return
时,你的函数会立即停止运行,并且控制权会传回给调用它的代码,因此你可以将检查函数编写为:
function myCheck($parameter) {
if ($checkhere == 'something') {
return true; // returns true to the calling function
// stops running the code in this function
}
// The only way this will be run is if the check has failed, so we
// don't need an else
return false;
}
它与使用else
完全相同,但输入次数略少 - 它的风格与您选择的方式不同。