首页 > 解决方案 > 表单数据不显示在数据库中

问题描述

在网站上,有一个表单,管理员可以创建帐户,这些帐户可以是用户或管理员,目前在网站上,当我填写表单字段并将表单数据发布到表单处理文件时,发生了一些事情,我一直环顾四周,但我似乎找不到任何解决方案。

<?php 
session_start();
if (!isset($_SESSION['accessRights']) || $_SESSION['accessRights'] == false) {
       header("location:../../index.php");
    }
if (!isset($_SESSION['accessRights']) || $_SESSION['accessRights'] == "user") {
       header("location:../../index.php");
    }
?>

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" type="text/css" href="../css/regform.css">
        <link rel="stylesheet" type="text/css" href="../css/bookstore.css">
        <script src="../js/formValidation.js" defer></script>
        <title>Bookstore</title>
    </head>
    <body>
        <!--nav bar-->
        <header>
            <div class="logo"><img src="../images/logo.png" alt="book logo"></div>
            <nav>
                <ul>
                    <li id="chanlog"><a href="../pages/changelog.php">Changelog</a></li>
                    <li><a href="../pages/viewBook.php">View Book</a></li>
                    <li><a href="../pages/addBookForm.php">Add Book</a></li>
                    <li class="active"><a href="../pages/regForm.php">Create Account</a></li>
                    <li><a href="../pages/logout.php">Logout</a></li>
                </ul>
            </nav>
            <div class="menu-toggle"></div>
        </header>
        <div class="reg-title">
            <h1>Create Account</h1>
        </div>
        <!--reg form-->
        <div id="form-container" class="sub-heading">
            <h2>Login Details</h2>
            <form id="regform" action="../../controller/processRegistration.php" method="POST">
                <div class="form-col">
                    <div class="field-icon">
                        <label for="uname">Username<span class="required"></span></label>
                        <i class="fas fa-user"></i>
                        <input type="text" name="user" placeholder="Username" required>
                        <div class="error hide">Username is required</div>
                    </div>
                    <div class="field-icon">
                        <label for="upass">Password<span class="required"></span></label>
                        <i class="fas fa-lock"></i>
                        <input type="text" name="pass" placeholder="Password" required>
                        <div class="error hide">Password must contain at least 8 characters</div>
                    </div>
                    <div class="field-icon">
                        <label for="urole">Access Rights<span class="required"></span></label>
                        <i class="fas fa-key"></i>
                        <input type="text" name="access" placeholder="Access Rights" required>
                        <div class="error hide">Access rights is required</div>
                    </div>
                </div>

                <!--extra details-->
                <h2>User Details</h2>
                <div class="form-col-2">
                    <div class="field-icon">
                        <label for="fname">First Name<span class="required"></span></label>
                        <i class="fas fa-user"></i>
                        <input type="text" name="fname" placeholder="First Name" required>
                        <div class="error hide">Firstname is required</div>
                    </div>
                    <div class="field-icon">
                        <label for="lname">Last Name<span class="required"></span></label>
                        <i class="fas fa-user"></i>
                        <input type="text" name="lname" placeholder="Last Name" required>
                        <div class="error hide">Lastname is required</div>
                    </div>
                    <div class="field-icon">
                        <label for="email">Email<span class="required"></span></label>
                        <i class="fas fa-at"></i>
                        <input type="text" name="email" placeholder="Email" required>
                        <div class="error hide">Email must contain @ symbol</div>
                    </div>
                </div>
                <div class="btn-submit">
                    <input type="submit" id="send-form" value="Sign Up">
                </div>
            </form>
        </div>
        <footer><p>2020 Bookstore. All rights reserved.</p></footer>
    </body>
</html>

\下面是注册表单中的表单数据的发送位置

<?php 
session_start();
require("../model/dbConnection.php");
require("../model/dbFunctions.php");
require("inputFilter.php");
if (!empty([$_POST])) {
    
    $Uname = inputFilter($_POST['user']);
    $mypass = inputFilter($_POST['pass']);
    $accRights = inputFilter($_POST['access']);
    $Fname = inputFilter($_POST['fname']);
    $Lname = inputFilter($_POST['lname'])
    $Email = inputFilter($_POST['email']);
    $LogID = inputFilter($_POST['loginid']);

    // password hashed with PASSWORD_HASH()
    $hPass = password_hash($mypass, PASSWORD_DEFAULT);
    $query = $conn->prepare("SELECT username FROM login WHERE username = :user");
    $query->bindValue(":user", $Uname);
    $query->execute();
    if ($query->rowCount() < 1) { //check if the user exists
    newUser($Uname, $hPass, $accRights, $Fname, $Lname, $Email);
    echo "User account has been created";
    
    // redirect them to homepage
    header('location:../view/pages/viewBook.php');
}
else {
    echo "User already exists";
}
}

?>

\下面是插入数据库的函数

 function newUser($Uname, $hPass, $accRights, $Fname, $Lname, $Email)
    {
        global $conn;
        try {
            $conn->beginTransaction();
            $stmt = $conn->prepare("INSERT INTO login(username, password, accessRights)
            VALUES (:user, :pass, :access)");
            $stmt->bindValue(':user', $Uname);
            $stmt->bindValue(':pass', $hPass);
            $stmt->bindValue(':access', $accRights);
            $stmt->execute();
    
            $lastUserID = $conn->lastInsertId();
            $stmt = $conn->prepare("INSERT INTO users(firstName, lastName, email, loginID)
            VALUES (:fname, :lname, :email, :loginID)");
            $stmt->bindValue(':fname', $Fname);
            $stmt->bindValue(':lname', $Lname);
            $stmt->bindValue(':email', $Email);
            $stmt->bindValue(':loginID', $lastUserID);
            $stmt->execute();
            $conn->commit(); // save to the db
        }
        catch (PDOException $ex) {
            $conn->rollBack(); // if problem rollback
            throw $ex;
        }
    }

标签: phpformspdopassword-hash

解决方案


推荐阅读