OOP PHP - правильный способ передачи значений $ _POST из формы в функцию database_write - PullRequest
0 голосов
/ 10 января 2020

У меня проблемы с пониманием OOP ...

Допустим, я хотел создать страницу, которая добавляет нового пользователя в базу данных и хотел работать с классами.

Для этого Сценарий Я бы создал форму с функцией.

Существуют формы для каждой функции CRUD - renderHTMLFormAddUser ():

...
        <form action="" method="POST" >;

        <label>Shopname*</label><br>;
        <input type="text" name="shopname" class="input_wide" required><br>;
        <label>Username*</label><br>;
        <input type="text" name="username" class="input_wide" required><br>;

        <input type="submit" value="add" name="submit" >
...

класс DataBaseConnector:

class DataBaseConnector
{
        protected $con;

        public function __construct()
        {
            $this->con=mysqli_connect('mariaDB','root','123456','produktmuster');
        }

        public function getConnection()
        {
            return $this->con;
        }

        public function __destruct()
        {
            $this->con->close();
        }
}

и класс QueryDatabase, для которого требуется соединение DataBaseConnector в качестве параметра передачи в его конструкторе:

class QueryDatabase
{

    private $con;

    public function __construct(DataBaseConnector $con)
    {
        $this->con = $con;
    }


    public function addUser($shopname,$username)
    {
        $sql = "INSERT INTO `brandportal_manager`( `Shopname`, `Username`) VALUES  ($shopname,$username)";
        $result = mysqli_query($this->con->connect(), $sql);
        return $result;
    }

Чтобы получить значения $ _POST в функции добавления пользователя QueryDatabase, мне нужно объявить переменные следующим образом:

$shopname= $_POST['shopname'];
$username= $_POST['username'];

Но есть ли лучший способ сделать это? Например, renderHTMLFormAddUser()->'shopname'.

Я просто пытаюсь понять, какой самый чистый способ кодирования в этом сценарии. Потому что при использовании функции для отображения форм adduser. php будет выглядеть примерно так:

$createuserform=new Forms();
$createuserform->renderHTMLFormAddUser();

$shopname= $_POST['shopname'];  // this is what confuses me, you'd have to look into the
$username= $_POST['username']; //  renderHTMLFormAddUser() function to see the code

$db = new DataBaseConnector();
$query= new QueryDatabase();
$query->addUser($shopname,$username)

Должен ли я просто создать собственную страницу, которая отправляет форму на страницу, которая затем использует данные? В начале я просто не использовал никаких параметров передачи с функцией addUser, и это началось с объявления $ _POSTs:

$shopname= $_POST['shopname'];
$username= $_POST['username'];
$sql = "INSERT INTO `brandportal_manager`( `Shopname`, `Username`) VALUES  ($shopname,$username)";
...

Но мне сказали, что это небезопасно - в этом отношении я очищаю свой данные, но ради более простого примера я отбросил весь ненужный код.

Если я выберу совершенно другой подход, просто хотел бы знать самый простой способ добавления входных данных формы в базу данных.

1 Ответ

0 голосов
/ 10 января 2020

Ну, есть много подходов для этого. Вы также можете использовать мой подход ООП:

Определить. php установить постоянные переменные и переменные подключения к базе данных: define. php

define("DB_HOSTNAME", "localhost");
define("DB_USERNAME", "your_username");
define("DB_PASSWORD", "your_password");
define("DB_NAME", "your_databasename");
define("custom_variable", "custom_variable_value");
define("baseurl", "https://localhost/myproject/");

Затем создайте dbase. php, чтобы создать динамическую c SQL функцию:

Вам не нужно изменять этот файл. Вам просто нужно позвонить в этот класс. Этот файл работает как основной файл системы. База данных. php

<?php session_start();
date_default_timezone_set("Asia/Karachi");
require_once("define.php");

Class Dbase
{
    private $Host = DB_HOSTNAME;
    private $UserName = DB_USERNAME;
    private $Password = DB_PASSWORD;
    private $DBname = DB_NAME;

    private $connDb = false;

    public $LastQuery = null;
    public $AffectedRows = 0;
    public $InsertKey = array();
    public $InsertValues = array();
    public $UpdateSets = array();

    public $id;

    public function __construct()
    {
        $this->connect();
    }

    protected function connect()
    {
        $this->connDb = @mysqli_connect($this->Host, $this->UserName, $this->Password);
        if (!($this->connDb)) {
            die('Database Connection Failed.<br>' . mysql_error($this->connDb));
        } else {
            $Select = mysqli_select_db($this->connDb,$this->DBname);
            if (!$Select) {
                die('Database Selection Failed.<br>' . mysql_error($this->connDb));
            }
        }

        mysqli_set_charset($this->connDb,'utf8');
    }

    public function close()
    {
        if (!mysqli_close($this->connDb)) {
            die('Closing Connection Failed.<br>');
        }
    }

    public function escape($value)
    {
        if (function_exists('mysql_real_escape_string')) {
            if (get_magic_quotes_gpc()) {
                $value = stripslashes($value);
            }
            $value = mysql_real_escape_string($value);
        } else {
            if (!get_magic_quotes_gpc()) {
                $value = addcslashes($value);
            }
        }
        return $value;
    }


    public function query($sql)
    {
        $query = $sql;
        $result = mysqli_query($this->connDb,$sql);
//        $this->displayQuery($result);
        return $result;
    }

    public function displayQuery($result)
    {
        if (!$result) {
            $output = 'Database Query Failed' . mysql_error($this->connDb) . '<br>';
            $output .= 'Last Query was' . $this->LastQuery;
            die($output);
        } else {
            $this->AffectedRows = mysqli_affected_rows($this->connDb);
        }
    }

    public function fetchAll($sql)
    {
        $result = $this->query($sql);
        $output = array();
        while ($row = mysqli_fetch_assoc($result)) {
            $output[] = $row;
        }
//        mysql_free_result($result);
        return $output;
    }

    public function fetchOne($sql)
    {
        $output = $this->fetchAll($sql);
        return $output;
//        return array_shift($output);
    }

    public function prepareInsert($array = null)
    {
        if (!empty($array)) {
            foreach ($array as $key => $value) {
                $this->InsertKey[] = $key;
                $this->InsertValues[] = $this->escape($value);
            }
        }
    }

    public function insert($table = null)
    {
        if (!empty($table) && !empty($this->InsertKey) && !empty($this->InsertValues)) {
            $sql = "insert into '{$table}' ('";
            $sql .= implode("','", $this->InsertKey);
            $sql .= "') values ('";
            $sql .= implode("','", $this->InsertValues);
            $sql .= "')";

            if ($this->query($sql)) {
                $this->id = $this->lastId();
                return true;
            }
            return false;
        } else {
            return false;
        }
    }

    public function prepareUpdate($array = null)
    {
        if (!empty($array)) {
            foreach ($array as $key => $value) {
                $this->UpdateSets[] = "`{$key}` = '" . $this->escape($value) . "'";
            }
        }
    }


    public function update($table = null, $id = null, $whereId)
    {
        if (!empty($table) && !empty($id) && !empty($this->UpdateSets)) {
            $sql = "update `{$table}` set";
            $sql .= implode(",", $this->UpdateSets);
//            $sql.="where id='".$this->escape($id)."'";
            $sql .= "where '" . $whereId . "'='" . $this->escape($id) . "'";
            return $this->query($sql);
        } else {
            return false;
        }
    }


    public function lastId()
    {
        return mysqli_insert_id($this->connDb);
    }

    public function TotalNumberOfRecords($sql)
    {
        $result = $this->query($sql);
        $output = mysqli_num_rows($result);
        return $output;
    }


    public function GetServerInfo()
    {
        return mysqli_get_server_info();
    }
}

Создание файла запроса. php. Этот файл работает как файл вашей модели, как в MVC. Запрос. php

<?php include "Dbase.php";

Class Query extends Dbase
{

    public function __construct()
    {
        $this->connect();
        date_default_timezone_set("Asia/Karachi");
    }

    public function getData($idlevelOne)
    {
        $sql = "SELECT * FROM `table` where level_one_id=$idlevelOne ORDER BY `sorting` ASC";
        $result = $this->fetchAll($sql);
        return $result;
    }

    /*For Insert & Edit, use this fucntion*/
    public function editMember($email, $phone, $address, $city, $country, $zipcode, $id)
    {
        $sql = "UPDATE `members` SET  `email` = '" . $email . "', `phone` = '" . $phone . "', `address` = '" . $address . "'
            , `city` = '" . $city . "', `country` = '" . $country . "', `zip_code` = '" . $zipcode . "'
    WHERE   `id` = '$id'";
        $result = $this->query($sql);
        return $result;
    }
}

Теперь вам просто нужно вызвать класс запросов в ваших PHP файлах для получения данных.

    <?php 
    include "Query.php";
    $ObjQuery = new Query(); 
    $ObjQuery->getData(1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...