Ответы пользователя по тегу PHP
  • Не исполняется php файл, в чём может быть проблема?

    @thorii
    Замечание, на локальных серверах, почту обычно перехватывают демоны и складируют в локальную папку, поэтому письма могут не доходить до адресата.
    Ответ написан
    Комментировать
  • Почему при запуске php программы в браузере после неудачной авторизации не появляется окно с предложением ввести логин и пароль?

    @thorii
    Чем можно заменить этот die?

    return false;
    //или
    throw new Exception('DB connect fail');

    Оба оператора завершают работу функции.
    В вашем случае, лучше завернуть код в try catch
    try {
    //ваш код,  где die заменены на throw new Exception('Сообщение об ошибке')
    } catch (Exception $e) {
    echo $e->getMessage();
    }


    Это обязательно надо знать:
    Исключения php
    Работа с исключениями
    PHP PDO
    PHP Mysqli

    Изучите эти статьи и перепишите код по их канонам, уверяю, код станет более читабельным и весьма сократится
    Ответ написан
    Комментировать
  • Вместо админки, добавлять товары через phpmyadmin?

    @thorii
    Если вы один имеете привилегии добавлять товары, то вопрос касается лично вас. Но все же лучше реализовать некий интерфейс для пользователей, слабо понимающих веб технологии.
    (обновлять дамп БД)

    А если БД будет расти? Это уже проблема, даже если размер БД более 10 мб. Как минимум не этично так делать, дампами пользуются при переносе и бекапе
    Может в плане безопасности могут быть проблемы

    Файл дампа может быть несовместим, поврежден, загружен с ошибками.
    напишу отдельные роуты

    Неплохая затея.
    сейчас они у меня живут в БД

    Не особо понимаю как так? Вы храните код HTML в бд? Решать конечно вам, но я советую все же выделить модель вид и контроллер (Вид - хранит в себе шаблон/разметку в который подставляются данные)
    для каждой из них

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

    Фреймворками не пользуюсь.

    Все же загляните в Laravel он до боли простой (из всех имеющихся) для изучения
    Ответ написан
    1 комментарий
  • Как практичнее выводить сообщения о невалидных данных?

    @thorii Автор вопроса
    <?php
    namespace System\Validation;
    
    use System\Core;
    
    class Validator {
    	
    	private $config;
    	private $rules;
            private $error;
    
    
    
    
    	public function __construct($rules) { // Для каждой формы, свой экземпляр (new Validator($rules))
    		$this->config = Core::libraryConfig(__CLASS__);
                    $this->rules = $rules;
    	}
    	
    	public function isValid($data) {
            while(list($field, $value) = each($data)) {
                $rules = $this->rules[$field];
                foreach($rules as $rule => $options) {
                    $method = 'validate'.$rule; //тут приписывается префикс
                    $valid = $this->$method($value, $options); //@return true|false|string Error Message
                    if($valid) {
                      return TRUE;
                   } else return $valid; //Это ужасный кусок, это я тоже хочу в порядок привести. А может внутри метода записывать $this->error и вернуть false?
                }
            }
            return TRUE;
        }
    
        public function validateEmail($value, $options = []) {
            if(filter_var($value, FILTER_VALIDATE_EMAIL)) {
                return TRUE;
            } else return (isset($options['msg'])) ? $options['msg'] : FALSE; //Вот эти строки вечно дублируются
    //Может просто вырезать ключ msg в методе валидации и работать уже там с сообщением??
        }
    
        public function validateRequired($value, $options = []) {
            if(!is_null($value) || !empty($value)) {
                return TRUE;
            } else return (isset($options['msg'])) ? $options['msg'] : FALSE; //Вот тут метод вернет сообщение если оно передано, иначе false соответственно
    //Идет дублирование, разве он должен оперировать еще и сообщениями ошибок? Нет. А ума не хватает переделать
        }
    
    }
    ?>

    $validateRules = [
        'firstname' => [
         'required' => ['msg' => 'First name can\'t be empty']
        //Прочие валидаторы...
        ],
          'lastname' => [
          'required' => ['msg' => 'Lastname can\'t be empty']
        ]
    ];
    
    $validator = new Validator($validateRules);
    var_dump($validator->isValid(['firstname' => NULL]));
    Ответ написан
  • PHP - как правильно делать экранирование данных перед вставкой в БД?

    @thorii
    Да, Желательно использовать PDO. Почитать можно в доках языка, там вполне актуальная информация:
    PDO::prepare - Подготовка(компиляция) запроса
    PDO::bindParam - привязка параметра
    PDO::bindValue - привязка параметра 2 (Внимательне...
    BindParam/Value отлично работают, в общем процесс происходит так: через метод PDO::prepare($query) подготавливается запрос (и более его изменить нельзя), он вернет PDOStatement который имеет сами методы bindParam/Value Через которые вы уже "привязываете данные к запросу". Так как запрос SQL уже был скомпилирован, то SQL инъекция уже невозможна (запрос отдельно от данных).
    Помимо методов bindParam/Value данные можно передать напрямую при выполнении запроса методом PDOStatement::execute.
    Ответ написан
    1 комментарий
  • Как реализовать подгрузку модального из url?

    @thorii
    Я предлагаю парсить URI на стороне js, и если В URI нашелся гет параметр (или хеш) (например window=video123456789 или #window:video123456), распарсить данные гета и подгрузить данные в модале.
    Ответ написан
    Комментировать
  • Можно ли запретить исполнять SQL команды в phpmyadmin?

    @thorii
    Может быть создать пользователя, и указать в правах запрет на TRUNCATE и DROP
    Ответ написан
    Комментировать