• При работе ноутбука бывают щелчки, что это может быть?

    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;
            }
    Написано