PHP 表单在创建用户帐户时将 NULL 行添加到我的 SQL 数据库

标签 php mysql email post pdo

我正在使用 PHP 为我的网站创建用户注册表单,并将用户数据“发布”到我的 SQL 数据库。当我创建前两个用户时,它将用户信息发布到我的数据库中,例如用户名和电子邮件,每个字段都有一行 NULL。我没有更改 PHP 代码中的任何内容,但现在当我创建用户时,它会向数据库添加一个新行,但所有字段均为 NULL,以及密码的哈希码。我不知道为什么它会显示为 NULL。下面我将包含我的 register.php 代码。

    <?php
#session_start();
#if(isset($_SESSION['User']))
#{
# header("Location: home.php");
#}
include_once 'dbconnect.php';

#if(isset($_POST['submit']))
#
     $uname = $_POST['uname'];
     $email = $_POST['email'];
     $upass = $_POST['upass'];

     $stmt = $dbh->prepare("SELECT COUNT(*) as `emailcount` FROM `User` WHERE email=:email");
     $stmt->execute(array("email" => $_POST['email']));
     $row = $stmt->fetch(PDO::FETCH_ASSOC);

     if ($row['emailcount'] > 0) {
        echo "<script>alert('Email $email already exists in our system. Please try another email')</script>";
     } else {


        $stmt = $dbh->prepare("INSERT INTO User(`uname`, `email`, `upass`) VALUES (:uname, :email, :upass)");

        $stmt->execute(array("uname" => $_POST['uname'], "email" => $_POST['email'], "upass" => md5($_POST['upass'])));
     }


?>

我还将在此处添加我们正在使用的 HTML 表单

            <form method='post' action='register.php'>
                <pre>
                <div>
            <label>Name : (letters only)*</label>
<input type="text" name="uname" pattern="[A-Za-z]+" title="only letters" required />
</div>

<div>
<label>E-mail : (xyz@zyx.com)*</label>
<input type="email" name="email" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$" title="xyz@something.com" required />
</div>


<div>
<label>password : (at least 6 chars)</label>
<input type="password" name="upass" pattern=".{6,}" title="Six or more characters" required />
</div>



<input type='submit' name='submit' value='Sign Up'>
</pre>
</form>

最佳答案

您是否曾在没有帖子提交的情况下访问register.php?因为如果您在没有提交的情况下进入该页面,插入仍然会执行,但您的变量将全部为 null 因为它们仅在 $_POST['submit'] 时设置 已设置。

如果是这种情况,请尝试以下操作:

if(isset($_POST['submit']))
{
     $uname = $_POST['uname'];
     $email = $_POST['email'];
     $upass = $_POST['upass'];

     $stmt = $dbh->prepare("SELECT COUNT(*) as `emailcount` FROM `User` WHERE email=:email");
     $stmt->execute(array("email" => $_POST['email']));
     $row = $stmt->fetch(PDO::FETCH_ASSOC);

     if ($row['emailcount'] > 0) {
        echo "<script>alert('Email $email already exists in our system. Please try another email')</script>";
     } else {


        $stmt = $dbh->prepare("INSERT INTO User(`uname`, `email`, `upass`) VALUES (:uname, :email, :upass)");

        $stmt->execute(array("uname" => $_POST['uname'], "email" => $_POST['email'], "upass" => md5($_POST['upass'])));
     }
}

关于PHP 表单在创建用户帐户时将 NULL 行添加到我的 SQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37038446/

相关文章:

javascript - 删除成功后显示消息

php - Laravel:如何验证模型是否已更改

PHP 使用 SSL 连接到 MongoDB

mysql - 如何通过从操作系统提示符连接mysql来运行更新语句?

android - 如何在不使用外部应用程序的情况下直接发送带附件的电子邮件

php - 从 mailer.php 提交的表单将转到空白页面。可能重定向到上一个 html 页面?

php - Jquery:选中或取消选中复选框时无法显示加载相应页面

php - 使用列中的数字创建列号

mysql - 给定日期 "03/13/2010",在 MYSQL Where 子句中使用它?

php - 如何使用 Slim 框架的电子邮件功能发送电子邮件?