• Почему вторая функция undefined?

    shaks
    @shaks
    попытка из консоли вызвать ShowSuccess говорит возвращает undefined

    Так он и должен возвращать undefined, ведь функция не возвращает ничего.

    h_1513845435_6453561_7d7c12d44a.png
    Ответ написан
    3 комментария
  • Что означает такая запись?

    shaks
    @shaks
    data.yandex - это объект. У объекта нет метода forEach, он есть у массива. Поэтому мы получаем массив ключей объекта используя Object.keys, и запускаем цикл. А внутри цикла мы уже обращаемся непосредственно к тому или иному ключу объекта data.index.
    вот пример:

    const data = {yandex: { popka: 'popka value', durak: 'durak value' }}
    // => undefined
    Object.keys(data.yandex)
    // => Array [ "popka", "durak" ]
    Object.keys(data.yandex).forEach(function(key){
       console.log(data.yandex[key]) // вернет сначала popka value потом durak value
    })


    Как относиться "prop" к "data.yandex"?

    обычное дело. неправильное имя переменной. Правильным именем было бы key тогда читать код будет понятнее, и станет ясно не задумываясь, что key - является ключом объекта data.yandex
    Ответ написан
    Комментировать
  • Где хранить статьи пользователь в "блоговом" приложении?

    shaks
    @shaks
    Как связать например данные из БД со стором в redux?

    для большого приложения - всё стандартно. 1в1 также как и не для большого ) Ты же не хранишь в состоянии - все посты, правильно? Ты хранишь там только текущую часть/страницу.

    Как организовать работу с данными?

    не понятен вопрос. Через redux - отличный вариант. Я работаю обычно в связке redux, redux-api-middlware, json-api-normalizer
    Как хранить задачи пользователя, как хранить его посты?

    в состоянии `userTasks` храни задачи пользователя, в состоянии `userPosts` - его посты ) Как вопрос, такой ответ )

    Взять посты к примеру, состояние будет выглядеть примерно следующим образом
    isFetching: false,
    pagination: {
      currentPage: 1,
      nextPage: 2,
      perPage: 50,
      totalEntires:100500
    },
    ....
    posts: {посты}
    Ответ написан
    2 комментария
  • Почему не вызывается статический метод?

    shaks
    @shaks
    Дык, батенька) во первых.
    public function __destruct() {
          $this->log('Создался объект');


    не "создался", а уничтожился. раз, не $this->log а self::$log два. (у тебя ж статический метод то)
    И ты хоть 20 раз напиши в конце файла FileLogger::create('test', "file.log");, записей больше не увидишь. Объясняю почему:

    Деструктор класса срабатывает когда? правильно, когда разрушается объект. А объект у тебя разрушается когда? правильно, когда завершается работа скрипта. А разрушается он 1 раз а не 3 почему? потому что объект у тебя один.
    Взгляни внимательно на функцию create , особенно на эту запись
    if(isset(self::$loggers[$fname])) {
          
            return self::$loggers[$fname];
          }

    и обрати внимание какое имя файла ты передаешь своему логгеру и да придет тебе озарение юный падаван.

    !! Для более глубокого понимания, советую поставить xdebug, и глянуть пошагово что происходит и как.

    P.S. Не вздумай даже этот логгер использовать гдето на практике. Автор видимо хотел чтото объяснить этим кодом, а не написать логгер. Ибо это дичь.
    Ответ написан
    Комментировать
  • Как заменить последний символ строки js?

    shaks
    @shaks
    какой вопрос, такой и ответ)
    a="localhost/blog1/public/articles?page=2"
    // => "localhost/blog1/public/articles?page=2"
    a = a.substring(0, a.length-1) + "3"
    // => "localhost/blog1/public/articles?page=3"
    Ответ написан
    Комментировать
  • Как правильно деплоить приложение на pm2?

    shaks
    @shaks
    Знаю что тема древняя.. Просто оставлю ссылку
    Как сделать деплой react приложения с помощью PM2
    Ответ написан
    Комментировать
  • Как разграничить доступ пользователей к web ресурсам?

    shaks
    @shaks
    Не уверен что понял правильно ваш вопрос, но мне кажется правильным будет следующий вариант:
    user1 и user2 обращаются на один и тот же api урл - /api
    при обращении, в заголовке они передают версию api.. например так:

    для user1
    Accept: application/json; version=1.1;
    для user2
    Accept: application/json; version=1.2;

    На бекенде, в роутинге, мы смотрим на какую версию апи пришло обращение. Если на версию такуюто, то подгружаем такоето апи, на версию сякуюто - сякуюто версию апи.
    Ответ написан
  • Как сделать вложенные таблицы на Bootstrap?

    shaks
    @shaks
    Ответ написан
    Комментировать
  • Как можно сделать валидацию полей формы посредством Js?

    shaks
    @shaks
    Да вы батенька - извращанец :)
    Такая валидация неприемлема
    - только html5
    - дублирование кода
    - нет гибкости, например как вы будете валидировать поля Password и Password Confirmation ? + еще 100500 других примеров.

    а если нет то как это можно сделать на чистом JS?

    Что вы подразумеваете под чистым JS. А какой js грязный?
    Как бы там нибыло, советую взглянуть на шикарную либу parsleyjs.org/doc
    Ответ написан
    Комментировать
  • Как сохранить в модели с типом Time время учитывая часовой пояс?

    shaks
    @shaks
    iKapex
    Вот чё делать?

    Снимать трусы и бегать :)

    Да. действительно. Побаловался в консоли, узрел такое поведение.
    h_1497531911_1753289_fae2be68da.png
    Так происходит потому что:
    Active Record keeps all the datetime and time columns timezone aware. By default, these values are stored in the database as UTC and converted back to the current Time.zone when pulled from the database.


    Данное поведение фиксится достаточно просто.
    # config/application.rb
    ..........
    config.active_record.time_zone_aware_attributes = false


    Результат:h_1497532143_2268431_bf18b998c8.png

    Подробнее тут api.rubyonrails.org/classes/ActiveRecord/Timestamp.html

    P.S. но я бы советовал оставить это поведение, т.к. это правильно. И выставить в настройках
    #config/application.rb
    config.active_record.default_timezone = :local

    Таким образом, AR будет конвертить обратно в локальный часовой пояс. А т.к. у тебя он выставлен небыл, то он оставлял UTC
    Ответ написан
    1 комментарий
  • Как правильно расставить ""?

    shaks
    @shaks
    <table>
        <?php foreach($a as $b):?>
            <tr>
                <td><?php echo $b?></td>
            </tr>
        <?php endforeach;?>
    </table>

    Этим примером я хочу сказать, что не нужно в пхп файле генерить хтмл, нужно в хтмл шаблоне делать вставки пхп. Иначе дрочится с кавычками будете постоянно. Да и подход ваш еще в духе пхп3, а щас какбы 2017й год на дворе
    Ответ написан
    5 комментариев
  • Почему выдает ошибку GET и как исправить?

    shaks
    @shaks
    Notice: Undefined index: num2 in
    Индекс num2 в переменной ($_GET) не определен..

    Вы делайте запрос на localhost/12.php?num=2 и не передаете num2, отсюда и notice ошибка.

    но после ошибки файл news2 всё же показан.

    а вот не врите.. показан файл news1
    $fir = $_GET['num']; # $fir  у вас берется из переменной $_GET['num']
    $sec = $_GET['num2']; # num2 не передан, он udnefined
    if(!isset($sec)) { # срабатывает этот иф, т.к $sec у вас undefined
      $text = file_get_contents("news/news$fir.txt"); # отображается переменная $fir
    Ответ написан
  • Почему не работает router из мануала php?

    shaks
    @shaks
    поменяйте картинку на небитую ;)
    Пример правильный. код правильный.

    Upd. гляньте в консоль браузера. Там ошибка отображаться должна, почему картинка не подгрузилась.
    Со стороны сервера все произошло правильно, как его и просили. Вы дали условие, сработал else и вывел строку.
    А почему хтмл тэг img не отобразил картинку - пхп никак не касается . Причина тут может быть только одна - битая картинка.
    Ответ написан
    Комментировать
  • Возможно ли выполнить несколько запросов к БД в одном mysqli_query?

    shaks
    @shaks
    буквально на днях уже подымался этот вопрос.
    php.net/manual/ru/mysqli.multi-query.php
    разделяйте строки через ; и используйте не mysqli_query а mysqli_multi_query

    PS. как вас только не тошнит пользоваться mysqli*
    Ответ написан
    Комментировать
  • Как передавать статические данные из модели в представление?

    shaks
    @shaks
    да
    Ответ написан
    Комментировать
  • PHP-скрипты выполняются последовательно?

    shaks
    @shaks
    Используйте транзакции баз данных. Они как раз для подобных случаев и созданы.
    Логика примерно следующая
    псевдокод:
    <транзакция>
    - удаляем что-то
    - апдейтим что-то гдето
    - записываем что-то кудато
    если всё ок:
         -- commit, все запросы в бд ушли, но не выполнились, команда commit выполняет их все сразу. 
    иначе
        -- rollback - откат всех запросов в бд, что выполнены в блоке транзакции. 
    </транзакция>
    Ответ написан
  • Кто поможет переписать SQL запрос?

    shaks
    @shaks
    Я не совсем понял что у вас где храниться, и зачем вам логин аккаунта, но подразумеваю что вы имели ввиду что баланс юзера хранится не в таблице users а в таблице lm_balance

    Эти таблицы объединяет только одно ИД аккаунта

    Во первых имя колонки с id аккаунта (ид юзера в вашем случае) должен называться user_id а не name (судя по вашему sql запросу).
    Во вторых, balance = balance +" . floor($_credits) . " - за это руки вырывать надо, с корнями.
    Баланс ведите в наименьшей величине, если баланс рублевый - в копейках, долларовый - в центах, биткоиновый - в сатоши, и тд, и ничего не округлять никогда, если хотите чтобы сводился дебит с кредитом. При работе с большими числами лучше использовать либу по работе с большими числами
    В третьих, ид юзера нужно просить не юзера ввести, а брать из сессии (если у вас сессионная авторизация).
    В четвертых, функции mysql_* уже давно устарели и помечены как деприкейтед. В пхп7, если я не ошибаюсь - драйвер mysql убрали.
    Ответ написан
    Комментировать
  • Можно ли динамически создать массив объектов?

    shaks
    @shaks
    Если я правильно понял поставленную задачу, то вот:
    class Figure {
        constructor(name){
            this.name = name
        }
    }
    ['circle', 'ellipse', 'rectangle', 'square', 'triangle'].every(x => window[x] = new Figure(x))
    /*eslint-disable */
    console.log(circle)
    /*eslint-enable */

    На выходе вы получаете переменные из массива, которые являются объектами класса Figure
    Ответ написан
    4 комментария
  • Redux-Form. Как получить formValueSelector формы, когда имя формы передается в пропсах?

    shaks
    @shaks Автор вопроса
    Вобщем ничего более элегантного я не придумал, как вообще убрать formValueSelector и из контейнера передавать значения формы пропсами.

    Я буду рад узнать другие решения.
    Ответ написан
    Комментировать