Ответы пользователя по тегу PHP
  • Как записать данные HTML инпута в php сессию?

    @D3lphi
    Возьмем форму:
    <form method="get"> 
         <input type="text" name="add_group">
         <input type="submit" name="send">
    </form>


    Обработчик:
    session_start(); // Обязательно запускаем (возобновляем) сессию! Без этого работать не будет!
    
    // Если кнопка была нажата
    if (isset($_GET['send'])) {
         // Если инпут не пуст 
         if (!empty($_GET['foxy_add'])) {
              $_SESSION['foxy_add'] = $_GET['add_group'];
         }
    }
    // Эти 2 условия можно совместить, но я не стал этого делать для наглядности
    Ответ написан
    Комментировать
  • Как запретить переход на страницу если нет сессии?

    @D3lphi
    session_start();
    
    if (!isset($_SESSION['foxy_auth'])) {
        header('location: http://www.example.com'); // Редирект, если сессия не существует
    }
    Ответ написан
    1 комментарий
  • Как правильно сделать ЧПУ на htaccess?

    @D3lphi
    RewriteEngine On
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.+)\.html$ $1.php
    Ответ написан
    1 комментарий
  • Дочерние функции класса не видят переменную внутри класса. Как?

    @D3lphi
    Set() - это НЕ статический метод. А вы обращаетесь к нему, будто он статический.
    Нужно вызывать его так:
    $hi->Set();
    И да, имена методов принято писать с маленькой буквы.
    Ответ написан
    1 комментарий
  • Правильно сконструировать задуманое??

    @D3lphi
    Выводите их из базы данных, по средствам сортировки по рейтингу от большего к меньшему и лимитом в 10 записей:
    SELECT `username` FROM `users` ORDER BY `raiting` DESC LIMIT 10

    Потом, на выводе данных с помощью цикла счетчика проверяете, на каком месте находится пользователь и подставляете соответствующую картинку:
    for ($i = 0; $i < count($results); $i++) {
        // Золотые медали
        if ($i > 1 and $i <= 3) {
            // Выводим соответствующее изображение, а также, имя пользователя
            echo '<img src="gold.jpeg"> ' . $results[$i]->username;
            continue;
        }
        // Серебряные медали
        if ($i > 3 and $i <= 7) {
            echo '<img src="silver.jpeg"> ' . $results[$i]->username;
            continue;
        }
        // Бронзовые медали
        if ($i > 7 and $i <= 10) {
            echo '<img src="bronze.jpeg"> ' . $results[$i]->username;
            continue;
        }
    }
    Ответ написан
  • Что это означает и что делает?

    @D3lphi
    Данный код перенаправляет все запросы с адреса <домен сайта>/index.html на адрес <домен сайта>/index.php. \.html - в данном случае обратный слэш играет роль символа экранирования. Так как в регулярных выражениях (Подробнее тут: Регулярные выражения) символ . играет роль <любого символа>, то для того, чтобы он воспринимался программой именно, как символ точки, а не элемент регулярного выражения, его нужно экранировать. Собственно, символ \ это и производит. То есть, после парсинга, веб сервер получит строку RewriteRule ^index.html /index.php
    Ответ написан
    Комментировать
  • Как добавить свои библиотеки в Composer для использования в разных проектах?

    @D3lphi
    Выполняем команду:
    composer init

    Следуем инструкциям. В результате, получим частично сконфигурированный файл composer.json. Прописываем в этот файл неймспейсы для автозагрузки классов:
    {
    // Другие опции...
        "autoload": {
            "psr-4": {
                "MySuperApp\\": "src/"
            }
        }
    // Другие опции...
    }


    Это означает, что классы, имеющие неймспейс MySuperApp\ будут находится в папке src. То есть, класс MySuperApp\First должен лежать прямо в папке src, а класс MySuperApp\Test\Second в папке src/Test. Надеюсь, понятно.

    Теперь, нам нужно выложить свой проект на гитхаб. Для этого, создаем там репозиторий и пушим файлы проекта.

    Далее, переходим на сайт packagist.com, регистрируемся там. В настройках профиля следуем инструкциям и привязываем аккаунт к github'у. Переходим во вкладку submit, вставляем в инпут ссылку на наш github репозиторий, жмем check (В этот момент packagist проверит, что данный репозиторий принадлежит именно нам), затем, снова check, чтобы подтвердить наш выбор. Вот, собственно, и все! Осталось прикрутить автообновление пакета. Информация об этом тоже есть на сайте.
    Ответ написан
    Комментировать
  • Как правильно передавать и сохранять данные между классами?

    @D3lphi
    Передавать объект в конструктор, как вариант, через сеттеры. Если эти данные нужны только в этом методе - передавать, непосредственно, в виде аргумента, очевидно. Прочитайте про паттерн Внедрение зависимостей (Это для хранения объектов). Его сейчас используют чуть ли не на каждом шагу.

    Не скажется ли это на производительности, если будет много вызовов?


    ООП - это всегда медленнее, чем НЕ ООП. Большое количество объектов тормозят систему. Объектно ориентированный подход используют не ради увеличения производительности, а ради улучшения рсширяемости и поддерживаемости кода.
    Ответ написан
    2 комментария
  • Что значит "!" в php?

    @D3lphi
    Логическое отрицание. Меняет значение булевого выражение на противоположное.
    var_dump(!true); // false
    var_dump(!false); // true
    Ответ написан
    Комментировать
  • Как отделить важные данные от конфигов?

    @D3lphi
    Для этого есть замечательная библиотека - dotenv. Суть в том, что вы храните данные в отдельном файле .env, который добавляете в .gitignore. А в vcs коммитете файл .env.example, в котором присутствует только "скелет" параметров без значений. Тому, кто будет устанавливать ваше приложение будет необходимо переименовать файл .env.example в .env и заполнить необходимые опции. Значения из этого файла можно получить по средствам функции env(). Эту библиотеку, кстати, использует популярный php - фреймворк Laravel.
    Ответ написан
    5 комментариев
  • Существует ли удобный способ добавления записи (insert) в php mysqli?

    @D3lphi
    Если я правильно вас понял, это относится не к php, а к sql:
    INSERT INTO `table` (`column1`, `column3`) VALUES ('test', 'value')

    При таком запросе столбец column1 получит значение 'test', а столбец column3 - значение 'value'. Конечно же, вместо прямого подставления значений нужно использовать плейсхолдеры:
    INSERT INTO `table` (`column1`, `column3`) VALUES (?, ?)


    А можно и так:
    INSERT INTO `table` set `column1` = 'test', `column3` = 'value'
    Ответ написан
    1 комментарий
  • Какой фреймворк для php стоит изучать в 2017?

    @D3lphi
    Laravel - для сравнительно небольших проектов. Для которых важна скорость разработки.
    Symfony - для серьезных проектов, для которых важно качество и расширяемость. Symfony на порядок сложнее, нежели Laravel, но и архитектура у него "правильнее". Выбирая этот фреймворк вы получаете самую мощную ORM из тех, которые существуют в "мире PHP".

    Начинайте учить второй, а первый выучить после не составит труда.
    Ответ написан
    Комментировать
  • Кто обьяснит в чем фокус?

    @D3lphi
    При сравнении, php приведет типы. Так как первые символы в строке - это не цифры, то строка приведется к 0. Поэтому получится, что 0 == 0. А если бы, например, у вас было бы выражение 0 == '73all', то оно бы уже было равно false, так как первые символы в строке - цифры, произошло бы приведение типов и, в результате сравнение было бы таким 0 == 73. Для того, чтобы сказать языку, что НЕ НУЖНО приводить типы, необходимо использовать строгое сравнение: 0 === 'all'. Вот такое выражение уже будет равно false.
    Ответ написан
    Комментировать
  • Как отправить сообщение с сайта на почту?

    @D3lphi
    <?php
    
    // mail('example@example.com', 'Заголовок', 'Текст письма');
    if (isset($_POST['send'])) {
       mail($_POST['email'], 'Заказа с сайта example.com', $_POST['text']);
    }
    
    ?>
    
    <form method="POST">
       <input type="email" name="email">
       <input type="text" name="text">
       <input type="submit" name="send">
    </form>

    Письма отправленные с помощью функции mail() очень часто блокируются почтовыми сервисами, ибо у таких писем, по сути, нет автора. Поэтому, необходимо использовать отправку писем по протоколу smtp. Для упрощения этой процедуры я рекомендую библиотеку PHPMailer (https://github.com/PHPMailer/PHPMailer ).
    Ответ написан
    5 комментариев
  • Какой это формат вывода массива?

    @D3lphi
    Не похож, это он и есть.
    Ответ написан
    Комментировать
  • Почему конструктор класса возвращает ошибку?

    @D3lphi
    У вас аргумент $login не имеет значения по-умолчанию, то есть, обязателен. А вы не передаете его.
    Ответ написан
    4 комментария
  • Правильно ли я использую класс?

    @D3lphi
    public function setBoss($name)
      {
        $this->boss = $name;
      }


    В данном случае, от этого метода - сеттера нет никакой практической пользы, он не проверяет ничего, не возвращает объект, чтобы можно было производить вызовы методов цепочкой $obj->a()->b(); В данном случае, целесообразнее использовать свойство напрямую.

    Не нужно писать конструкции вот так:
    if (...)
    {
      //
    }

    Пишем так:
    if (...) {
      //
    }

    Это не относится к классам, методам и функциям (в них скобку нужно писать на отдельной строке). Про это все, кстати, написано в PSR. Выберите стиль именования методов, чтобы он был один на протяжении всего кода, а то у вас в одном месте camelCase, в другом - under_scope.

    if(file_put_contents($filename, $content))
        {
          return 'Отчет сохранен';
        }
        else
        {
          return 'Ошибка сохранения';
        }

    Не надо возвращать строку! Возвратите true или false. И запомните: если что-то не так, бросайте исключение!
    Ответ написан
  • Мини-сервис (первый опыт), как организовать взаимодействие PHP и JS (vanilla JS & jQuery)?

    @D3lphi
    Для spa удобно использовать js фреймворки. Самый легким (в том плане, что простой и быстрый) является vuejs (https://ru.vuejs.org/). Насчет php. Такой подход, кокой используете вы, конечно же, ошибочен. Реализуйте единую точку вход по средствам того, что будете "сливать" все входящие запросы на индексный файл, а он уже будет подключать необходимые файлы, разбираться, что делать в том или ином случае.
    Ответ написан
  • Как лучше поступить с авторизацией?

    @D3lphi
    Если у пользователя украсть куки, то тут уже ничего не спасет.
    Ответ написан
    Комментировать
  • Как закодировать php функцию?

    @D3lphi
    Такая вещь называется обфускацией кода. Проблема в том, что нормальные обфускаторы стоят денег.
    Ответ написан