问题描述
我对 PHP 还很陌生,我知道我使用的语法/方法可能会被弃用,但请不要介意。
我有一个本地运行的网站,我正在尝试让我的用户登录系统正常工作。在我的 register.PHP
上,我有一个表单,由于某种原因,它不会从我的数据库内部插入数据,即使插入语句的语法对我来说似乎是正确的,并且与我的数据库的连接有效。
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>
<?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 (将#修改为@)