• Как защитить приложение на yii2 от кражи при работе с фрилансерами?

    Zoominger
    @Zoominger
    System Integrator
    Заархивировать исходный код, запаролить, записать на диск, диск закопать в огороде и никому не говорить, где, все копии стереть.

    По теме: неуловимый Джо.
    Ответ написан
    2 комментария
  • Как импортировать таблицу excel в PHPMyAdmin?

    irishmann
    @irishmann
    Научись пользоваться дебаггером
    Перевести в CSV, задав другой разделитель. Например через PLEX.
    И загрузить в PMA указав нужный разделитель
    5cbd8bb6a88b6832071564.png
    Ответ написан
    Комментировать
  • Почему код не вносит запись в бд?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Если немного отойти в сторону от насущных потребностей горе-кодеров исправить опечатку и бежать скорее такжекодить дальше, то вопрос довольно интересный.

    В частности, возникает закономерный вопрос - почему $result содержит true, а не false, как должно быть в случае ошибки? Ведь у запроса явно неверный синтаксис? И что означают загадочные слова автора (который не в ладах не только с РНР, но и с русским языком), "Два поля в ней редактируются и я пытаюсь их сохранить, не то, что хочу"?

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

    Начнем с запроса. Ошибка в нем действительно есть, но не синтаксическая. Дело в том, что оператор AND может использоваться не только в операторе WHERE. Это совершенно самостоятельный логический оператор: SELECT 1 AND 1; это совершенно легитимный запрос, который вернет единицу - результат операции 1 AND 1;.

    Точно так же результат этой операции можно присвоить и полю при запросе UPDATE:
    UPDATE Users SET logist=1 AND 1 WHERE id=100;
    А теперь посмотрим внимательно на исходный запрос. Для удобства я поставил скобки, чтобы показать, в каком порядке выполнятся операторы в запросе:
    UPDATE Users SET logist=('$log' AND (sum='$sum')) WHERE id='$form_id'

    Что здесь важно понимать?
    • - что в выражении sum='$sum' знак "равно" меняет свое значение и из оператора присваивания превращается в оператор сравнения.
    • - что существует такое явление, как приоритет выполнения операторов. И у оператора AND приоритет выше, чем у = как оператора присваивания, но ниже, чем у = как оператора сравнения!
    • - что существует такое явление, как приведение типов, и mysql по мере сил пытается привести операнды выражения AND ктакому типу, с которым оно может работать (числовому)

    таким образом мы
    1. сначала приводим выражение '$log' к числовому/булеву типу (и получаем скорее всего 0)
    2. потом получаем результат выражения sum='$sum' (1 или 0 в зависимости от того, равно ли содержимое поля sum значению переменной $sum или нет),
    3. затем выполняем операцию 0 AND 0
    4. и в итоге мы присваиваем этот 0 полю log

    Каковой ноль и объясняет загадочные слова автора "я пытаюсь сохранить не то, что хочу."

    Напоследок хочется рассказать о важности информирования программиста об ошибках.

    На самом деле ошибка в этом запросе все-таки есть. И звучит она как Truncated incorrect DOUBLE value: 'log'
    Просто в зависимости от настроек mysql она является либо фатальной, либо просто нотисом. В случае автора это был нотис, который в пхп без специальных средств заметить невозможно.
    Но если бы база данных была настроена в strict mode (и у автора вопроса было настроено правильное отображение ошибок mysqli),то ошибка бы стала фатальной, а поведение кода - более предсказуемым: значение поля не обновилось бы на непонятный нуль, а запрос бы выдал ошибку.
    Ответ написан
    3 комментария
  • Правильные геттеры и сеттеры php?

    DevMan
    @DevMan
    давайте включим мозг и немного подумаем: в вашем коде сначала идёт гетер и только потом сеттер. в этом вообще нет никакого смысла.
    о смысле гетеров/сетеров для публичных полей Danny Chase уже высказался.
    ооп - хорошая вещь. но, только, если вы понимаете что и зачем делаете, а не потому, что это стильно/модно/молодежно.
    Ответ написан
    Комментировать
  • Правильные геттеры и сеттеры php?

    Dase23
    @Dase23
    back-end developer
    1. зачем вообще нужны геттеры и сеттеры если у вас все свойства класса публичные?) обратитесь к ним как к свойству объекта

    $randomClass = new Randomizer;
    $randomClass->getValue = 100;


    и делайте с ними все что угодно)))
    Ответ написан
    5 комментариев
  • Есть ли какие то готовые PHP библиотеки для загрузки и ресайза картинок на сервер?

    slo_nik
    @slo_nik Куратор тега PHP
    Добрый день.
    Imagine.
    Загрузка, изменение размера, создание предосмотра изображения.
    Ответ написан
    1 комментарий
  • Можно ли искать в многомерном массиве по ключу и получить значение соседнего?

    function getNameByType(int $type, array $stack): ?string
    {
       foreach($stack as $item) if($item['type'] == $type) return $item['name'];
       return null;
    }
    Ответ написан
    2 комментария
  • Bootstrap-Vue - В чём фишка данного симбиоза?

    copist
    @copist
    Empower people to give
    Расскажите плиз о технологии, и чем развёрнутей, тем лучше.

    Вот захотел ты сделать сайт SPA или PWA с любимой тебе вёрсткой на базе Twitter Bootstrap и любимой библиотеки Vue. Сверстал. Поповеры не появляются, дропдауны не выпадают, модалки не открыватся, формы не валидируются, клики не работают.

    Оригинальный Twitter Bootstrap имеет поддержку интерактивных элементов на Javascript. Реализовано это на библиотеке jQuery. Если делаешь на Vue, придётся подключать ещё и jQuery, что лишняя библиотека на 100+ килобайт, что, конечно, не катастрофа (пока ты не на мобилке).

    Vue работает с состояниями привязывает данные к отображению, а jQuery работает с DOM и событиями. Это вопрос производительности. Работа JQuery начитается когда загружен и распарсен JS и HTML. Работа Vue начинается в тот момент, когда загружен и распарсен JS, то есть чуть раньше. jQuery модифицирует DOM на лету, перестраивая текущий документ. Vue работает с shadow DOM, а затем подсовывает уже готовую интерактивную страницу в пустой документ, что быстрее (разница в секунды на десктопе, десятки секунд на м...).

    Vue реализует компонентную парадигму. Куски страницы являются изолированными кусочками кода (HTML CSS JS), которые цепляются между собой динамически, а обмениваются данными через аттрибуты и события. Предположим, что вы решили следовать компонентной парадигме, тогда согласно вот такому примеру нужно будет увязать самостоятельно все интерактивные компоненты. Компонента-кнопка. Компонента-поле ввода. Компонента-форма. Компонента-контейнер. Получается около 50 компонент. Для некоторых надо будет написать логику на jQuery. Если посмотреть на код jQuery этих микрокомпонент, то он окажется несложный, его вполне можно переписать на Vue. Ну там класс заменить или клик отработать. Когда от кода jQuery не останется следа, его можно будет из проекта удалить.

    И вот получается Bootstrap-Vue

    На компоненты побили. От Jquery избавились. Написано в единой парадигме. Работает быстрее.

    Добавляем тот факт, что в Vue можно не импортировать компоненты, которые не нужны (например, я не работаю с дропдаунами и модальным окнами) и код становится меньше, грузится быстрее, работает быстрее.

    Так же будет Не лишним оценить технологию: плюсы, минусы, стоит ли вообще с этим работать ...

    Это сам изучай и сравнивай. Навыки и опыт воздушно-капельным и через Internet не передаётся
    Ответ написан
    4 комментария
  • Какой backend фреймворк использовать для небольшого проекта?

    amark
    @amark
    rush less, feel more
    Я бы посоветовал yii.

    При всем потенциале холливара:
    Если поискать сравнения в интернете, то можно увидеть, что лидирующий в сравнениях аргумент — для для новичков порог входа в yii ниже (если сравнивать с laravel).

    Cms соответственно использовать нельзя,
    — не совсем увидел логики, почему нельзя?
    Ответ написан
    7 комментариев
  • Как каждые 2 секунды отправлять запрос через ajax на php скрипт?

    webinar
    @webinar
    Учим yii: https://youtu.be/-WRMlGHLgRg
    https://learn.javascript.ru/settimeout-setinterval
    var timerId = setInterval(function() {
      $.get('someUrl',function(data){
             console.log(data);
       });
    }, 2000);
    Ответ написан
    Комментировать
  • Чистый код в php?

    @grinat
    Хз, что ты понимаешь под чистым кодом. Говно можно писать везде, тут фреймворк мало чем поможет.
    Ответ написан
    1 комментарий
  • Можно ли заменять в SQL запросе ' на "?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Эти функции - какой-то ужас, летящий на крыльях ночи. mysql_real_escape_string - вообще за гранью добра и зла.

    Но главное, что я не могу понять - это какое отношение к mysql и mssql имеет функция xss_clean. Ну то есть я даже представить себе не могу, как можно функцию для защиты от xss применять для любых манипуляций c SQL. Это - я не знаю - как положить деньги в презерватив от грабителей. Он же служит для безопасности. Ну вот деньги и будут в безопасности.

    По теме: ради всего святого, используйте PDO с подготовленными выражениями. Это сделает ненужной всю эту мышиную возню с регулярками. PDO поддерживает как mysql, так и mssql, так что разница будет только в синтаксисе запросов, а сам код работы с запросами будет один и тот же

    $sql = "SELECT TOP 10 * FROM user where mssql.department_id=?";  
    $stmt = $conn->prepare($sql);  
    $stmt->execute([$_GET['department_id']]); 
    $users = $stmt->fetchAll();
    
    $sql = "SELECT * FROM user where mysql.department_id=? LIMIT 10";  
    $stmt = $conn->prepare($sql);  
    $stmt->execute([$_GET['department_id']]); 
    $users = $stmt->fetchAll();


    Как можно заметить, в запросах нет ни одной кавычки вообще, что делает сам вопрос про замену бессмысленным.

    От XSS же надо защищаться совсем в другом месте, и также без всего этого ужаса
    Ответ написан
    1 комментарий
  • Обязательно ли знать php при изучении Yii?

    Decadal
    @Decadal
    Какими навыками нужно обладать что бы освоить данный фрэймворк ?

    ээ, ну, php, например.

    Обязательно ли знать php при изучении Yii?

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

    @edvardpotter
    Yii::$app->getSecurity()->generatePasswordHash($password);

    Где $password - ваш пароль

    Подробнее

    #UPD

    asferot, если вы делаете регистрацию то шаги должны быть примерно такие:
    1. Пользователь на сайте вводит данные формы.
    2. Создается модель пользователя(допустим у User, есть свойства email и password)
    $model = new User();
    $model->emal = 'user@email.ru';
    $model->setPassword(123456);
    $model->save();

    В модель User, нужно добавить метод - setPassword:
    public function setPassword($password)
    {
        $this->password = Yii::$app->security->generatePasswordHash($password);
    }

    В этом методе вы передаете пароль, yii хеширует его, и сохраняет в свойство $password модели User

    В итоге в бд у вас будет не исходный пароль храниться а хешированный.
    Ответ написан
    7 комментариев
  • Как добавить нули к строке / числу на php?

    SerJook
    @SerJook
    кодер
    str_pad($num, 10, '0');
    Ответ написан
    Комментировать
  • Ошибка в функции PHP?

    MyMac
    @MyMac
    Или, если нужен $oll -
    function select(){
        global $pdo;
        return $pdo->query("SELECT * FROM test ORDER BY name LIMIT $numing,$pagin");
    }
    $oll = select();
    $fetch = $oll ? $pdo->fetchAll() : "";


    поправил.
    Ответ написан
    2 комментария
  • Поиск по массиву php?

    Stalker_RED
    @Stalker_RED
    Если вы попоробуете поискать 456239128, то будет 'yes'.
    Потому что элемент находится, но у него ключ 0, а проверка у вас не строгая.

    Лучше переписать ее так:
    if ($key !== false) ...
    Ответ написан
    Комментировать