【问题标题】:PHP code saying input is empty but it's not?PHP代码说输入是空的,但它不是?
【发布时间】:2019-08-02 12:15:28
【问题描述】:

我的 php 代码有问题,当我输入密码时,它似乎返回“密码不应为空”。我认为它可能来自我的 html 代码,因为我让他们输入了两次。我需要在我的数据库中创建另一个变量来确认密码吗?

<?php
$firstname = filter_input(INPUT_POST, 'firstname');
$lastname = filter_input(INPUT_POST, 'lastname');
$email = filter_input(INPUT_POST, 'email');
$password = filter_input(INPUT_POST, 'password');
if (!empty($firstname)) {
    if (!empty($lastname)) {
        if (!empty($email)) {
            if (!empty($password)) {
                $host = "127.0.0.1:3307";
                $dbusername = "root";
                $dbpassword = "";
                $dbname = "register";
                // Create connection
                $conn = new mysqli($host, $dbfirstname, $dblastname, $dbemail,
                    $dbpassword);
                if (mysqli_connect_error()) {
                    die('Connect Error (' . mysqli_connect_errno() . ') '
                        . mysqli_connect_error());
                } else {
                    $sql = "INSERT INTO Signup (firstname, lastname, email, password) values ('$firstname','$lastname','email','password')";
                    if ($conn->query($sql)) {
                        echo "New record is inserted sucessfully";
                    } else {
                        echo "Error: " . $sql . "" . $conn->error;
                    }
                    $conn->close();
                }
            } else {
                echo "Password should not be empty";
                die();
            }
        }
    }
} else {
    echo "Username should not be empty";
    die();
}

【问题讨论】:

  • 在最顶部做一个var_dump($_POST);exit;,看看你得到了什么数据。密码在吗?
  • 欢迎来到 SO。请花时间edit您的帖子并正确缩进代码。这将使帮助您调试问题变得更加容易。
  • 显示你的 html 也许你输入了错误的名字
  • for echo "Password should not be empty"; in code = this if (!empty($lastname))
  • 如果您两次询问密码,可能您有两个具有相同名称的输入,这可能就是问题所在。请给我们看html代码

标签: php html forms login rows


【解决方案1】:

你的错误是因为你的帖子值是$_POST['psw'],而你的代码是$_POST['password']。更改您的 HTML 表单或 PHP 代码以使值相同。

您的代码非常令人困惑。我把它简化了一点,试试这个,看看你是否仍然得到同样的错误:

# Check to see if you're getting the right variables in the first place:
var_dump($_POST); //Remove once you're sure you're getting the right stuff

if(!$firstname = filter_input(INPUT_POST, 'firstname')){
    die("First name should not be empty");
}
if(!$lastname = filter_input(INPUT_POST, 'lastname')){
    die("Last name should not be empty");
}
if(!$email = filter_input(INPUT_POST, 'email')){
    die("Email should not be empty");
}
if(!$password = filter_input(INPUT_POST, 'password')){
    die("Password should not be empty");
}

$host = "127.0.0.1:3307";
$dbusername = "root";
$dbpassword = "";
$dbname = "register";

$conn = new mysqli($host, $dbfirstname, $dblastname, $dbemail, $dbpassword);
if (mysqli_connect_error()) {
    die('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error());
}

$sql = "INSERT INTO Signup (firstname, lastname, email, password) values ('$firstname','$lastname','email','password')";
if (!$conn->query($sql)) {
    echo "Error: " . $sql . "\r\n" . $conn->error;
    $conn->close();
    exit;
}

echo "New record is inserted successfully";

一般准则

  1. 不要嵌套if() 语句。它使下面的代码非常混乱。
  2. 如果布尔结果是一个交易破坏者,则在 if/else 语句中首先具有该结果。例如,如果 SQL 查询失败,首先在 if() 语句中获得否定结果(这将停止您的代码),然后一起跳过 else 语句。
  3. 评论您的代码。

【讨论】:

  • array(6) { ["firstname"]=> string(5) "Bardo" ["lastname"]=> string(5) "Perez" ["email"]=> string( 20)“Bardoperez@yahoo.com”[“psw”]=>字符串(3)“123”[“psw-repeat”]=>字符串(3)“123”[“记住”]=>字符串(2) "on" } 密码不应为空 // 是此代码的输出,看起来一切正常,但仍然无法正常工作或将数据传输到我的数据库
  • 感谢您提醒我这一点,我已修复它并且问题已解决,但我现在收到未定义的错误,因此在下面... PS 感谢您的帮助,我和我的伙伴非常感谢。
【解决方案2】:
<form method="post" action="overstack.php"> 
  <div class="container">
    <br> 
    <h1>Sign Up</h1>
    <p>Please fill in this form to create an account.</p>
    <hr>

    <label for="firstname"><b>First Name</b></label>
    <input type="text" placeholder="Enter First Name" name="firstname" required>

    <label for="lastname"><b>Last Name</b></label>
    <input type="text" placeholder="Enter Last Name" name="lastname" required>

    <label for="email"><b>Email</b></label>
    <input type="text" placeholder="Enter Email" name="email" required>

    <label for="psw"><b>Password</b></label>
    <input type="password" placeholder="Enter Password" name="psw" required>

    <label for="psw-repeat"><b>Repeat Password</b></label>
    <input type="password" placeholder="Repeat Password" name="psw-repeat" required>

    <label>
      <input type="checkbox" checked="checked" name="remember" style="margin-bottom:15px"> Remember me
    </label>

    <p>By creating an account you agree to our <a href="#" style="color:dodgerblue">Terms & Privacy</a>.</p>

    <div class="clearfix">
      <button type="button" class="cancelbtn">Cancel</button>
      <button type="submit" class="signupbtn">Sign Up</button>
    </div>
  </div>
</form>

这是我上面 php 代码的 html 表单

【讨论】:

  • 我更新了我的答案,包括为什么结果不符合预期。 (值名称不匹配。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-31
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多