2

我正在尝试创建一个基本的注册脚本。将所有表格留空时,我会收到一条消息,说我没有使用有效的电子邮件地址,但我希望它告诉我没有输入任何数据,如果任何表格留空,请执行此操作。逻辑似乎不正确,它可能是一个小问题,但我找不到它。

主页.php

<html>
<head>
</head>
<body>

<?php

    require 'functions.php';

    registration_form();

?>

</body>
</html>

函数.php

function registration_form() {

echo '<form id="register" action="register.php" method="post">';
echo '<fieldset>';

echo '<legend>Register</legend>';

echo '<input type="hidden" name="submitted" id="submitted" value="1" /></br>';

echo '<label for="email">Email Address:</label></br>';
echo '<input type="text" name="email" id="email" maxlength="100" /> </br>';

echo '<label for="password">Password:</label></br>';
echo '<input type="password" name="password" id="password" maxlength="60" /></br>';

echo '<label for="confirmpassword">Confirm Password:</label></br>';
echo '<input type="password" name="confirmpassword" id="confirmpassword" maxlength="60" /></br>';

echo '<input type="submit" name="Submit" value="Submit">';

echo '</fieldset>';
echo '</form>';
}

function validate_registration($password, $confirmpassword, $email) {

    if ((!isset($email)) || (!isset($password)) || (!isset($confirmpassword))) {


    registration_form();
    echo "Please enter the required information:";

    }


    elseif ((filter_var($email, FILTER_VALIDATE_EMAIL)) && ($password == $confirmpassword)) {

        echo "You have registered with: $email";

    }

    elseif ((filter_var($email, FILTER_VALIDATE_EMAIL)) && ($password !== $confirmpassword)) {

        registration_form();

        echo "Your password does not match!";
    }

    else {

        registration_form();
        echo "You have not entered a valid email address!";
    }
}

注册.php

require 'functions.php';

$email = $_POST['email'];
$password = $_POST['password'];
$confirmpassword = $_POST['confirmpassword'];

validate_registration($password, $confirmpassword, $email);
4

5 回答 5

1

您可能想使用

if (!empty([VARIABLE]))

在您的验证检查中,因为这些参数值将在您发布时设置为零长度字符串。因此它们将无法使用,!isset因为值 ARE set 和 ARE NOT null

于 2013-06-13T23:09:16.957 回答
0

我认为你可以使用empty()函数而不是isset()

if ((empty($email)) || (empty($password)) || (empty($confirmpassword))) {

发生这种情况是因为如果字段未填充任何值,isset()仍设置为空,您可以检查是否转储您发布的数组var_dump($_POST);

于 2013-06-13T23:09:05.377 回答
0

查看 php文档

只是一个注释,因为在我测试它之前我不确定。

如果您有一个包含参数但没有值(甚至没有等号)的查询字符串,如下所示:http://path/to/script.php?a

 The following script is a good test to determine how a is valued:
<pre> <?php  print_r($_GET);  if($_GET["a"] === "") echo "a is an
 empty string\n";  if($_GET["a"] === false) echo "a is false\n"; 
 if($_GET["a"] === null) echo "a is null\n";  if(isset($_GET["a"]))
 echo "a is set\n";  if(!empty($_GET["a"])) echo "a is not empty"; ?>
 </pre>

我用 script.php?a 对此进行了测试,它返回:

a 是一个空字符串 a 已设置

所以请注意,一个没有值关联的参数,即使没有等号,也被认为是一个空字符串(“”),isset() 为它返回 true,它被认为是空的,但不是 false 或 null。第一次测试后似乎很明显,但我只需要确定。

当然,如果我没有在浏览器查询中包含它,脚本会返回 Array() a is null

于 2013-06-13T23:14:48.317 回答
0

这是表单提交,因此设置了每个变量,但在您的情况下,使用空值。尝试empty()代替!isset().

于 2013-06-13T23:15:15.803 回答
0

怎么样if(variable)

在过去,我用它来确定变量是否存在并且有一个返回 true 的值。如果不是,它将返回 false。

我还会检查变量的长度。如果passwordconfirmpassword都是空字符串,那么它们都是相等的。

于 2013-06-13T23:39:53.950 回答