async mounted () {
await getUserData();
// тут что-то еще если нужно
},
methods: {
...mapAction({ userdata: ' тут геттер из стора' })
asycn getUserData() {
if (userdata) {
return [this.userFirstName, this.userLastName] = ...userdata;
}
// await если данных нет то вызываем в сторе метод их получения
}
}
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const store = new Vuex.Store({
state: {
isAuthenticated: false,
userData: null
},
mutations: {
setIsAuthenticated(state, payload) {
state.isAuthenticated = payload
},
setUserData(state, payload) {
state.userData = payload
}
},
actions: {
login({ commit }, payload) {
// Тут можно вызвать API для авторизации и сохранения данных пользователя
commit('setIsAuthenticated', true)
commit('setUserData', payload)
},
logout({ commit }) {
// Тут можно вызвать API для выхода пользователя из системы
commit('setIsAuthenticated', false)
commit('setUserData', null)
}
},
getters: {
isAuthenticated: state => state.isAuthenticated,
userData: state => state.userData
}
})
export default store
computed: {
...mapGetters(['userData'])
},
sudo iptables -A INPUT -p tcp --dport 3000 -j ACCEPT
<?php
class DB
{
private static $item; //нужен только в этом класе
public static function getInstance() //функция подключения к базе
{
if (empty(static::$item)) { //если нет подключения, то создаем новое, если есть, то просто его возвращаем
static::$item = new static();
}
return static::$item;
}
private $config = [ //массив данных для подключения, удобно потом менять, когда будете загружать на боевой
//сервер, где могут отличаться настройки
'driver' => 'mysql', //тип бд
'host' => 'localhost', //хост
'dbName' => 'sto', //имя вашей бд
'charset' => 'UTF8', //кодировка
'login' => ' ', //логин для входа
'password' => '' //пароль
];
private $connect; //переменная для определения, есть ли соединение
public function getConnect() //конект через PDO, можете почитать в оф документации
//https://www.php.net/manual/ru/book.pdo.php
{
if (empty($this->connect)) { //если нет конекта, то создаем
$this->connect = new \PDO(
$this->getSdnString(),
$this->config['login'],
$this->config['password']
);
$this->connect->setAttribute(\PDO::ATTR_DEFAULT_FETCH_MODE, \PDO::FETCH_ASSOC);
}
return $this->connect;
}
private function getSdnString()
{
return sprintf(
'%s:host=%s;dbname=%s;charset=%s',
$this->config['driver'],
$this->config['host'],
$this->config['dbName'],
$this->config['charset']
);
}
/* тут "ПЛОХАЯ" штука дальше, но так можно "защитить" этот класс от лишнего, в дальнейшем, когда будете лучше разбираться, или использовать laravel оно вам не пригодится
protected function __construct()
{
}
protected function __clone()
{
}
protected function __wakeup()
{
}
*/
private function query(string $sql, $params = []) //функция отбора
{
$pdoStatement = $this->getConnect()->prepare($sql);
$pdoStatement->execute($params);
return $pdoStatement;
}
public function find($sql, $params) //что-то найти
{
return $this->query($sql, $params)->fetch();
}
public function findAll($sql, $params = []) //вытащить все
{
return $this->query($sql, $params)->fetchAll();
}
public function createObj(string $sql, $class, $params = []) //создать нужный нам объект, ниже будет об этом
{
$pdoStatement = $this->query($sql, $params);
$pdoStatement->setFetchMode(\PDO::FETCH_CLASS, $class);
return $pdoStatement->fetch();
}
public function createObjAll(string $sql, $class, $params = [])
{
$pdoStatement = $this->query($sql, $params);
$pdoStatement->setFetchMode(\PDO::FETCH_CLASS, $class);
return $pdoStatement->fetchAll();
}
public function exe(string $sql, array $params = []) {
return $this->query($sql, $params)->rowCount();
}
}
<?php
//подключаем сюда файл с ДБ includ или через use (лучше use и через namespace)
//в теории использовать бы тут наследие от модели, но наверное будет очень много и так
class Client
{
//тут нужные вам переменные (все столбцы БД!), все писать не буду
public $id;
public $fam;
public $auto;
public $tableName;
public function construct($id = '', $fam = '', $auto = '') //это конструктор класса, он вызывается, //когда мы его создаем
{
$this->id = $id;
$this->fam = $fam;
$this->auto = $auto;
}
protected function getDB() //таким образом устанавливаем соединение с БД
{
return DB::getInstance();
}
public function getMaxId()
{
$tableName = $this->tableName;
$sql = "Select max (`id`) as `maxid` from {tableName}"
return $this->getDB()->query($sql);
}
public function getLast($id) //так будем искать по id, для объединения
{
$tableName = $this->tableName; // -> такой стрелкой идем обращение к элементам объекта, что-то типа //this<b>.</b>в
// js
$id = $this->getMaxId();
$sql = "SELECT * FROM {$tableName} WHERE id = :id"; //создаем шаблон запроса " :id", значит, что сюда
//подставиться значение, которое мы передадим
$params = [':id' => $id];//как раз значение
return $this->getDB()->createObj($sql, 'Client' . ucfirst($tableName), $params); //и создаем наш объект
}//такие сложно для защиты от инъекций https://habr.com/ru/post/130826/#:~:text=SQL%20%D0%B8%D0%BD%D1%8A%D0%B5%D0%BA%D1%86%D0%B8%D1%8F%20%E2%80%94%20%D1%8D%D1%82%D0%BE%20%D0%BE%D0%B4%D0%B8%D0%BD%20%D0%B8%D0%B7,%D0%B2%D1%81%D0%B5%D0%B3%D0%BE%20%D1%8D%D1%82%D0%BE%20MySQL)%20%D1%87%D1%82%D0%BE%20%D1%83%D0%B3%D0%BE%D0%B4%D0%BD%D0%BE.
public function getAll() //берем все
{
$tableName = $this->tableName;
$sql = "SELECT * FROM {$tableName}";
return $this->getDB()->createObjAll($sql, 'Client' . ucfirst($tableName));
}
public function addSecondForm( $auto) //и остальные переменные из второй формы
{
return $this->auto = $auto;
}
private function getColumns() //берем все колонны, для дальнейшего их заполнения
{
$element = $this->getAll()[0];
$columnsNames = [];
foreach ($element as $columns => $value) {
if ($columns == 'id') {
continue;
} else {
array_push($columnsNames, $columns);
}
}
return $columnsNames;
}
private function insert($params = []) //тут мы описываем логику загрузки в базу на подобии кода //выше
{
$columns = $this->getColumns();
$params = (array) $params;
unset($params['id']);
$columnsNames = implode(', ', $columns);
$params = implode("', '", $params);
$sql = "INSERT INTO {$this->tableName} ({$columnsNames})
VALUES ('{$params}')";
if(!$res = $this->getDB()->exe($sql)) {
return false;
}else return true;
}
private function update($element = []) //описываем обновление данных
{
$res = false;
foreach ($this as $key => $value) {
if ($element["$key"] != $value) {
$params[":{$key}"] = $value;
$placeholders = implode(", ", array_keys($params));
$sql = "UPDATE {$this->tableName()} SET {$key} = {$placeholders} WHERE id = {$element['id']}";
if (!$ok = $this->getDB()->exe($sql, $params)) {
$res = false;
}else {
$res = true;
};
}
}
return $res;
}//мы получали все данные из созданного объекта и сверяли с базой, после добавляли, что отличалось
public function save()//а дальше одну функцию, чтобы меньше дублировать /*
тут мы берем все объекты, сравниваем если ли такой же, если да, но обновляем, если нет, то создаем новый
*/
{
$allFromTable = $this->getALl();
foreach ($allFromTable as $element) {
$element = (array) $element;
if ($this->id == $element['id']) {
if (!$res = $this->update($element)) {
echo '<h1>error update</h1> <hr> <br>';
return false;
}else {
echo "<h1>OK Update</h1> <hr> <br>";
return true;
}
}
}
if (!$res = $this->insert($this)) {
echo '<h1>error insert</h1> <hr> <br>';
return false;
}else {
echo "<h1>OK Insert</h1> <hr> <br>";
return true;
}
}
}
<?php
session_start(); //начинаем сессию
require //все до этого созданные файлы (не onec, так как они не супер огромные, а проверять каждый раз их
//подключение затратно, по хорошему написать загрузчик или composer или laravel
/*
$this->id = $id;
$this->fam = $fam;
$this->auto = $auto;
*/
if ($_SERVER['REQUEST_METHOD'] === 'POST') { //к глобальным переменным лучше делать отдельные функции,
//но и так уже расписал в 100 раз больше, чем думал сначала :)
if($id = $_POST['id']) { //есть уже отправляется id из сессии
$avto = filter_var(trim($_POST['avto']), FILTER_SANITIZE_STRING);
$model = new Client($id);
$client = $model->getLast();
$client->addSecondFrom($avto);
$client->save();
}else {
$fam = filter_var(trim($_POST['Fam']), FILTER_SANITIZE_STRING);
$client = new Client('', $fam); //обязательно должно совпадать с очередностью в конструкторе класса
$id = $client->getMaxId();
$_SESSION['id'] = $id;
}
}else {
return false;
}