Ответы пользователя по тегу PHP
  • Почему опасно в php выставлять неограниченное время жизни сессии?

    Интересный вопрос по безопасности и удобству использования сайта, системы, веб приложения.

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

    А если это личный кабинет банка? Я вошел и...забыл выйти. А войти в веб интерфейс я могу и на терминале банка.
    Снял деньги и ушел, забыв выйти. У банкоматов, конечно есть доп мера безопасности - приложить карту для совершения операции, пин...но не суть.
    Вот для этого и есть время жизни сессии - принудительно разлогинить пользователя.

    Лично я не использую встроенный механизм сессий, а использую куки (срок жизни год).
    Чтобы пользователь сам решал, когда он хочет разлогиниться. Чтобы не возмущался, а что опять разлогинило?
    У меня не банковская система, и похитить куки Васи, Пети - никому не нужно и не принесет особого вреда.
    А если даже и похитят - то он сам виноват.
    Виноват ли продавец замка, что у клиента похитили ключи? Нет.
    А похищают что угодно, номера карт, пин...тут уже человеческий фактор.

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

    И вообще есть телефон. Вход по смс. Если пользователи доверяют вам и не боятся засветить свой номер.
    Ответ написан
    1 комментарий
  • Ошибка 404 - почему не работает роутинг/контроллер/шаблон?

    logpol32
    @logpol32 Автор вопроса
    Долго искал в гугле, пробовал разные варианты и вот что сработало.
    Нужно было:

    1) в корень сайта положить файл .htaccess с содержимым:
    Options -Indexes
    RewriteEngine On
    RewriteRule ^(.*)$ public/$1 [L,QSA]


    2) в папку public положить файл .htaccess с содержимым:
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)\?*$ index.php/$1 [L,QSA]


    Работает. Открывает нужные страницы.

    PS
    Но я всё ещё не понимаю правильно ли это (так вообще делают? в других системах и фреймворках такого не встречал) и почему это не было сделано автоматически, при установке symfony, пакетов и т.д.?
    Ответ написан
  • Как настроить форму заявки на PHP?

    // Если не установлена переменная name (не передано имя).
    if (!isset($_POST['name']))
    {
    echo 'Ошибка!';
    exit;
    }
    Ответ написан
    1 комментарий
  • Как упорядочить id записей в MySQL?

    Варианты:
    1) Перед удалением записи узнать её id. Вставить новую запись с указанным id.
    2) Удаляя запись, записывать её id в другую таблицу - отдельную таблицу для id.
    При вставке новой записи, смотреть есть ли в таблице для id айди.
    Если есть - вставлять новую запись с указанным id (и удалить этот id из таблицы для id). Иначе вставлять запись с автоинкрементным айди.

    PS
    Id обычно первичный ключ. Нельзя вот так просто сдвинуть ключи т.к. одна запись удалилась.
    Поэтому и создается новый id, например 4, когда до этого удалили 3.
    По идее в бд сейчас айди 1 и 2 и 3 свободен. Но не известно на что ссылался этот ключ, на какие таблицы.
    Ответ написан
    Комментировать
  • В базу данных не отправляются данные которые введены в форме, что делать?

    а другие строки не появляются

    Возможно потому что
    $mysql->close();
    Вы закрыли соединение с БД после же первого запроса.
    А у вас цикл.
    Закрывать соединение почти никогда не надо (оно закроется само когда выполнится скрипт).
    Ну или вынесете закрытие за цикл.

    Соединение с БД
    $mysqli = new mysqli($hostname, $username, $password, $base);
    // Если ошибка - сообщаем что не можем соединиться с БД.
    if ($mysqli->connect_errno){echo 'Error. System can not connect to the database.'; exit();}
    // Настройки
    $mysqli->query("set character_set_client='utf8'");
    $mysqli->query("set character_set_results='utf8'");
    $mysqli->query("set collation_connection='utf8_general_ci'");


    Ваш запрос

    $mysql->query("INSERT INTO `users` (`login`, `password`, `name`) VALUES('$login', '$password', '$name')") or die ($mysqli->error);
    
    // Не закрываем соединение с БД!
    // $mysql->close(); // Не надо!
    Ответ написан
    2 комментария
  • Почему сбивается кодировка?

    Как сказали выше.
    head пропиши


    Соединение с БД
    $mysqli = new mysqli($hostname, $username, $password, $first_base);
    //Настройки соединения
    $mysqli->query("set character_set_client='utf8'");
    $mysqli->query("set character_set_results='utf8'");
    $mysqli->query("set collation_connection='utf8_general_ci'");


    Мне кажется или у тебя база в кодировке cp1251, а таблица Users в utf8?
    Выбери одну кодировку и всё делай в ней.
    Ответ написан
    Комментировать
  • Можно ли постом отправить данные, не используя скрытый инпут?

    Я бы оставил скрытое поле. Не вижу в этом проблемы.
    Понятно, что вы привели пример - хотите получить ip пользователя. И вам правильно сказали - лучше это делать в PHP ($_SERVER['REMOTE_ADDR']).
    Но не уточнили, что это ещё верно с точки зрения безопасности.

    Но вернемся к передаче данных. Произвольных.
    Так или иначе их проверка всегда должна быть на сервере. Поэтому любые "хитрости" на клиенте бесполезны. Или не имеют смысла. Только усложнят вам задачу.

    Поэтому самый простой и наверно правильный способ - скрытое поле.
    Ответ написан
  • Как конвертировать/сохранить Unicode в UTF8?

    logpol32
    @logpol32 Автор вопроса
    Всем спасибо. Извините, что немного ввел в заблуждение т.к. сам думал, что php криво принимает данные.
    А оказалось json не любит киррилицу.
    Помогло
    $settings_string=json_encode($setting_array, JSON_UNESCAPED_UNICODE);
    Ответ написан
  • Почему не работает код?

    logpol32
    @logpol32 Автор вопроса
    Ошибка оказалась не в php коде. Проблема с приемом данных.
    Ответ написан
    Комментировать
  • Строка не скрывается сразу, в чем ошибка?

    logpol32
    @logpol32 Автор вопроса
    Решил задачу вот таким способом.

    Главный файл - test.php
    ...
    <?php show_it($_COOKIE['cookie_string']); ?>


    Файл функций
    //Ставим куку
    function set_my_cookie($id)
    {
    ......................
    //Куки поставлены - вызываем показ значений (таблицы)
    show_it($cookie_string); //Передадим строку кук в функцию
    }
    
    //Показ таблицы со значениями
    function show_it($cookie_string)
    {
    //Строка уже в функции - читать из массива кук не надо - всё уже есть
    ..................
    }
    Ответ написан
    Комментировать
  • Как получить "случайно сформированное" значение json массива?

    logpol32
    @logpol32 Автор вопроса
    $obj = json_decode($data,true);
    foreach($obj as $obj_array)
    {
    echo $obj_array;
    }

    1,Array,Array

    Возникают 2 проблемы.
    1 Массивы разного уровня вложенности.
    2 неизвестность имен массивов.
    Ответ написан
    Комментировать
  • Как получить информацию с finance.yahoo?

    logpol32
    @logpol32 Автор вопроса
    Если кому то ещё интересно - то забил на эту таблицу. Как я понял - там данные за день, а у них есть данные в режиме реального времени. Легче парсить и получать данные каждые 10-30 минут.
    Не знаю только как к таким запросам отнесётся yahoo.
    Ответ написан
    Комментировать
  • Как лучше организовать систему поиска и вывода пользователя?

    logpol32
    @logpol32 Автор вопроса
    "дыц" - понравился. Все просто, но
    $query ="SELECT * FROM country WHERE country_name like '" . $_POST["keyword"] . "%' ORDER BY country_name LIMIT 0,6";

    в случае 10.000 записей как себя поведет?
    Ответ написан
    1 комментарий