Задать вопрос
Профиль пользователя заблокирован сроком с 10 апреля 2022 г. и навсегда по причине: систематические нарушения правил сервиса
Ответы пользователя по тегу PHP
  • PDO/MySQLi и array в запросе?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    • PDO -phpfaq.ru/pdo#in
    • Mysqli - пол-экрана текста, так что без враппера совсем грустно.

    Зато с враппером - всего дна строчка
    $data = $db->getAll("SELECT * FROM news WHERE id IN (?a)", $json);
    Ответ написан
    Комментировать
  • Как добавить изображение в базу данных, не сохраняя его в директорию?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Изображения. В базу. Добавлять. Не нужно.
    Ответ написан
  • PHP ООП объект. Как сделать выборку объектов?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    На самом деле тут всё сложно.
    В идеале, все должно быть так:

    В массиве объектов "таскать" за собой полное содержание статей

    Потому что объект и должен, по идее, содержать все свойства сущности "Статья".

    Но все эти прекрасные теории разбиваются о суровую действительность. Главных камня преткновения два:
    1. Заведомая условность маппинга записи из таблицы БД на объект в программе.
    2. Не бесконечная мощность компьютера, которая и заставляет нас не таскать текст статьи там, где нужно вывест только заголовок.

    Поэтому мы идем на всяческие ухищрения. В частности, мы договариваемя сами с собой, что наш объект "статья" - это отображение записи из таблицы. То есть, он жёстко привязан к структуре таблицы в БД. И дальше мы делаем себе ещё одно послабление - при инициализации объекта мы сожем указать, что нам нужен только заголовок. И тогда код создаст объект, то у него будет заполнено только одно свойство.

    Соответственно, ответ на первый вопрос - массив объектов, но урезанных, с одним заполненным свойством!

    Ответ на второй вопрос кроется в том же маппинге: Описывая свой объект как отображение таблицы в БД, мы можем описать и связи этой таблицы! И тогда наш объект сможет автоматически "подтягивать" связанные данные, если мы к ним обратимся.
    Ответ написан
  • Почему скрипт не видит подключение MySQLi?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Очень странно.
    В приведенном примере все должно работать.

    Такую ошибку будет писать, если к $db идет обращение из функции.
    Ответ написан
  • В какой момент обновлять данные в БД mysql?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В момент записи.

    База данных - не текстовый файл. И совсем не обязательно удалять объявление физически, чтобы оно больше не показывалась. В объявлении может быть такое поле как "последний день показа". И при выборке показывать только те объявления, у которых эта дата больше либо равна текущей.
    Ответ написан
    Комментировать
  • Почему не работает SafeMySQL?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Нужно убрать строчку $mysqli = new SafeMysql("localhost", "root", "1", "ai");
    и $db = new SafeMySQL(); - тоже лишняя.

    Кстати, я исльно сомневаюсь по поводу кодировки. Я бы поставил utf8 - хуже не будет, а вот вот кучи проблем можно будет избежать
    Ответ написан
  • PDO. Чтения из нескольких баз. 2 подключения к одному хосту или одно?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Да, будет.
    Нет, не критично.

    Любой инстанс ПДО - это всегда отдельное новое подключение к БД, не важно, с к одной и той же, или к разным. В теории - это лишняя нагрузка на базу и желательно двух соединений избегать. Но если это не хайлоад, то большой проблемы не будет. Если хавйлоад, то надо осваивать современные технологии и не шарашить SQL прямо в коде, а использовать какую-нибудь интерллектуальную технологию, которая будет составлять запросы сама, и в том числе подставлять имя желаемой базы, беря его из настроек.
    Ответ написан
    Комментировать
  • Как при закрытии окна браузера сбрасывать значение в переменной?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Несмотря на неграмотный заголовок (в момнт, когда пользователь закрывает браузер, никаких переменных уже нету, да и сам РНР скрипт давно умер), сама задача решается очень просто - стандартный механизм сессий идеально для неё подходит.

    Но мне бы такое поведение показалось неудобным.
    Было бы лучше, если бы введенные пользователем данные записывались в БД, и выводились при следующем заходе на сайт. А сборсить их всегда можно отдельной кнопкой
    Ответ написан
    1 комментарий
  • Как решить проблемы с кодировкой у одной буквы?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Неважно, одна это буква, или 10. Кодировка соединения с БД настроена неверно.
    Нужно убедиться, что
    - кодировка таблиц действительно utf8
    - кодировка соединения(задается в mysql(i)_set_charset() или в DSN) - utf8
    - кодировка страниц сайта - utf-8
    Ответ написан
    Комментировать
  • Кривое сохранение символов в MySql через PHP. Что делать?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Скорее всего, причина в повальной болезни современной школоты: фатальном неумении отслеживать причинно-следственные связи. Например, если при просмотре выводимых из БД данных, они отражаются неправильно, то делается вывод о том, что они записались неправильно. Или, как вариант - аффтар сам же совершает в коде какие-то глубокомысленные телодвижения, не понимая их смысла - просто потому что точно так же пацаны подсказали, а он тупо скопировал - и они-то как раз и портят данные.

    Но в любом случае - проблема в неумении разделить процесс на этапы, и проконтролировать данные на каждом. Чтобы впоследстви хотя бы задать адекватный вопрос, типа "При передаче данных из браузера данные портятся". Или "при записи в БД данные портятся". Вместо этого мы получаем беспомощное "С данными что-то происходит, но что именно и в какой момент - ниняю".
    Ответ написан
  • Не могу понять, где ошибка в коде?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Вам сюда.
    Ответ написан
    Комментировать
  • Плохая ли реализация шаблонизации и снижет ли она производительность PHP проекта вообщем?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Как всегда, невежество рождает чудовищные идеи и выливается в адские проекты. Начнем с идей

    без всяких тяжелых Smarty и Twig
    Открою тебе маленькую тайну. "Smarty и Twig" НЕ тяжелые.

    PHP сам по себе шаблонизатор
    Это правда. Но ты-то не используешь РНР, а используешь свой самопал с реплейсами.

    Выполняя все тяжелые скрипты в массиве, влияет ли это на производительность?
    ВООБЩЕ НИКАК. Понятие "В массиве" ни малейшего отношения к производительности не имеет. Ну то есть вообще никакого.

    при прохождение по массиву уже использовать eval()
    Поздравляю, твой сайт взломали!

    У меня складывается определенное чувство, что я делаю плохо
    Угадал! Только не в том смысле, в котором ты думал. Проблема в другом.

    Твоя поделка - вообще не шаблонизатор.

    Шаблонизатор - это когда ВЕСЬ HTML пишется в шаблоне. Читай по буквам - В-Е-С-Ь. Это означает, что в коде контроллера не должно быть написано ни одного тега. А при твоей системе у тебя половина HTML будет в контроллере. Зачет не сдан, садись, два.
    Ответ написан
  • Как вывести с mysql больше одной строки через mysql_fetch_array?

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

    Ну ладно - вопрос. От человека, который массив в первый раз в жизни увидел. Можно понять.

    НО ОТВЕТЫ!!! "Тут какие-то заборы! Коровники! Мама, мы в аду! Мы в аду, мама!"
    Ответ написан
    Комментировать
  • Возможно написать бота, участвующего в акциях?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Возможно не пытаться украсть то что тебе не принадлежит, а заняться честным трудом.

    При тех же трудозатратах можно получить большую, а - главное - честную прибыль.
    Ответ написан
    Комментировать
  • Что мне использовать: mysql или mysqli?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    НИ ТО НИ ДРУГОЕ

    Впечатления: это ад, посаны!

    Истину глаголешь.
    Потому что mysqli не предназначена для использования в коде напрямую. А только через более высокоуровневый враппер. Сама по себе это низкоуровневая либа, которая обеспечивает доступ ко всем самым мелким настройкам драйвера. Именно поэтому она так многословна и неудобна. И именно поэтому надо на её основе обязательно лепить враппер.

    С другой стороны, старая mysql - ТОЖЕ низкоуровневая либа, и тоже НЕ ДОЛЖНА использоваться в коде напрямую, а только как основа для враппера. К тому же она официально устарела.

    В общем, у тебя два варианта:
    • Либо использовать PDO, который является более высокоуровневой либой-недовраппером. Как пользоваться, написано здесь: Как работать с PDO?
    • Либо, если хочешь все-таки базироваться на mysqli - использовать готовый враппер SafeMySQL, с которым все ужасы уйдут в прошлое, а код сократится в 10 раз
    А САМЫЙ лучший вариант - это перестать гонять запросы из кода напрямую, а вместо этого освоить уже какой-нибудь фреймворк и использовать для работы с базой ORM
    Ответ написан
    2 комментария
  • Почему не выполняется запрос mysqli?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Проблема в пихании в код разных умных слов без понимания их смысла.
    Если убрать из кода слово MYSQLI_USE_RESULT, то волшебным образом ошибка исчезнет.
    Впрочем, я должен признать, что сермяжная правда в двух других ответах есть. Если последовать моему же совету, и использовать prepare/execute вместо query (поскольку эта парочка используе USE_RESULT без вариантов), то как раз и придется либо выбирать все данные, которые вернул запрос, либо освобождать ресурс через free(), либо перед выборкой дергать store_result().
    Но - повторюсь - в текущем коде этот параметр не имеет смысла и в то же время является причиной всех бед.

    Но проблемы этого кода на этом только начнутся.

    Во-первых, НИКОГДА больше пиши так: die(mysqli_error($mysqli)); а то станешь козленочком и тебя заберут в армию.
    Вместо die надо писать trigger_error()

    Во-вторых, НИКОГДА не подставляй переменные напрямую в строку запроса. Передавать данные надо только через плейсхолдеры. Если родной механизм слешком сложный, то можешь воспользоваться библиотекой phpfaq.ru/safemysql и код получится таким.
    $exists = $db->getOne("SELECT 1 FROM users WHERE social_id=?s",$social_id);
    if($exists){
    	//тут устанавливаются куки
    }else{
    	$db->query("INSERT INTO users (social_id) VALUES (?s)", $social_id); 
    }

    (выводить бессмысленные okay или oops не нужно)
    Ответ написан
    7 комментариев
  • Почему не выполняется запрос mysqli?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Дубль. Афтар не осилил отредактировать старый вопрос, и задал новый, более актуальный.
    Ответ написан
  • Как реализовать передачу файлов со сканера в PHP через FTP?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    "реализация FTP сервера на PHP" - это бессмыслица. Что-то вроде "Ищу реализацию дорожной разметки на светофорах".
    FTP сервер не надо реализовывать. Ни на РНР, ни на чем-то ещё. Он уже есть, в составе любого веб-сервера.
    То есть проблема отправки на сервер со сканера не стоит. Надо только настроить учетную запись на сервере и ввести данные в сканер.

    Всякие окошки с превьюшками - это ерунда, интерфейс. Можно сделать так, можно иначе. Это не принципиальный вопрос. Юзер может хоть сам окошко обновлять руками.

    Самое сложное в описываемой воображаемой задаче - это кнопка "Сканировать". поскольку никаких видимых каналов связи сайт -> сканер, в описании не наблюдается. Если изменить задачу на "показать отсканированные файлы", то все упрощается:
    - человек идет к сканеру и сканирует то что ему надо.
    - после этого идет к сайту, и нажимает "показать файлы"
    - после этого любой готовый скрипт фотогалереи показывает ему его файлы в каких угодно видах.
    Ответ написан
    Комментировать
  • Формуляр. Не работает проверка capcha. Проверка валидности?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Вам сюда.
    Ответ написан
    Комментировать