来自 PHP 表单的数据不会插入 MySQL 数据库

问题描述

我对 PHP 还很陌生,我知道我使用的语法/方法可能会被弃用,但请不要介意。

我有一个本地运行的网站,我正在尝试让我的用户登录系统正常工作。在我的 register.PHP 上,我有一个表单,由于某种原因,它不会从我的数据库内部插入数据,即使插入语句的语法对我来说似乎是正确的,并且与我的数据库的连接有效。

我的 MysqL 数据库如下:

MySQL database

database.PHP如下(部分细节模糊):

class connectDB {
protected $host,$username,$password,$dbname;

public function __construct(){ 
    $this->host = "MysqL:host=<blurred>;dbname=<blurred>";
    $this->username = "<blurred>";
    $this->password = "<blurred>";
}

public function getConnectDB(){ 
    try
    {
        $db = new PDO($this->host,$this->username,$this->password);
        $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
        $db->beginTransaction();
    }
    catch (Exception $e)
    {
        echo "Unable to connect to database";
        exit;
    }
    return $db;
}

register.phtml 如下:

<?PHP require("header.phtml");   ?>

<body class="bg-light">
<div class="container-fluid">
    <div class="container p-3">
        <div class="row pt-5">
            <div class="col-lg-7 col-md-7 col-sm-12 mx-auto pt-5 shadow bg-white">
                <div class="row">
                    <div class="col-lg-8 col-md-8 col-sm-12 mx-auto pb-5">
                        <div class="panel">
                            <br><br><br><br>
                            <p>Please enter your username and password</p>
                        </div>
                        <form id="Login" method="POST">
                            <div class="form-group">
                                <input class="form-control" name="email" placeholder="Email">
                            </div>
                            <div class="form-group">
                                <input class="form-control" name="username" placeholder="Username">
                            </div>
                            <div class="form-group">
                                <input type="password" class="form-control" name="pass" placeholder="Password">
                            </div>
                            <div class="form-group">
                                <input type="password" class="form-control" name="confirmPass" placeholder="Confirm Password">
                            </div>
                            <button type="submit" name="userRegisterButton" class="btn btn-primary">Register</button>
                        </form>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
</body>

register.PHP 代码如下:

<?PHP
session_start();
require("register.phtml");
require("assets/database.PHP");
 $conn = new connectDB();
 $myDatabase = $conn->getConnectDB();


if(isset($_POST['userRegisterButton'])){ //if search button clicked
$sqlQUERY = "SELECT email FROM users"; //retrieves all emails from users table
$data = $myDatabase->query($sqlQUERY)->fetchAll();

// Checking if username entered by user already exists
$found = false;
foreach($data as $row){
    if (htmlentities($_POST['email']) == $row['email']) { //checks if email already exists in db
        $found = true;
        break;
    }
}
if(!$found){ // if email does not exist then proceed to register
    if (htmlentities($_POST['pass']) == htmlentities($_POST['confirmPass'])){ // and if passwords match
        $username = htmlentities($_POST['username']);
        $password = htmlentities($_POST['pass']);
        $loa = "user";
        $email = htmlentities($_POST['email']);
        echo $username;
        echo $password;
        echo $loa;
        echo $email;
        $result = "INSERT INTO users(username,password,loa,email) VALUES ('".$username."','".$password."','".$loa."','".$email."')";
       /* $sqlQUERY = "INSERT INTO users(username,password) VALUES ('" . $_POST['username'] . "','" . $_POST['pass'] . "')";*/
        echo $result;
        $myDatabase->prepare($result)->execute();

        $msg = "You have successfully registered,please login";
        echo "<script type='text/javascript'>alert('$msg'); window.location.replace(\"http://localhost:8090/login.PHP\");</script>";

    } else {
        // If passwords entered don't match
        $msg2 = "Please check your passwords match";
        echo "<script type='text/javascript'>alert('$msg2'); window.location.replace(\"http://localhost:8090/register.PHP\");</script>";
    }
} else {
    $msg3 = "Username already exists,please check again";
    echo "<script type='text/javascript'>alert('$msg3'); window.location.replace(\"http://localhost:8090/register.PHP\");</script>";
}

}

我已经回显了一些细节以帮助调试,并且被回显的 $result (就在插入语句之后)向我显示语法是正确的,只有一个细节。出于某种原因,它回显的语句将语句中的逗号更改为句号,这当然不是 sql 语法(PS,这可能只是语句回显的方式)。书面例子是:

正确的语法,即它应该做什么:

insert into users (username,email) values ('test2','admin','user','test1@gmail.com');

VS 出现的回声:

insert into users (username. password. loa. email) values ('test2'. 'admin'. 'user'. 'test1@gmail.com');

需要注意的一件主要事情是 PHPStorm 控制台上没有出现错误告诉我插入语句失败。插入语句后的代码也按预期运行。

任何帮助将不胜感激,在此先感谢您!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)