Ответы пользователя по тегу PHP
  • Когда лучше использовать PDO::quote, а когда PDO::prepare?

    neuotq
    @neuotq
    Прокрастинация
    Это совершенно разные вещи. quote просто экранирует символы(в соответствии с требованием подключения) и заключает строку в кавычки(многие это забывают).
    prepare совершенно иная история, там возвращается специально сформированный объект, которые устойчивей к атакам, требует меньше ручного труда, лучше кэшируется всякими автоматическими штуками, короче будет быстрее и безопаснее в случае построения запросов с переменными.
    А PDO::quote полюбили те кто использовал php давно и не захотел идти дальше и полноценно изучать PDO, используя свои устаревший навыки, для них это просто замена mysql_real_escape_string.
    Ответ написан
    1 комментарий
  • Как сделать что бы переменные формирировали запрос?

    neuotq
    @neuotq
    Прокрастинация
    Зависит от логики, в самом простом случае собирают строку через цикл foreach или другой удобный в данной ситуации,или через несколько if , там с любыми проверками условий. А затем готовую строку отправляют в prepare.
    Ну те грубо говоря:
    /*Допустим мы уже инициализировали и настроили соединение к БД pdo*/
    /*Начальная строка для запроса*/
    $sql = 'SELECT one, two, three
        FROM table';
    /*Дополнительная строка для запроса*/
    $sql_add = '';
    
    /*Массив для данных*/
    $data  = array();
    if($one) {
       //если уже не первый раз делаем, то нужно добавить AND
        if(strlen($sql_add)){
            $sql_add = $sql_add.' AND ';
        }
        //Добавляем новое условие
        $sql_add = $sql_add . ' WHERE one = :one ';
        //Добавляем новые данные в массив
        array_push($data,[':one'=>$one]);
    }
    
    ...
    //Собираем все вместе
    $sql = $sql.$sql_add;
    
    //Подготовляем строку
    $sth = $db->prepare($sql);
    //Передаем значения и выполняем
    $sth->execute($data);
    
    $result = $sth->fetchAll();

    Это простой грубый пример, во многих ORM есть свои инструменты для таких штук.
    Ответ написан
    Комментировать
  • Как перезаписать, повторяющие записи в отдельный массив?

    neuotq
    @neuotq
    Прокрастинация
    Есть специальная функция для этого array_unique оставляет уникальные(обрати внимание на доп параметр сортировки, иногда может понадобиться).
    Далее используем array_diff_assoc чтобы получить разницу в массивах с проверкой индекса. Ну и далее на него тоже может понадобиться array_unique, чтобы убрать повторения уже в нем.
    <?php
    
    $arr1 = array('Запись 1',
                 'Запись 7',
                 'Запись 2',
                 'Запись 3',
                 'Запись 1',
                 'Запись 4',
                 'Запись 5',
                 'Запись 2',
                 'Запись 6',
                 'Запись 7'
                 );
    
    $arr2 = array_unique($arr1);
    
    $arr3 = array_unique(array_diff_assoc($arr1,$arr2));
    Ответ написан
    2 комментария
  • Правильный класс модели собственного фреймворка?

    neuotq
    @neuotq
    Прокрастинация
    Понятие "модель" может сильно отличатся в различных системах и подходах, но грубо говоря нужен мэпепер(это то что про базы данных и как оно туда попадает) и сама логика модели(это про то как оно выглядит, как должно выглядеть(валидация), . Возможны еще вариации дополнительного слоя между ними.
    Простейший и очень понятный пример тут: https://github.com/slimphp/Tutorial-First-Applicat... , вообще советую изучить это приложение написанное на простейшем и мощном Slim Framework.
    UPD: Хороший и правильный ответ на твой вопрос: stackoverflow.com/questions/5863870/how-should-a-m...
    Ответ написан
  • Куда податься PHP программисту?

    neuotq
    @neuotq
    Прокрастинация
    Выбирай любой ВУЗ где есть технические специальности программиста, конечно лучше что-то из крутых, больше можно будет научится у хороших профессоров, но даже не самые топовые уже хорошо. ВУЗ даст тебе опыт, понимание многих базовых фундаментальных штук, четкую программу что нужно учить на первых этапах. Помни, что самое важное в ВУЗе это не то как тебя учат, а то как ты учишься. Заканчивать конечно же не обязательно, хотя все же чем дольше ты продержишься тем лучше. Постоянно делай сайты и для группы и для кафедры и для различных ваших мероприятий. Параллельно нужно сделать over9000 заказов из города типа сайта для магазина что продает конфеты, все можно сделать даже за не очень большие деньги. но так ты набьешь руку еще и в практической части, поймешь какие проблемы реальных обычных людей что далеки от технических специальностей, научишься общаться и понимать задания которые не понимает тот кто их ставит и тд и тп.
    PS а, и обязательно найди деньги для этого: https://ru.hexlet.io/ , они сегодня одни из лучших в плане обсучения начинающих и не очень программистов. Подход совершенно иной чем у других "научу php за месяц", курсы и задания продуманны с целью прокачки прежде всего фундаментальных и практических штук, а уже следствие этого будет изучения php(ну или другого языка).
    Вот как то так.
    Ответ написан
    5 комментариев
  • Как сделать посты просто с текстом и текст + фотография?

    neuotq
    @neuotq
    Прокрастинация
    Если делать по простому и хорошему то:
    1. Таблица запись post:
    id
    title
    text
    ...

    2. Таблица запись imgs:
    id
    img
    post_id
    ...
    . Хорошо еще связать в БД эти поля(зависит от движка)
    В модели описываешь что у поста есть картинки, а в шаблоне просто картинки выводятся если есть хоть одна.
    Ответ написан
    1 комментарий
  • Неправильно работает скрипт, что я делаю не так?

    neuotq
    @neuotq
    Прокрастинация
    1. Внутри foreach как бы нужно использовать result, ведь он ходит по массиву, либо добавлять ключ, который тогда можно использовать уже и в res.
    2. Что такое res? Откуда берутся данные, какой- запрос к БД
    /В целом лучше расскажи какая задача и данные
    Ответ написан
    1 комментарий
  • Где правильнее проверять пользовательские данные? В контроллере или модели?

    neuotq
    @neuotq
    Прокрастинация
    Контроллер. Хотя конечно бывают и модели(тут скорее на более низком уровне) с автоматической проверкой данных, но это все же контроллер.
    UPD
    Вот хороший пример:
    Валидация никнейма, только латиница.
    Проверка на латиницу - в контроллере.
    Проверка на дубль с уже существующим - в модели, часть бизнес логики.
    Я считаю что из-за ошибки в вводе(когда ввели кириллицу) зазря загружать модель, который часто монстр, не нужно. Быстро и просто отсечь в контроллере.
    Иван прав в том что структурно это все же модель, но физически в проектах ситуации разные. Я уточню что я больше говорил про отсечение стандартных ситуаций, которые от модели практическине зависят. В целям производительности их можно и выносит в контроллер, опять таки скорее как руками(контроллер) взяли посмотрели и увидели это ключ до вставки в замочну скважину(модель и основная бизнес логика). А ведь глаза в данном случае смотрят на модель(замочная скважина) и выходит они часть модели.
    Так что в целом на 100% прав Иван, при проектировании нужно понимать что любая валидация это часть модели, просто иногда кажется что это часть контроллера или даже представления, но то всего лишь интерфейсы оьбращения через контроллер к модели.
    Так что валидация это: получили данные, контроллер знает к какой модели их давать, у модели должен быть инструмент валидации, далее он возвращает результат ну и мы решаем что и как.
    Я просто поспешил сказав что валидация часть контроллера, но то что она вызывается в контроллере не отменяет того факта что это часть модели.
    Ответ написан
    Комментировать
  • Как вытащить данные из CDATA в xml?

    neuotq
    @neuotq
    Прокрастинация
    Вот решение с стаковерфлоу stackoverflow.com/questions/6674322/how-to-get-val... :
    <![CDATA[Aghia Paraskevi, Skiatos, Greece]]>

    $doc = new DOMDocument();
    $doc->load('test.xml');
    $destinations = $doc->getElementsByTagName("Destination");
    foreach ($destinations as $destination) {
        foreach($destination->childNodes as $child) {
            if ($child->nodeType == XML_CDATA_SECTION_NODE) {
                echo $child->textContent . "<br/>";
            }
        }
    }
    Ответ написан
    Комментировать
  • Стоит ли делать регистрацию в модальном окне jQuery?

    neuotq
    @neuotq
    Прокрастинация
    Принципиальных проблем быть не должно, особенно если форма не очень большая + множества всяких других потенциально всплывающих окон.
    Короче говоря иходи из удобства, если все вмещается в самый распространненый экран по высоте, то можно вобще не париься. а иначе подумать.
    Лично у меня в последних проектах почти все формы регистрации модальные окна.(но всегда делаю дубляж и отдельной страницы, на случай отключенных скриптов или еще какого-либо коллапса/глюка)
    Ответ написан
    2 комментария
  • Как написать PHP расширение для работы с консольной программой?

    neuotq
    @neuotq
    Прокрастинация
    А proc_open можно использовать? Вот здесь есть обертка https://github.com/aotd1/mystem , через proc_open выполняет.
    Ответ написан
  • Как из текста получить отрывки?

    neuotq
    @neuotq
    Прокрастинация
    Вот есть фича php.net/manual/ru/function.parse-str.php

    parse_str('blahblahblah50006998blahblah~!blah&expires_in=0&user_id=1111111&email=hello@earth.planet', $output);
    print_r($output);
    Ответ написан
  • Простой PHP-класс для Twitter API на OAuth?

    neuotq
    @neuotq
    Прокрастинация
    А мне вот эта реализация больше всего нравится github.com/abraham/twitteroauth
    Ответ написан
    1 комментарий