• Как загружать для РФ один скрипт, а для других стран - другой?

    @d-sem
    Использовать любой сервис который позволяет определять регион по IP

    Или внешнее API, или библиотеки вида https://www.maxmind.com/en/geoip2-services-and-dat...
    Ответ написан
    2 комментария
  • Как написать сайт не веб-программисту без особых усилий?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Не являюсь врачом, однако появилась нужда провести трансплантацию человеческого сердца. Я умею вырезать фигурки из бумаги и зашивать носки, но резать и шить плоть у меня нет желания, получится слишком криво и потрачу много сил. Обращаться в ветеринарки не очень хочется. Может есть какое-нибудь решение. В стиле клиник и подобных вещей.
    Ответ написан
    3 комментария
  • Как написать сайт не веб-программисту без особых усилий?

    Adamos
    @Adamos
    Переписать вопрос, выкинув из него ненужное и указав конкретное: какие "нужные утилиты" планируются.
    Они, вполне возможно, давно реализованы в CMS или плагинах к ним, и писать их с нуля просто не требуется.
    Ответ написан
    Комментировать
  • Туплю в решении вроде бы простой задачи?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Как вам уже объяснили, ошибка тут
    if (i % j !== 0){ //тут
        b+=1
     }


    Но так как для вас она не очевидна объясню. Возмем ситуацию когда i=6
    и посмотрим как будет работать в данной ситуации внутренний цикл

    for (let j = 2; j < i; j++) {
          if (i % j !== 0){
            b+=1
          }
        }

    при j = 2 условие не сработает (и это правильно)
    при j = 3 условие не сработает (и это правильно)
    при j = 4 условие сработает (и это НЕ правильно)
    при j = 5 условие сработает (и это НЕ правильно)

    итого ваш алгоритм аж 2 раза посчитает что число 6 простое

    думаю теперь вам станет понятней в чем ошибка и вы отметите ответы от ThunderCat и Олег как верные))))

    ну и от себя добавлю - замените внутренний цикл на такой
    for (let j = 2; j <= i/2; j++){
    это в 2 раза уменьшит количество циклов. Почему это правильно предлагаю подумать самому))))
    Ответ написан
    8 комментариев
  • Почему неправильно работает сравнение?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Вопрос
    Сколько строк вернёт база данных, если в запрос передать несуществующий логин?

    Дополнительный вопрос
    Какой смысл вообще городить авторизацию, если любой придурок авторизуется без всякого пароля, через SQL инъекцию?

    Подробнее про вопрос секьюрности этого куска:
    Если переменная подставляется напрямую в запрос, то это значит что в нее можно дописать SQL, который будет делать совсем не то, что ожидалось.
    Например, если вместо имени пользователя написать что-то вроде имя' AND LEFT(password, 1) = 'a
    то тогда код напишет "Лоигн занят" если первая буква пароля - "а". Пара десятков таких запросов - и первую букву мы уже угадали. Тем же способом же достаём остальные и вот мы получили пароль любого клиента.

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

    Здесь надо делать так

    $input = json_decode(file_get_contents("php://input"), true);
    
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $link = mysqli_connect(*информация БД*);
    $link->set_charset("utf8mb4");
    
    $stmt = $link->prepare( "SELECT login FROM sn_users WHERE login=?");
    $stmt->bind_param("s", $login);
    $stmt->execute();
    $result = $stmt->get_result();
    $row = $result->fetch_assoc();
    if ($row) {
        echo "Лоигн занят";
    } else {
        echo "Лоигн свободен";
    }
    Ответ написан
    7 комментариев
  • Как реализовать выбор значения списка из модального окна?

    Liatano
    @Liatano
    Как вариант создать обработчик,который будет регистрироваться в момент открытия модального окна (либо вешать на событие открытия,либо разместить в самой модалке).
    в итоге скрипт будет выглядеть как-то так:

    let elements = document.querySelectorAll('.modal-body li a');//делаем выборку строк,на которых нужна обработка клика
    elements.onclick = function() { //вешаем обработчик
        let id=this.id; //забираем id
        let inp=document.querySelectorAll('.form-group [name="parent_id"]'); //находим инпут
        inp.value=id; //втавляем id  в значение инпута
    };


    есть пара замечаний по верстке:
    • использовать тег <a> не для ссылок - плохая практика, теги нужно использовать по назначению
    • для верстки и скриптов лучше использовать классы либо id, привязка тегам в обоих случаях ведет к проблемам в будущем.
    • для хранения данных(в данном случае id) лучше использовать атрибуты data, которые были придуманы как раз для этого
    Ответ написан
    4 комментария
  • Как реализовать любой алгоритм на JS без привязки к веб-странице?

    Попробуй nodejs - сможешь как с питоном просто в консоли запускать и получать результат
    Ответ написан
    2 комментария
  • Как правильно связать php сайт с mysql?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    На частные вопросы ответили в комментариях, поэтому ответим на вопрос из заголовка.

    Чтобы соединить сайт с mysql, в РНР вообще-то есть два API - mysqli и PDO. Несколько лет назад с mysqli вообще невозможно было нормально работать, но на данный момент они выровнялись, хотя PDO все равно удобнее, по трем причинам
    1. Единый интерфейс при работе с различными СУБД (неактуально, если mysql для нас является синонимом слова база данных)
    2. Набор функций-хелперов для получения данных из БД в различных форматах (при желании легко воспроизводится вручную)
    3. Именованные плейсхолдеры (для некоторых это главная причина использовать PDO)

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

    1. Создаём файл`config.sample.php` куда кладем все настройки приложения, в том числе базы данных
    return [
    	'db' => [
    		'host' => '127.0.0.1',
    		'username' => '',
    		'password' => '',
    		'dbname' => '',
    		'port' => 3306,
    		'charset' => 'utf8mb4',
    	],
    ];

    2. В файле, который включается во все скрипты сайта, добавляем код
    if (!file_exists('config.php'))
    {
    	throw new \Exception('Create config.php based on config.sample.php');
    }
    $config = require 'config.php';

    3. И дальше в этом же файле пишем собственно нормальный код подключения к БД
    либо к mysqli
    // включаем режим информирования об ошибках
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    // подключаемся к серверу
    $dbc = $config['db'];
    $db = new \mysqli($dbc['host'], $dbc['username'], $dbc['password'], $dbc['dbname'], $dbc['port']);
    // не забываем установить кодировку, чтобы не было ошибок с кракозябрами
    $db->set_charset($dbc['charset']);

    либо к PDO
    $options = [
        \PDO::ATTR_ERRMODE            => \PDO::ERRMODE_EXCEPTION,
        \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
        \PDO::ATTR_EMULATE_PREPARES   => false,
    ];
    $dbc = $config['db'];
    $dsn = "mysql:host=$dbc[host];dbname=$dbc[dbname];charset=$dbc[charset];port=$dbc[port]";
    $pdo = new \PDO($dsn, $dbc['username'], $dbc['password'], $options);

    После того как будет освоена работа с системой контроля версий (а по-хорошему это надо было сделать уже давно) добавляем config.php в файл .gitignore
    Таким образом на каждом хосте, где исполняется этот код, будет собственный файл с настройками, создаваемый по образцу из config.sample.php

    Да, и Очень Важное Дополнение:
    почему нельзя сделать 1 соединение для сайта и не тратить каждый раз время на коннект к БД?

    Никогда не следует переживать по поводу воображаемых проблем. Вот только когда создание коннекта каждый раз станет реальной проблемой, только тогда и начинать переживать по этому поводу и искать пути решения (спойлер: никогда).
    Ответ написан
    14 комментариев
  • Как разобрать такую строку {i:0;s:15:"_identity-admin";i:1;s:14:"[3,null,21600]";}?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Похоже, что строка неполная. Ваша строка - это сериализованный массив, но спереди ещё должен быть признак массива (a) и его длина (2).
    $t = unserialize('a:2:{i:0;s:15:"_identity-admin";i:1;s:14:"[3,null,21600]";}');
    var_dump($t);
    // array(2) {
    //   [0] => string(15) "_identity-admin"
    //   [1] => string(14) "[3,null,21600]"
    // }

    a:2 - массив с длиной 2 элемента
    i:0 - целочисленный индекс 0
    s:15 - строка длиной 15 символов
    Подробнее о формате можно посмотреть в первом комментарии к serialize.
    Ответ написан
    Комментировать
  • Как получить путь к файлу из input type="file"?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    IMHO, никак. Доступ к реальной файловой системе из js-скрипта в браузере сильно ограничен. Максимум - получить реальное имя без полного пути и временное служебное имя вида blob:null/8d02a1cb-72bc-4026-a4f7-d5f1c5d08bce.

    P.S. Странное имя функции "добавить неудачу".
    Ответ написан
    Комментировать
  • Как получить путь к файлу из input type="file"?

    Stalker_RED
    @Stalker_RED
    Вы можете получить имя файла из input.value.

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

    rozhnev
    @rozhnev Куратор тега MySQL
    Fullstack programmer, DBA, медленно, дорого
    SELECT user_id, count(distinct created)
    FROM orders
    WHERE created > DATE_SUB(CURRENT_DATE, INTERVAL 30 DAY) -- get last 30 day orders
    GROUP BY user_id
    HAVING count(distinct created) = 30 -- check user have orders in 30 different days
    ;


    MySQL sandbox
    Ответ написан
    5 комментариев
  • Что лучше использовать для ввода большого текста?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    textarea или элемент с contenteditable
    Ответ написан
    Комментировать
  • Как стать архитектором в веб-разработке?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Этому нигде нельзя научиться, в архитекторов вырастают естественным путём из программиста сеньорского уровня, сталкивавшихся много лет с архитектурными проблемами, перенимавших знания от опытных архитекторов и прочитавших сотни книг.
    Ответ написан
    Комментировать
  • Ошибка codewars?

    Alexandroppolus
    @Alexandroppolus
    кодир
    function validatePIN(pin) {
         return /^\d{4}(\d\d)?$/.test(pin);
    }
    Ответ написан
    Комментировать
  • Как удалить ¶ из sql?

    @alexalexes
    update table_name
    set value = replace(value, char(код символа ¶), concat(char(код символа \r), char(код символа\n)))

    Только не копипасьте вслепую, а разберитесь с вложенными функциями, в какой кодировке база и какие коды символов можно использовать для замены.
    Перед применением update проверьте результат select-ом:
    select value,
              replace(value, char(код символа ¶), concat(char(код символа \r), char(код символа\n))) as new_value
    from table_name
    Ответ написан
    31 комментарий
  • Существует ли событие ухода элемента из поля просмотра окна браузера?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    IntersectionObserver
    Ответ написан
    Комментировать
  • Как клиенту объяснить отличие SSR от обычного классического сайта html + php?

    DevMan
    @DevMan
    ssr отдает сгенерированную статику со старта.
    бэк, уже давно, умеет так же.

    в итоге: вопрос в конкретной реализации и умении продать.
    Ответ написан
    Комментировать
  • Можно ли дешифровать md5?

    Sanes
    @Sanes
    Это хеш, его нельзя дешифровать. Есть словари, где может быть ваше слово.
    Ответ написан
    Комментировать
  • Как роботам показывать оригинал страницы, а пользователей отправлять редиректом на другой адрес?

    ky0
    @ky0 Куратор тега Системное администрирование
    Миллиардер, филантроп, патологический лгун
    Смотрите в заголовок юзер-агента и в зависимости от увиденного редиректите, либо нет. Но:

    1. Поисковики не очень любят, когда ботам и живым людям отдаётся разное.
    2. Многие краулеры в юзер-агенте обманывают.

    В целом, это можно сделать и без РНР, с помощью одного веб-сервера.
    Ответ написан
    Комментировать