• Что делает этот код?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    Это одно выражение - a, b. Сначала выполняется левая часть ((console.log('a'))), потом правая - (function () { console.log('b') }) и возвращается последняя.

    То есть, при выполнении этих строк в консоль выведется "a" и возвратится функция, пишущая "b".
    Ответ написан
    6 комментариев
  • В чем суть конструкции, как её понять?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    Считается $this->leftAttribute. Для примера, это будет foo_bar. Вместо {$this->leftAttribute} подставляется foo_bar. Получается $target->foobar - обращение к свойству по названию.
    Ответ написан
    1 комментарий
  • Как выбрать последние цифры в строке используя регулярные выражения?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    var str = "matrix(1 0 0 1 40 230)";
    var matched = str.match(/(\d+)\s+(\d+)\)$/);
    
    console.log(matched[1]); // 40
    console.log(matched[2]); // 230


    Я бы не советовал разбирать такую строку регулярками, тем более, что без них (почти) это сделать еще проще и понятнее:
    var str = "matrix(1 0 0 1 40 230)";
    var content = str.match(/\((.+)\)/)[1]; // То, что в скобках
    content = content.split(" "); // Поделить по пробелам
    console.log(content); // [1, 0, 0, 1, 40, 230]
    Ответ написан
  • CSS гуру, вопрос на специфичность селекторов?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    Не 1, 10, 100, 1000, а 1, 256, 65536, ... Например, чтобы перекрыть ID классами, нужно 256 классов. (а лучше 257)

    UPD Сейчас этот баг пофикшен. Теперь ID нельзя перезаписать классами
    Ответ написан
  • Почему возникает ошибка trying to get property off non-object?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    Значит, $connect->query вернула не объект. Выведите var_dump($check) и $connect->error
    Ответ написан
    Комментировать
  • Как сделать, чтобы страница перезагружалась по запросу?

    Ivanq
    @Ivanq
    Знаю php, js, html, css

    !!! Не использовать в продакшене по возможности.
    Мне кажется, Вам нужно что-то другое. Смысла обновлять страницу, если добавился пост, скажем - не нужно. Если у Вас похоже на чат - кто-то отправляет кому-то и у кого-то обновляется, вам к сокетам.


    Если можно NodeJS - юзайте его.
    Если можно бла бла бла - юзайте его.
    Если только PHP, то можно попробовать Long polling.

    Клиенты с помощью XMLHttpRequest подключаются к файлу, скажем, autoupdate.php. autoupdate.php не отдает результат, а тянет время - while(true) {} или типа того.

    Если autoupdate.php может сам вовремя определить, когда обновить, то:
    <?php
    while(true) {
        $update = ...;
        if($update) {
            echo "UPD ";
            flush();
        }
        sleep(1); // Подкрутить
    }


    В JS:
    var xhr = new XMLHTTPRequest();
    xhr.timeout = 1000 * 60 * 60; // 1 час
    xhr.onerror = function(e) {
        // Печалька
    };
    xhr.onreadystatechange = function() {
        if(xhr.readyState != 3) return; // Если бы был 4, мы бы ловили, только когда скрипт бы завершился, а 3 - любой вход
        // В xhr.responseText новый результат
        location.reload();
    };
    Ответ написан
    Комментировать
  • IE некорректно отображает страницу?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    Не советую использовать type="search". Старые браузеры вообще не давали менять его внешний вид. Используйте type="text" и не мучайтесь.
    Ответ написан
    Комментировать
  • Как определить, что пользователь зашел с chrome?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    stackoverflow.com/a/13348618
    function isChrome() {
      var isChromium = window.chrome,
        winNav = window.navigator,
        vendorName = winNav.vendor,
        isOpera = winNav.userAgent.indexOf("OPR") > -1,
        isIEedge = winNav.userAgent.indexOf("Edge") > -1,
        isIOSChrome = winNav.userAgent.match("CriOS");
    
      if(isIOSChrome){
        return true;
      } else if(isChromium !== null && isChromium !== undefined && vendorName === "Google Inc." && isOpera == false && isIEedge == false) {
        return true;
      } else { 
        return false;
      }
    }
    Ответ написан
    Комментировать
  • Почему не функционирует ссылка?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    Так не ./?action=about, а ?action=about, наверное.

    PS Код лучше было выложить как UPD к вопросу, а не как ответ
    Ответ написан
  • Как получить данные в строку страницы index.php? при отправке формы с index.html?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
    
        <center>
            <h1>Alladin</h1>   
            
           <h3>
                В одном персидском городе <?=$_POST["city"]?> жил бедный портной <?=$_POST["tailorName"]?>. У него были жена и сын по имени <?=$_POST["sonName"]?>. Когда Аладдину исполнилось <?=$_POST["age"]?> лет, отец его сказал:
                —   Пусть мой <?=$_POST["sonName"]?> будет портным, как я,— и начал учить Аладдина своему ремеслу.
            </h3>
        </center>
    
    </body>
    </html>

    Так?

    У Вас не работала конструкция echo..., потому что она вызывалась уже внутри PHP! Я просто вынес текст сказки вне PHP, прямо в HTML. Там с помощью <?=...?> вставляется текст.
    Ответ написан
    1 комментарий
  • Аякс и валидация на сервере?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    Валидировать лучше везде.

    Пример:
    Можно закачать до 5 фотографий JPEG

    На клиенте:
    Проверить, что файлов <= 5, иначе вывести сообщение.
    Проверить, что файлов >= 1, иначе вывести сообщение.
    Проверить, что файлы в формате JPEG, иначе вывести сообщение.

    На сервере:
    То же самое, но вместо вывода сообщения - "error #001: files > 5" и т. п.

    На клиенте - чтобы можно было быстро, красиво вывести сообщение, не отправляя 200 гигов на сервер.
    На сервере - чтобы не пропустить хакеров ламеров, которые будут заливать котиков, обойдя JS.
    Ответ написан
  • Как получить данные по шаблону с помощью preg_match?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    Если нужно только получить
    $str = "@1@ @2@";
    preg_match_all("/@(\d+)@/", $str, $matches);
    var_dump($matches[1]); // Массив ID


    Если нужно изменить на что-то другое (скажем, ссылку)
    $str = "@1@ @2@";
    echo preg_replace_callback("/@(\d+)@/", function($arr) {
        return "<a href='cards/" . $arr[1] . "'>@" . $arr[1] . "@</a>"; // В $arr[1] ID
    }, $str);
    Ответ написан
    1 комментарий
  • Как вывести прогресс работы WebWorker-а?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    Worker
    const keypair = require('keypair');
    
    onmessage = (e) => {
      let time = Date.now();
      let workerResult = keypair(e.data);
      postMessage({
        result: workerResult,
        time: Date.now() - time
      });
    }


    Client
    if (window.Worker) {
      let container = document.querySelector('#container');
      let myWorker = new Worker("worker.js");
      myWorker.onmessage = (e) => {
        container.innerHTML = e.data.result + " in " + e.data.time + "ms";
        console.log('Message received from worker');
      };
      myWorker.postMessage({"bits": 2048});
    }
    else {
      console.log('window.Worker Error');
    }
    Ответ написан
    3 комментария
  • Как в js работает SyntaxError в throw?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    throw new Error(...); бросает исключение - что-то типа сигнализатора ошибки. Когда выбрасывается исключение, исключительную ситуацию нужно как-то обработать.
    Обычно ошибка выводится в консоль, а функция, ее caller, caller caller'а и т. д. завершают работу, так как данные испорчены и обрабатывать их нет смысла.

    ------------------------------------ try ------------------------------------
    Однако иногда нужно обработать ошибку иначе.
    try { // Пробуем (try) исполнить код
        move();
        // Код, который может выбросить исключение
    } catch(e) { // Ловим (catch) исключение, если оно было выброшено, записываем его в e (можно любую переменную, но к e все уже привыкли)
        alert("ERROR");
        // Выводим ошибку или обрабатываем ее еще как-то
    }


    Стоит добавить, что после catch(e) можно написать finally - код, который будет выполнен, и если код выполнился, и если упал с ошибкой
    try { // Пробуем (try) исполнить код
        move();
        // Код, который может выбросить исключение
    } catch(e) { // Ловим (catch) исключение, если оно было выброшено, записываем его в e (можно любую переменную, но к e все уже привыкли)
        alert("ERROR");
        // Выводим ошибку или обрабатываем ее еще как-то
    } finally {
        alert("It worked (or didn't :) )");
    }


    ------------------------------------ throw ------------------------------------
    Мы можем бросить ошибку с помощью оператора throw, для этого ему передается исключение (или строку, или число, или другой объект, но лучше иключение). Потом брошенное исключение можно поймать с помощью try.
    Кстати, бросать исключение можно и внутри catch, тогда оно перейдет к следующему catch - это называется проброс исключений. Например:
    function doThat() {
        try {
            a();
        } catch(e) {
            if(e instanceof TypeError) { // Если выброшено исключение TypeError, то
                alert("TypeError!"); // написать TypeError!
            } else { // Иначе
                throw e; // doThat() не знает, как обрабатывать другие типы исключений, передаем дальше
            }
        }
    }
    // ...
    try {
        doThat(); // Если a() выбросит TypeError, catch в doThat() его обработает
    } catch(e) { // doThat() пробросил исключение дальше
        alert("Some other error!");
    }


    ------------------------------------ Код в примере ------------------------------------
    Мне кажется,
    move();
      if (!y || !x || !z) {
        throw new Error("не хватает данных"); 
      }

    стоит переписать так:
    if (!x || !y) {
        throw new Error("не хватает входных данных"); 
    }
    move();
    if (!z) {
        throw new Error("не хватает выходных данных"); 
    }

    Лучше не вызывать move(), если мы не уверены, что данных хватает - так мы проверяем, что входные и выходные данные правильные.
    Ответ написан
    Комментировать
  • Как вывести данные в 2 столбца mysql?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    ...
    <table>
    <tr>
    <?php
    $data = ...;
    $i = 0;
    foreach($data as $cell) {
        echo "<td>";
        echo $ceil; // здесь будет вывод ячейки
        echo "</td>";
        if($i % 2 == 1) echo "</tr><tr>";
        $i++;
    }
    ?>
    </tr>
    </table>
    ...
    Ответ написан
  • PHP. Массивы. Возможно ли обратится к элементу массива не по ключу, а по индексу?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    array_values($MyArray)[1]

    Но, если честно, это плохо - индекс в массиве, особенно если данные приходят извне, зависит от положения звезд на небе.
    Ответ написан
    Комментировать
  • Почему при масштабировании футер уходит вверх?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    У Вас footer, скорее всего, не прибит к низу. Как с помощью CSS прижать footer к низу окна браузера
    Ответ написан
    Комментировать
  • Как называется такое окошко с уведомлением?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    push-уведомление.

    PS Сколько разных названий для маленького окошка :)
    Ответ написан
    Комментировать
  • Как передать modelAttribute через js??

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    <form:form action="/booking/movie" id="form">
            Movie ID : <form:input path="movieId"/>
            <input type="submit"/>
        </form:form>

    var form = document.getElementById("form");
    form.setAttribute("modelAttribute", "ticketForm");
    Ответ написан
    Комментировать