无法将信息插入具有MYSQLI oops结构的数据库

时间:2019-07-03 05:48:40

标签: php mysql mysqli

我已经准备了一个结构来将应用程序管理为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
;

由于我的连接已经建立,但是记录没有被推送到数据库,所以想通过这些方法插入记录。

1 个答案:

答案 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()。另外,还要研究依赖注入,以使用一个实例将数据库传递到任何实例中,因为这样可以更好地进行控制和测试。