Задать вопрос
  • Как убрать все после слова регулярным выражением?

    тогда для даты пойдет, а вот с городом только если всегда самара
  • Parrot os не работает звук, как исправить?

    если микрофон в наушниках, то может быть конфликт из-за стерио, и наушники нужно перевести в моно режим, это можно сделать через настройки звука.
    Так как отметили решением уже все ок, заработало?
  • Как правильно общаться с базой данных во Vue?

    но если это учебный пет проект просто для себя и совсем не важные какие-то условия, то просто создать проверку маунте. Это стоит воспринимать как 100% псевдокод, во-первых без ide, во-вторых без проверок нормальных, оптимизации, просто как направление мысли)

    async mounted () {
         await getUserData();
        // тут что-то еще если нужно
      },
    
    methods: {
      ...mapAction({ userdata: ' тут  геттер из стора' })
      asycn getUserData() {
               if (userdata) {
               return   [this.userFirstName, this.userLastName] = ...userdata;
               }
             // await если данных нет то вызываем в сторе метод их получения
        }
    }
  • Как правильно общаться с базой данных во Vue?

    немного офтов на всякий случай, если нет в сторе юзер id, то будет ошибка, нужна проверка. Если я сам добавлю себе в стор юзер id, то получается без авторизации получу данные?
    Не понятен момент авторизации((
    Например есть где-то есть форма и имя/пароль, при удачной авторизации вы получаете токен и иные данные, так же данные юзера. Можно их сразу сохранить в стор. vuex, pinia или что более душе угодно:)
    Дальше на родительской странице, например это /profile вы проверяете есть ли все данные, во-первых проверяете есть ли верный токен + иные данные авторизации, если чего-то нет или не прошло проверку, то редиректите в регистрацию. Далее проверяете есть ли даныне в сторе, если они есть то используете их, если нет то как раз делаете запрос и сохраняете в стор.

    пример стора для авторизации (это только пример на быструю руку)
    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


    Дальше через mapGetters вы просто можете достать данные
    computed: {
        ...mapGetters(['userData'])
      },

    Это если нужны данные в каких-то дочерних компонентах, в родительском можно повесить проверку у которой писал выше
  • Как правильно общаться с базой данных во Vue?

    Alex D, зачем вам раздавать данные? При удачной авторизации вы сохраняете их в стор, после этого просто берет от туда и выводите, если их нет, то не отображаете компонент.
    И не понятно почему у вас отрабатывает запрос? Даже если вы положили его далеко в дочерний компонент, у вас отработал маунт, там сработал запрос, и теперь пока коммпонент не будет подключен снова ничего и не будет отрабатывать. Если хедер на одном месте, и он всегда есть в лейауте, то у него срабатывает один раз маунт и не должно быть больше запросов.
    Немного тяжело без кода соориентироваться)
  • При работе ноутбука бывают щелчки, что это может быть?

    anastasia_dv, давно не отслеживал температуру через сторонние программы, но, если правильно помню, SpeedFan (но скорее всего много чего появилось за это время) сможет решить сразу и вопрос температуры и отключения кулера. Для видеокарт используйте GPU-Z. Так же некоторые лицензионные (родные) программы дают доступ к температуре gpu. Если у вас Linux то lm_sensors будет достаточно. Если брали ломаный macOS и ставили на ленову, то лучше поставить все же windows или linux (если с играми, то лучше первый вариант).
    Как опять же доп вариант возьмите себе б/у подставку с кулерами, точно для данных задач.
  • При работе ноутбука бывают щелчки, что это может быть?

    anastasia_dv, в таком случае можете использовать совет yakovlev_13, постоянно сохранять нужные вам файлы и все.
    Есть меняется при играх, значит точно от вращения, и остается узнать, что именно, хард, видеокарта, кулер.
    Дальше сложные шаги, но вполне выполнимые главное читать перед тем, как делать и посмотреть видео.
    (все ниже способы настолько странные только из-за того, что не берем возможность открыть ноут или отдать в сервис. И честно говоря, подходят только если очень уж хочется покопаться с этой проблемой. А еще если есть свободных несколько часов (а то и несколько десятков, если никогда ничего не делали похожего)
    1) Если ОС на sdd, то просто отключаем HHD в самой ОС и пользуемся около часа, ждем результат.
    2) Если ОС на HHD, то на ssd делаем новый раздел, гогов на 15 и ставим туда еще одно ос, из официальных и бесплатных могу посоветовать Ubuntu (хоть немного проще чем остальные и чуть чуть будет проще, если когда пользовались маком). Если есть ломаная та, к которой привыкли но все легче. Устанавливаем переходим к шагу 1.
    3) Если это не диск, то скачиваем утилиту управления кулерами (смотрите под вашу ОС). И поочередно их отключаем (но не все сразу!), так же отключили, пользуетесь минут 40 - час, проверяете. Потом включили и отключили другой.
    4) Если это и не диск и не кулер, то возможно, что не было доступа к системе охлаждения видео карты. Тут как с дисками. Если у вас их 2, то просто отключаете поочередно их, и проверяете.

    Так или иначе, это что-то из этого, далее вывод:
    1) Это диск. Точно идем в сервис, если никогда сами не меняли ничего и не хотите начать в этом разбираться. Если интересно самой, то конечно просто купите диск такой же, перенесите туда информация все ок. (Если это не проблемы с питанием диска)
    2) Это кулер. Ставите программу для отслеживания температуры, если не перегревается, то и ладно. Если начинаются проблемы, то опять же сервис или руками.
    3) Это видеокарта. Тут как и кулерами, если нет перегрева, то ок, как только начинается, то сервис или руками.

    ЗЫ. На всякий случай еще раз, это все довольно времязатратно, и если его у вас мало и нет большого желания получить знания и навыки (что описаны выше), то просто сохраняйте файлы в облаке, например ночью ставьте на отдачу. Когда что-то совсем поломается несите в сервис. Только советую проверить температуру внутри ноута. Если она ок, при его загрузке (игры и тд), то все ок.
  • Почему не работает отправка сообщения с сайта?

    eboy_archibaldo, много может быть причин. Алексей Володин написал одну из них. Может быть еще проблемы с тем, что через локальный есть доступ, а еще может быть проблема в настройке сертификата, проблема в заголовках сервера и доступе. Я бы пошел следующем путем(пути отладки пишу топорные, если вы используете xdebug, доп библиотеки, пишете логи, то конечно, делайте так. То что я напишу, прям совсем для начинающих):
    1) Проверил вообще работу php на хостинге. например просто пусть выводил "hello", или phpinfo() и проверить все ли ок.
    2) Проверить работает ли пост, отправить из фронта любую штуку, например через xhr и получите ответ. верните значение отправленной переменной чрез print или echo. Проверьте во вкладке "Network", все ли верно вернулось
    3) Вообще посмотрите есть ли ошибки в "Network", или в консоле.
    4) Посмотреть, если настраиваете через php.ini, изменяется ли SMTP-сервер в phpinfo.

    Может быть закрыт порт, на котором сервер. Например сервер у вас на 3000 порту, то надо его открыть
    sudo iptables -A INPUT -p tcp --dport 3000 -j ACCEPT
  • Как объединить строки таблицы?

    kinish_kinish, если это учебное задание, то тогда и правда можно просто создать переменные и данными из 3х форм и их объеденить в третей. И в таком случае не разбирайтесь в коже выше, если пока сосредоточены на учёбе) Можно создать функцию, которая будет принимать параметры, и их дальше вставлять в sql запрос. Но не знаю, какими инструментами можно вам пользоваться, так что самый топорный.

    $firstForm = mysql ->query(" SELECT fam, nam, …
    FROM 'tsble' WHERE id = число; ");
    $secondForm = mysql ->query(" SELECT family , auto, …
    FROM 'table' ;");
    $thirdForm = 'вы поняли идею';

    $mysql -> close();

    $fullData = $firstForm. $secondForm. $thirdForm;

    Вот и все вместе. Можно для этого обойтись одной функцией, но опять же не знаю что можно использовать)

    Писал с телефона в дороге, так что тут скорее логика, чем точный синтаксис)
  • Как объединить строки таблицы?

    Я далеко не профи, и наверняка будут более корректные ответы, ведь данный способ точно кривой, и такого не встретите, но, на мой взгляд, это такой минимум если вы без опыта и делаете без сторонних фреймворков, библиотек, апи и тд. Сможете посмотреть на разные возможности базы, на классы, на условия и тд.
    ЗЫ. хотел написать лишь образно, что примерно надо делать, но немного понесло, часть скопировал со своих старых реп, часть писал прям тут, так что не советую прям ctrl+c ctrl+v, но если что-то будет не понятно или не работать, пишите комментарии, постараюсь ответить .
  • Как объединить строки таблицы?

    <?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;
            }
        }
    
    }


    и теперь ipdex.php

    <?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;
            }