Ответы пользователя по тегу PHP
  • Почему apache на ubuntu не показывает php ошибки?

    @MadridianFox
    Web-программист, многостаночник
    Надо в php.ini включить вывод ошибок. Смотрите в сторону display_errors и display_startup_errors
    Ответ написан
    Комментировать
  • Как вытащить значения из статичной функции?

    @MadridianFox
    Web-программист, многостаночник
    Что касается передачи функции с предзаполненными аргументами, то это похоже на каррирование, которое можно сделать через замыкание.
    Вызов статического метода ClassName::funcName() вернёт функцию, которую можно будет вызвать.
    class ClassName
    {
      
      function static funcName($param1, $param2)
      {
        return function() use($param1, $param2){
              mysqli_query("SELECT * FROM tablename WHERE name = $param1 AND id = $param2");
        }
      }
      function funcNameSecond()
      {
        $parametrizrd_func = ClassName::funcName("John", 1);
        $res = blablabla->cache($parametrizrd_func); 
      }
    }
    Ответ написан
    Комментировать
  • Php compressor namespace api?

    @MadridianFox
    Web-программист, многостаночник
    Попробуйте в конце неймспейса обратный слеш поставить. Экранированный, конечно же.
    Ответ написан
  • Как отладить header в php?

    @MadridianFox
    Web-программист, многостаночник
    Да. в консоли браузера вкладка Network обычно.
    Но тут и так видно что что-то не так. Какой именно заголовок вы хотите установить?
    Например редирект делается вот так
    header("Location: http://banana.com");
    У каждого заголовка есть название, а у вас его нет.
    Ответ написан
    Комментировать
  • Проблемы с сайтом после переноса в digital ocean?

    @MadridianFox
    Web-программист, многостаночник
    В конфиге php. Раньше у вас просто уровень вывода ошибок был не таким строгим, и попытки получить доступ к несуществующим элементам массива не отображались.
    Ответ написан
    Комментировать
  • Не могу передать $test1 с класса Test1 в Test2, «помогите» пожалуйста?

    @MadridianFox
    Web-программист, многостаночник
    Нельзя называть метод класса так же как класс, т.к. это устаревший синтаксис создания конструктора класса. Вместо этого надо конструктор всегда называть __construct.
    К приватным и защищённым полям класса нельзя обращаться снаружи. Либо делайте поле публичным, либо делайте т.н. геттер (getter) - метод, который отдаёт значение из этого поля.
    Во втором классе вы пытаетесь в поле этого класса положить значение из другого поля этого же класса, но в этом классе нет поля test1, это поле определено в первом классе.
    Объект класса - это коробка. Внутри коробки вы можете оперировать только тем что в ней лежит - полями класса, или же тем, что было в эту коробку засунуто - через аргументы методов.
    // файл Test1.php
    class Test1
    {
        private $test1; // приватное поле. к нему нельзя просто так обратиться
        public function __construct()
        {
            $this->test1 = 5;
        }
    
        public fucntion getTest1()
        {
            return $this->test1;
        }
    }
    // файл Test2.php
    require "Test1.php";
    
    class Test2 extends Test1
    {
        private $test2;
        public function __construct(Test1 $test1)
        {
           $this->test2 = $test1->getTest1();
           // echo $this->test2; // сайд-эффекты в конструкторе крайне нежелательны
        }
    
        public fucntion doIt()
        {
            echo $this->test2;
        }
    }
    $test1 = new Test1()
    $test2 = new Test2($test1);
    $test2->doIt();
    Ответ написан
    Комментировать
  • Как подключить функцию PHP foreach в отдельный файл?

    @MadridianFox
    Web-программист, многостаночник
    function getDeliveryArr(){
        return explode(",", $product['delivery']);
    }
    
    $items = getDeliveryArr();
    ?>
    <?if(count($items)):?>
        <label>Доставка:</label>
        <?foreach($items as $item):?>
            <span> Значение <?=$item?> </span>
        <?endforeach?>
    <?else:?>
        <b>Список пуст</b>
    <?endif?>
    Ответ написан
  • Как получить доступ к свойству массива объектов?

    @MadridianFox
    Web-программист, многостаночник
    Можно, конечно, пойти на изврат с фигурными скобками, но лучше просто добавьте alias в запрос и не парьтесь.
    SELECT COUNT(user_id) as `count` ...
    var_dump($results->count);
    Ответ написан
  • Xdebug remote server, phpstorm?

    @MadridianFox
    Web-программист, многостаночник
    Тут надо поиграться с настройками xdebug в php.ini. Надо:
    • Включить постоятнную отладку (не по триггеру)
    • Задать статический ip компьютера разработчика (а не connect_back)

    Ну и я думаю можно как-нибудь настроить phpStorm чтобы он игнорировал все отладочные подключения кроме нужного вам файла.
    Останется только ждать, когда кто-то зайдёт на нужную вам страницу.
    Но это будет странно, т.к. реальный пользователь столкнётся с тем, что сайт - хоп, и перестал грузиться т.к. шторм, поймав отладочное соединение пошлёт в него брейкпоинт.

    Однако. Это странно, причём вдвойне.
    Во-первых, сайт должен быть в двух экземплярах - один для разработки и один для пользователей. Тот, который для пользователей не должен иметь xdebug, т.к. он серьёзно влияет на производительность.
    Во-вторых, дебажить запросы от пользователей? Что? Зачем?
    Ответ написан
  • Как выучить/понять ООП паттерны?

    @MadridianFox
    Web-программист, многостаночник
    Не надо учить паттерны. Надо понимать ООП. Чтобы понимать ООП, надо знать зачем оно нужно. Методология/парадигма - это подход к решению проблемы.
    Значит ООП (а это парадигма) решает проблему.
    Эту проблему необходимо ощутить на себе. Для этого нужна практика.

    Мэт Задстра - отличный выбор для начала. Сам с него начинал.
    Однако перед этим надо набить шишки. Только тогда, то, что описано в книге, будет воспринято как полезная информация.
    Перед тем, как прочитать эту книгу я два года говнокодил.
    Прочитал - зашло, подумал что всё понял.
    Прочитал Фаулера. Ничего не понял.
    Через полгода снова прочитал Фаулера. Подумал что теперь то уж точно всё понял.
    Ан-нет.
    Сейчас придерживаюсь взглядов на ООП Егора Бугаенко. Думаю что теперь то уж точно всё знаю.
    Посмотрим что будет дальше.
    Ответ написан
    2 комментария
  • Как лучше сделать функцию Запомнить меня?

    @MadridianFox
    Web-программист, многостаночник
    Привязка текущей сессии с браузеру в PHP происходит как раз через куки. Т.е. это механизм, который по умолчанию используется на миллионах сайтов.
    Да, он не идеален. Любой, кто сможет перехватить то что браузер пользователя отправляет серверу, может взять эту куку, вставить себе и зайти на сайт от лица того пользователя.
    Спасает https, который шифрует передаваемые данные.

    все эти "запомнить меня" просто вешают куку. В ней обычно токен - просто уникальная строка для пользователя. Т.е. ни логин ни пароль, именно что случайная уникальная строка.
    Когда сервер видит токен, он без вопросов аутентифицирует пользователя.
    Так работают и различные api соцсетей и различных сервисов. Никто не боится что кто-то может перехватить токен, ибо во-первых https, а во-вторых, если таки могут перехватить, то что ни передавай - всё перехватят. А не передавать вовсе невозможно.
    Ответ написан
    1 комментарий
  • Почемеу вызов наследуемого класса с обращением к абстрактному методу приводитк к ошибке памяти?

    @MadridianFox
    Web-программист, многостаночник
    Потому что рекурсия получается. Класс D в методе r() вызывает свой метод b() который унаследован от класса B и который в свою очередь вызывает метод r() и так по кругу.
    Ответ написан
    1 комментарий
  • В чем проблема добавления в BD?

    @MadridianFox
    Web-программист, многостаночник
    А вот и буду кидаться палками, ловите сразу 4 =)
    1) Вы хотите отправить ajax запрос, но вы делаете форму и работающую (button type="submit") кнопку отправки. Не надо так. Либо форма, либо ajax.
    2) JS код, который вешает обработчик на кнопку располагается выше самой кнопки и не обёрнут в $(document).ready. Т.е. в тот момент когда исполняется этот код, самой кнопки ещё нет, и обработчик нажатия не вешается.
    3) обработчик отправки формы реагирует на isset($_POST['button-reg']), однако когда вы делаете ajax запрос, вы не передаёте параметр "button-reg".
    4) расширение php, которое позволяет вызывать функции mysql_*** устарело. Используйте mysqli или PDO
    Ответ написан
    8 комментариев
  • Возможно ли автоматически парсить информацию не через cron?

    @MadridianFox
    Web-программист, многостаночник
    Ну если вы можете модифицировать сайт, то надо дописать код, так чтобы при публикации статьи она ещё и публиковалась вконтакте.

    Если не можете изменить код сайта - то никак. Остаётся только периодически обращаться к сайту и если там что-то появляется то парсить.
    Ответ написан
    Комментировать
  • Как сделать регулярку более сторогой?

    @MadridianFox
    Web-программист, многостаночник
    Надо добавить маркеры начала и окончания строки. Вот так:
    preg_match("/^update\/[0-9]+\/[a-z]+$/", $input_line, $output_array);

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

    @MadridianFox
    Web-программист, многостаночник
    Всё просто - не надо в функции проверки прав печатать ответ.
    Более того, функция проверки прав не должна ничего знать про то - под аяксом она запускается или нет. Она должна просто проверять и возвращать результат (bool, текст ошибки, код ошибки, что угодно), а уже где-то в контроллере (это такое место, где вы получаете данные http запроса, решаете что делать и формируете http ответ) вы должны превращать результат в ответ.
    Ответ написан
  • Namespace в php - как использовать?

    @MadridianFox
    Web-программист, многостаночник
    Сами по себе неймспейсы для подключения файлов не предназначены. Это только способ называть классы короткими именами и разрешать конфликты, если два разных класса имеют одинаковое название.
    Но очень распространён (на уровне стандарта языка) подход, когда функция автозагрузки использует неймспейс как путь до файла с классом.
    Так что смотрите в сторону PSR-4 и функции spl_autoload_register.
    Ответ написан
    Комментировать
  • Знакомый говорит что неправильно. Правильно ли?

    @MadridianFox
    Web-программист, многостаночник
    Первое что бросается в глаза - это то как вы работаете с элементами массивов. Мало того, что вы ключи массива пишете не как строки, а как неинициализированные константы, так ещё и полученное значение в кавычки берёте. Зачем?
    А вообще вопрос очень странный. Надо давать некоторое пояснение - что именно в этом коде, для вас или вашего знакомого, является неправильным.
    Ответ написан
    Комментировать
  • Как "активировать" часть php кода, если пользователь видит блок, в котором находится содержимое этого кода?

    @MadridianFox
    Web-программист, многостаночник
    Важно понимать, что сначала отрабатывает PHP, который формирует и отдаёт html, а уже потом. Браузер, приняв этот html, рендерит его, ну и если у чего-то там display:none, то не показывает этого.
    Вам надо сразу не генерировать этот div. Как это сделать зависит от того кода который у вас уже есть.
    Ответ написан
  • Как разбить запись в cvs из mySQL на столбики в Excel'e?

    @MadridianFox
    Web-программист, многостаночник
    Нади использовать не запятые, а точки с запятой.
    Ответ написан
    3 комментария