我已经准备了一个结构来将应用程序管理为php中的OOPS方式,我正在尝试连接数据库并将记录插入数据库中,我的连接已建立,但无法将记录添加到数据库表中。 这是我的密码 我的模型用户类文件:users.php(这是一个文件夹名称类):
<?php
class Users extends Connection{
public $con;
public function __construct(){
$this->con = new Connection();
}
//creating user
public function createInfo($data){
$username = $data['username'];
$email = $data['useremail'];
$password = md5($data ['password']);
$query = "INSERT INTO js_users(username, useremail, `password`) VALUES ('".$username."', '".$email."', '".$password."')";
$result = $this->con->query($query);
print_r($result); exit;
return array("status"=>$result, "message"=>"User Generated Successfully");
}
public function getUserInfo(){
$query = "SELECT * FROM employee";
$result = mysqli_query($this->con, $query) or die(mysqli_error($this->con));
return $result;
}
}
我的模型:连接类文件(与类文件夹相同):
<?php
class Connection{
private $hostname;
private $username;
private $password;
protected $dbname;
public $con;
public function __construct()
{
$this->hostname = '127.0.0.1';
$this->username = 'localuser';
$this->password = 'R@5gull@';
$this->dbname = 'jobsearch';
$this->con = $this->connect();
return $this->con;
}
private function connect(){
$this->con = new mysqli($this->hostname, $this->username, $this->password, $this->dbname);
return $this->con;
}
}
?>
我的HTML表单:(在根目录中):
<form class="user" action="process.php" method="post">
<input type="hidden" name="actions" value="createUser" />
<div class="form-group row">
<div class="col-sm-10 mb-3 mb-sm-0">
<input type="text" class="form-control form-control-user" id="username" name="data[username]" placeholder="Choose username">
</div>
</div>
<div class="form-group row">
<div class="col-sm-10 mb-3 mb-sm-0">
<input type="email" class="form-control form-control-user" id="useremail" name="data[useremail]" placeholder="Email Address">
</div>
</div>
<div class="form-group row">
<div class="col-sm-5 mb-3 mb-sm-0">
<input type="password" class="form-control form-control-user" id="password" name="data[password]" placeholder="Password">
</div>
<div class="col-sm-5">
<input type="password" class="form-control form-control-user" id="confirm_password" name="data[confirmPassword]" placeholder="Repeat Password">
</div>
<div class="col-sm-2">
<span id="message"></span>
</div>
</div>
<button type="submit" name="submit" class="btn btn-primary btn-user btn-block">
Register User
</button>
</form>
我的Process.php:
<?php
function __autoload($class){
require_once "class/$class.php";
}
$connect = new Connection();
$action = $_POST['actions'];
if(isset($action) && isset($_POST['actions'])){
switch($action){
case "createUser":
$createUser = new Users();
$res = $createUser->createInfo($_POST['data']);
print_r($res);
break;
default:
return NULL;
}
}
?>
我的数据库架构:
CREATE TABLE `js_users` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`username` VARCHAR(155) NULL DEFAULT NULL,
`useremail` VARCHAR(155) NULL DEFAULT NULL,
`password` VARCHAR(255) NULL DEFAULT NULL,
`created_on` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
`updated_on` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE INDEX `username` (`username`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
;
由于我的连接已经建立,但是记录没有被推送到数据库,所以想通过这些方法插入记录。
答案 0 :(得分:2)
在您的Connection
类中,它唯一要做的就是建立连接并将其存储在$this->con
中(您不能从构造函数返回任何内容)。
您的用户类定义使用...
class Users extends Connection
这不是一个好的OO设计,因为用户不是数据库连接的一种。因此,我建议您删除extends Connection
位-无论如何您都不要使用它。
但是然后在您的构造函数中使用
$this->con = new Connection();
因此$this->con
现在是连接类的实例。这不是实际的数据库连接,而是包含一个的类。当您运行查询
$result = $this->con->query($query);
由于Connection
类不包含名为query()
的方法,我希望这样做会失败。使用当前代码,您可以使用...
$result = $this->con->con->query($query);
$con
是该类的公共属性,并且包含实际的类。
还有其他一些问题-对于用户输入属于语句一部分的任何SQL,请对语句使用预处理语句。请勿使用md5()
作为密码-请查看password_hash()
。另外,还要研究依赖注入,以使用一个实例将数据库传递到任何实例中,因为这样可以更好地进行控制和测试。