Создание сайта с базой данных
Здравствуйте, пикабушники! Если среди Вас есть программисты, то хотел бы попросить совета. Хочу создать сайт для своей работы, где будут таблицы с данными, куда зарегистрированные аккаунты смогут вносить изменения. И такой, что я сам смогу вносить изменения, но у меня будет больше прав и возможностей. На каком языке лучше написать? Я посмотрел, что именно для работы с базой данных подходит phpmyadmin. Пробовал немного написать на html, css, js, но судя по постам в интернете и по личному опыту эта группа не сильно подойдет для базы данных, так сказать вызовет больше трудностей кажется.
Какими будут Ваши советы?
Работа с UART в LINUX + PHP
требуется помощь лиги IT
Делаю небольшую поделку - проект умного дома.
В основе ардуино + одноплатник orangepi zero
на одноплатнике стоит armbian и поднят httl сервер.
на сервере страничка с кодом ajax по таймеру делает запрос через php и соответственно получает ответ. все работает до тех пор, пока есть ответ.
если ответа нет, то на третьем-четвертом запросе сервер наглухо виснет.
запрос делаю так (пробовал все три варианта):
$bufft = fgets($fp,7);
//$bufft = fread($fp,7);
//$bufft = stream_get_line($fp,7); + //stream_set_timeout($fp, 0, 15000);
(где: $filename = "/dev/ttyS1"; //порт $fp = fopen($filename, "w+"); )
Насколько я понимаю, проблема в том, что при отсутствии ответа в буфере /dev/ttyS1 нет вообще ничего, те нет в файле даже символа конца строки (файла). и считывание идет по бесконечному циклу, пока не повесит процесс.
Экспериментально установлено, что при запросе $bufft = fgets($fp,1); , те при попытке считать только первый символ строки ничего не виснет, но возвращается строка из 0 символов. те полностью пустая.
Посоветуйте, как перед считыванием буфера определить, что он пуст (при попытке считывания он стирается) или как считывать пустой буфер/dev/ttyS1 без последующего зависания?
Как ChatGPT 3.5 помог мне написать шорткод для Вордпресс?
Немного истории... Короче говоря есть страница к примеру: "котята". И есть несколько дочерних: белые серые и т.д. У меня на 1 из сайтов таких, дочерних страниц 201. Параллельно есть таксономии привязанные к типу поста "котята" который не индексируется. Он нужен только для распределения котят по категориям с последующим выводом на страницах в собственном шаблоне и не больше.
Так вот, после публикации и распределения условных "котят" по категориям, нужно было выводить их на соответствующих страницах.
Маленькое уточнение! Я не супер в PHP но базовое понятие функций движка Wordpress есть, так что как поставить задачу чату проблем не возникло. Почему решил написать эту статью спросите вы? Отвечаю: по началу трудно всем и может именно эта статья даст толчок некоторым новичкам, так как сам процесс, очень интересен и познавателен, и ChatGPT объясняет что, где и за что отвечает и куда это все совать. Гуру вам этого не скажут бесплатно;)
Для мотивации конечный результат на фронтенде... https://vse-mikrozaymy.ru/summy/
Мне нужно было вывести количество из каждой категории (циферки что в кружке). Это пример. Так можно сделать для любого типа поста к примеру (товаров), чтобы не нагружать движок плагином WOOCOMERCE и т.д.
Итак моя переписка с ChatGPT и примерами кода (может кому пригодится)
Я. Привет! Сможешь написать шорткод для вордпресс?
ChatGPT. Привет! Конечно, я могу помочь с написанием шорткода для WordPress. Что именно вы хотели бы добавить с помощью шорткода?
Я. У меня есть taxonomy=summ, в ней есть есть tag_ID=253, tag_ID=242 и т.д. Нужно написать шорткод для подсчета количества постов, привязанных к определенным id или slug в таксономии.
ChatGPT. Конечно, вот пример шорткода для подсчета количества постов по заданным tag_ID или slug в таксономии summ:
function count_posts_in_taxonomy_shortcode($atts) { // Парсим атрибуты шорткода $atts = shortcode_atts(array( 'tag_id' => '', 'slug' => '', ), $atts, 'count_posts_in_taxonomy'); // Параметры запроса $args = array( 'post_type' => 'post', // Укажите нужный тип записи, если это не статьи 'post_status' => 'publish', 'tax_query' => array( array( 'taxonomy' => 'summ', 'field' => is_numeric($atts['tag_id']) ? 'id' : 'slug', 'terms' => $atts['tag_id'] ? $atts['tag_id'] : $atts['slug'], ), ), ); // Получаем количество постов $post_count = count(get_posts($args)); // Возвращаем результат return $post_count; } // Регистрируем шорткод add_shortcode('count_posts_in_taxonomy', 'count_posts_in_taxonomy_shortcode');
Как использовать шорткод:
Если вы хотите подсчитать количество постов для tag_ID=253, используйте [count_posts_in_taxonomy tag_id="253"].
Если вы хотите подсчитать количество постов для slug='example', используйте [count_posts_in_taxonomy slug="example"].
Убедитесь, что код добавлен в файл functions.php вашей темы или в плагин для пользовательского кода.
Я. Спасибо! Ты гений!
ChatGPT. Пожалуйста! Рад был помочь! Если у вас есть ещё вопросы или нужна дополнительная помощь, не стесняйтесь спрашивать. Удачи с вашим проектом WordPress!
Я. А можно как-то укоротить код
ChatGPT. Конечно, можно упростить код, используя более компактные конструкции. Вот более краткая версия:
function count_posts_in_taxonomy_shortcode($atts) { $atts = shortcode_atts(['tag_id' => '', 'slug' => ''], $atts, 'count_posts_in_taxonomy'); $args = [ 'post_type' => 'post', 'post_status' => 'publish', 'tax_query' => [[ 'taxonomy' => 'summ', 'field' => is_numeric($atts['tag_id']) ? 'id' : 'slug', 'terms' => $atts['tag_id'] ?: $atts['slug'], ]], ]; return count(get_posts($args)); } add_shortcode('count_posts_in_taxonomy', 'count_posts_in_taxonomy_shortcode');
В этой версии я использовал более сжатый синтаксис массивов и оператор условия с тернарным оператором для укорачивания кода. Все функциональные части остаются теми же. Если у вас есть какие-либо вопросы или нужны дополнительные пояснения, дайте знать!
Я. Не работает! Выводит правильно только первые 2 категории а в остальных выводит цифру 5
ChatGPT. Приношу извинения за это недоразумение. Проблема, вероятно, связана с тем, что в запросе используется параметр terms, который ожидает одно значение. Если вам нужно передать несколько значений, вы можете использовать IN вместо конкретного значения. Вот обновленный код, который должен решить проблему:
function count_posts_in_taxonomy_shortcode($atts) { $atts = shortcode_atts(['tag_id' => '', 'slug' => ''], $atts, 'count_posts_in_taxonomy'); $terms = $atts['tag_id'] ? (array) $atts['tag_id'] : [$atts['slug']]; $args = [ 'post_type' => 'post', 'post_status' => 'publish', 'tax_query' => [[ 'taxonomy' => 'summ', 'field' => is_numeric($atts['tag_id']) ? 'id' : 'slug', 'terms' => $terms, ]], ]; return count(get_posts($args)); } add_shortcode('count_posts_in_taxonomy', 'count_posts_in_taxonomy_shortcode');
Теперь код преобразует переданные значения в массив и использует их в параметре terms запроса. Надеюсь, это решит проблему. Если у вас есть ещё вопросы или проблемы, дайте знать!
Я. Проблема та же. Я использую несколько шорткодов на 1 странице.
ChatGPT. Понял, проблема может быть связана с тем, что запросы могут взаимодействовать друг с другом, особенно если они используют общие ресурсы. Давайте попробуем улучшить код для более надежного использования в множественных вызовах:
function count_posts_in_taxonomy_shortcode($atts) { $atts = shortcode_atts(['tag_id' => '', 'slug' => ''], $atts, 'count_posts_in_taxonomy'); $tax $field = is_numeric($atts['tag_id']) ? 'id' : 'slug'; $terms = $atts['tag_id'] ? [(int) $atts['tag_id']] : [$atts['slug']]; $args = [ 'post_type' => 'post', 'post_status' => 'publish', 'tax_query' => [ [ 'taxonomy' => $taxonomy, 'field' => $field, 'terms' => $terms, ], ], ]; $query = new WP_Query($args); return $query->found_posts; } add_shortcode('count_posts_in_taxonomy', 'count_posts_in_taxonomy_shortcode');
В этой версии я заменил get_posts на WP_Query, чтобы иметь больше контроля над запросом. Также добавлены некоторые дополнительные параметры, чтобы убедиться, что каждый вызов шорткода работает независимо. Пожалуйста, протестируйте этот вариант и дайте знать, работает ли он в вашем случае.
Я. Вот теперь точно красавчик!!! Все заработало! Спасибо большущее!
ChatGPT. Отлично! Рад был помочь! Если у вас возникнут ещё вопросы или вам потребуется дополнительная помощь, не стесняйтесь обращаться. Удачи в вашем проекте!
Вот такой результат! Что хочется сказать в завершение: результат каждого зависит только от его фантазий так что однозначно не нужно боятся экспериментировать. Я бы и сам написал этот код, но пришлось бы потерять в 5 раз больше времени и каждый раз перечитывать кодекс WP или WP КАМУ. Спасибо за внимание! Деление опытом и идеи приветствуются!
Minibb кто использует этот скрипт?
Отзовитесь, нужна консультация и не только...
Есть довольно старый скрипт форума, с модулем. Нужен модуль, но трудность в том что скрипт на допотопном php 5.3 и современные локальные серверы довольно непросто установить на win 10 чтобы все правильно работало.
Обратное статическое связывание (Reverse Static Binding) в PHP
Обратное статическое связывание (Reverse Static Binding) в PHP - это концепция, которая позволяет вызывать статические методы класса на основе контекста, в котором они были вызваны, а не на основе класса, в котором они были определены.
До введения обратного статического связывания в PHP 5.3, статические методы всегда вызывались в контексте класса, в котором они были определены. Это означало, что при наследовании классов вызов статического метода из дочернего класса приводил к вызову метода из родительского класса.
Однако с использованием обратного статического связывания можно вызывать статические методы из дочернего класса в контексте этого дочернего класса.
Для использования обратного статического связывания в PHP используется ключевое слово static. Рассмотрим пример:
class ParentClass {
public static function whoAmI() {
echo "ParentClass";
echo static::class;
}
}
class ChildClass extends ParentClass {
public static function whoAmI() {
echo "ChildClass";
echo static::class;
}
}
ChildClass::whoAmI(); // Выведет "ChildClass ChildClass"
В этом примере у нас есть два класса - ParentClass и ChildClass. Оба класса имеют статический метод whoAmI(). В родительском классе ParentClass метод выводит строку "ParentClass" и имя класса, полученное с помощью static::class. В дочернем классе ChildClass метод выводит строку "ChildClass" и имя класса, также полученное с помощью static::class.
При вызове статического метода whoAmI() из класса ChildClass мы получаем вывод "ChildClass ChildClass". Это происходит потому, что обратное статическое связывание позволяет вызвать метод из дочернего класса в контексте этого дочернего класса, а не родительского класса.
Обратное статическое связывание в PHP полезно, когда вам нужно вызвать статический метод в контексте класса, в котором он был вызван. Это упрощает работу с наследованием и позволяет более гибко использовать статические методы в различных ситуациях.
Функция в PHP
Функция в PHP - это блок кода, который выполняет определенную задачу и может быть вызван из другого места программы. Функции в PHP позволяют упорядочить код, повторно использовать его и сделать его более модульным.
Основные особенности функций в PHP:
1. Объявление функции: Функция объявляется с помощью ключевого слова function, за которым следует имя функции и список параметров в круглых скобках. Например:
function sayHello() {
echo "Hello, world!";
}
2. Вызов функции: Функцию можно вызывать в любом месте программы, указав ее имя и передав необходимые аргументы (если они есть). Например:
sayHello(); // Выведет "Hello, world!"
3. Параметры функции: Функции могут принимать параметры, которые используются внутри функции. Параметры указываются в круглых скобках при объявлении функции. Например:
function sayHelloTo($name) {
echo "Hello, " . $name . "!";
}
sayHelloTo("John"); // Выведет "Hello, John!"
4. Возвращаемое значение: Функции могут возвращать значение с помощью ключевого слова return. Например:
function add($a, $b) {
return $a + $b;
}
$result = add(5, 3); // Результат будет равен 8
5. Локальные и глобальные переменные: Внутри функции можно объявлять локальные переменные, которые видны только внутри функции. Если вы хотите использовать глобальную переменную внутри функции, нужно использовать ключевое слово global.
$name = "John"; // Глобальная переменная
function sayHello() {
global $name; // Использование глобальной переменной
echo "Hello, " . $name . "!";
}
sayHello(); // Выведет "Hello, John!"
6. Возможность передачи параметров по ссылке: В PHP параметры функции могут передаваться по значению (по умолчанию) или по ссылке. При передаче параметра по ссылке изменения внутри функции будут отражаться на переданной переменной.
function increment(&$number) {
$number++;
}
$value = 5;
increment($value);
echo $value; // Выведет "6"
7. Рекурсия: Функция в PHP может вызывать сама себя. Это называется рекурсией и позволяет решать задачи, которые могут быть разбиты на более простые подзадачи.
function factorial($n) {
if ($n <= 1) {
return 1;
} else {
return $n * factorial($n - 1);
}
}
$result = factorial(5); // Результат будет равен 120
Функции - важная концепция в PHP и позволяют писать более организованный и масштабируемый код. Они облегчают повторное использование кода, упрощают отладку и улучшают читаемость программы.