Задать вопрос
Ответы пользователя по тегу PHP
  • Как изменить данные в SQL таблице?

    @alexalexes
    Используйте подготовленные запросы, чтобы вставлять параметры в текст запроса.
    $stmt = mysqli_prepare($link, 'UPDATE your_table SET name = ? where ID = ?');
    mysqli_stmt_bind_param($stmt, 'si', $name, $id);
    mysqli_stmt_execute($stmt);
    echo "строк изменено: ".mysqli_stmt_affected_rows($stmt);
    Ответ написан
    Комментировать
  • Как правильно объединить две таблицы?

    @alexalexes
    в гугле решения найти не смог

    sql join

    redbeanphp

    Научитесь сначала использовать базовый набор функций работы с СУБД:
    либо mysqli, либо PDO. Не нужно использовать ORM-ки на начальном этапе обучения.
    Ответ написан
    1 комментарий
  • Как кешировать rss на php?

    @alexalexes
    Вариант 1.
    Использовать cron с настроенным расписанием, чтобы каждые 30 мин выполнял ваш php скрипт, который будет делать запрос rss данных и сохранять локальный файл. Любые другие приложения читают только этот файл, но не делают запросы на его обновление.
    Вариант 2.
    Использовать этот скрипт в качестве подключаемого скрипта на вашем сайте с типичной конструкцией кеша:
    if(существует файл кеша и его время изменения меньше 30 мин)
    {
    // читать кеш
    }
    else
    {
     // запросить новые данные и записать файл
    }
    Ответ написан
    Комментировать
  • Как сделать отправку формы в телеграмм бота но и чтобы форма делала запрос?

    @alexalexes
    document.getElementById('tg').addEventListener('submit',function(e){

    Вместо события submit подпишитесь на событие click не на тег формы, а на кнопку.
    На эту кнопку.
    <button type="submit">Отправить</button>
    У кнопки уберите тип submit - вы же не хотите дергать классическую отправку формы через submit.
    Все отправки делайте через axios (внутри этой библиотеки используется ajax - что вам и требуется, что и так используется).
    Ответ написан
  • Нужно ли в таких случаях делать защиту от инъекций?

    @alexalexes
    Помимо наличия возможности использовать инъекции есть еще один момент.
    Если у вас форма на редактирование, то хорошо бы, чтобы она имела скрытое поле id той записи, которую редактируете, в данном случае нужно принять user_id через POST и уже сразу делать обновление по известному телефону и user_id:
    $user_id = $_POST['user_id'];
    $tel = $_POST['tel'];
    $user = mysqli_query($connect, "UPDATE `bd` SET `tel` = '$tel'  WHERE `bd`.`id` = $user_id");

    Но есть еще одни нюанс. Если такую запись редактирует администратор (пользователь с самыми широкими правами), то доверять передачи $user_id через форму можно.
    Если такую запись редактирует тот же самый пользователь, который авторизован в системе, то доверять $user_id параметру из формы опасно, user_id нужно брать из сессии авторизации.
    $user_id = /* Нужно какой-то функцией забрать идентификатор пользователя из сессии авторизации */;
    $tel = $_POST['tel'];
    $user = mysqli_query($connect, "UPDATE `bd` SET `tel` = '$tel'  WHERE `bd`.`id` = $user_id");
    Ответ написан
    Комментировать
  • Как проверить на совпадение в бд?

    @alexalexes
    Динамически сформировать текст и список параметров запроса, в зависимости от критериев:
    $sql = "SELECT * FROM `shop` WHERE 1=1 "; // 1=1 - классическая заглушка, чтобы можно было удобно добавлять and.
    $params = []; // заготовка под входные параметры запроса.
    if(isset($_POST['criteria_1']) && $_POST['criteria_1'] == 'on') // выбрали нечто по первому критерию
    {
    // он проверяет только имя чего-то
    $sql .= 'and `name` = :name ' // добавляем условие в текст запроса
    $params['name'] = $_POST['name']; // добавляем параметры
    }
    if(isset($_POST['criteria_2']) && $_POST['criteria_2'] == 'on') // выбрали нечто по второму критерию
    {
    // он проверяет  например, страну и город
    $sql  .= ' and `country` = :country
                 and `city` = :city ' // добавляем условие в текст запроса
    $params['country'] = $_POST['country']; // добавляем параметры
    $params['city'] = $_POST['city']; // добавляем параметры
    }
    $stmt = pdo()->prepare($sql);
    $stmt->execute($params);
    if ($stmt->rowCount() > 0) {
        flash('Этот магазин уже существует.');
        header('Location: addshop.php'); // Возврат на форму регистрации
        die; // Остановка выполнения скрипта
    }
    Ответ написан
    Комментировать
  • Как отправить несколько записей?

    @alexalexes
    В самом примитивном варианте реализации.
    Даете тегу select атрибут multiple и name задаете как ключ-массив, чтобы отправляемая форма могла по данному name нести на сервер массив значений:
    <select name="category_id[]" form="data" multiple>
    ...
    </select>

    На стороне сервера на пост-параметре category_id вы увидите массив выделенных элементов:
    var_dump($_POST['category_id']);
    Ну, и остается перебрать этот массив, чтобы последовательно выполнить insert.
    PS: Однако, структуру базы вам придется изменить, добавив еще одну таблицу для хранения множественного выбора категорий, чтобы выполнить требования 3-ей нормальной формы нормализации данных.
    Ответ написан
  • Как приветси GET-ответ в удобочитаемый вид?

    @alexalexes
    Можно хоть с браузера изучать содержимое JSON:
    1. Открываете средство разработчика в браузере F12.
    2. Открываете консоль.
    3. Пишите:
    Текст вашего JSON;
    4. После нажатия Enter появится строчка со скомпилированным результатом. Теперь можете бродить по внутренностям этого объекта как по дереву каталогов.
    Ответ написан
    Комментировать
  • Как присвоить цикл foreach переменной?

    @alexalexes
    Странно звучит, но то что можно присвоить переменной и потом выполнить можно оформить примерно так:
    $cycle = function($first, $second)
    {
    foreach(xopa($first, $second) as $items)
    {
      echo $items;
    }
    };
    $cycle($first, $second);
    Ответ написан
  • Как получить все имена загруженных изображений из массива и записать в бд php, redbean php, ajax?

    @alexalexes
    Вам сначала нужно подготовить структуру таблиц базы данных, чтобы можно было хранить несколько изображений продукта. Сейчас таблица products хранит сведения об изображении в одном атрибуте image. Вам нужно создать еще одну таблицу, например product_images, в которой будут храниться записи сведений об изображениях продукта - с указанием внешнего ключа product_id в каждой записи.
    А в php поменяется это место:
    $product = R::dispense('products');
       $product->image = $_FILES[$input_name]['name'][0]; // СЮДА НАДО ЗАПИСАТЬ МАССИВ ИМЕН ИЗОБРАЖЕНИЙ (сейчас записано только имя первого изображения)<br>
       R::store($product);

    На что-то такое:
    $product = R::dispense('products');
    $product_id = $product->id;
     foreach($files as $file)
    {
      // Вставка сведений из $file в таблицу product_images с входным параметром $product_id
    }

    Вторым этапом будет изменение методов чтения сведений об изображениях продукта. Чтобы метод адаптивно читал (по старому формату хранения) атрибут image из записи таблицы products, а в случае его пустоты - пытался читать сведения из таблицы product_images (по новому формату хранения).
    Ответ написан
    Комментировать
  • Как сделать добавление в избранное?

    @alexalexes
    20 таблицами в которых рассортированы сериалы по разным жанрам.

    Есть подозрение, что у вас структура таблиц не отвечает условиям нормализации (гуглите 1, 2, 3-я нормальная форма). Чтобы помечать фильмы одним или несколькими жанрами, достаточно 3 таблицы (гуглите как реализовать связь "многим-ко-многим"), в независимости от кол-ва жанров и фильмов.
    Чтобы хранить избранное, достаточно одной таблицы, в независимости от кол-ва пользователей.
    Таблица Fav_movie:
    id - идентификатор записи избранного,
    user_id - идентификатор пользователя
    movie_id - идентификатор фильма
    add_date - дата и время добавления
    position - поле для определения приоритета сортировки в пределах одного пользователя
    Ответ написан
  • Как вставлять картинки через код css?

    @alexalexes
    Вы пытаетесь работать с CSS как с шаблоном - для этого нужно использовать препроцессор CSS такие как Sass, Stylus, Less.
    Если у вас учебный проект, то это отдельная глава или даже раздел для набивания навыков и шишек.
    Если проект боевой и довольно простой, то можно не ввязываться в дебри динамической генерации стилей, условится, что статичные свойства стилей вы записываете в файлах CSS, а динамические - в html вставками:
    <style>
      .user-114__avatar
    {
       background-image: url({{thumbnail}});
    }
    </style>
    ...
    <!-- какие-то общие стили для аватара прописаны в классе user__avatar в файле css, а изменяемые прямо в HTML-->
    <div class="user__avatar user-114__avatar">
    </div>

    или инлайн-стилями:
    <!-- какие-то общие стили для аватара прописаны в классе user__avatar в файле css, а изменяемые прямо в инлайн-атрибуте тега-->
    <div class="user__avatar" style="background-image: url({{thumbnail}});">
    </div>

    PS: Тег img некорректно использовать без src, фон в нем может выступать только дополняющим свойством, например, закрывать прозрачные участки картинки src. И с фоновым изображением придется работать по-другому, чтобы привести в порядок адаптивность элемента.
    Ответ написан
    3 комментария
  • Как использовать сессию для всех клиентов одновременно?

    @alexalexes
    memcached, redis - можно использовать как буфер обмена между php процессами, но не более того. Для долговременного хранения данных нужна СУБД.
    Ответ написан
  • Как установить кодировку при выгрузке данных в CSV?

    @alexalexes
    Судя по преобладающим артефактам Р и С в некорректных символах, у вас строки в utf-8 открываются в кодировке windows-1251.
    Попробуйте либо правильно указать заголовок:
    "Content-type" => "text/csv;charset=utf-8",
    либо перекодировать строковые атрибуты из utf-8 в windows-1251:
    fputcsv($file, array(
                                    $item->id,
                                    mb_convert_encoding($item->name, 'cp1251', 'utf-8'),
                                    mb_convert_encoding($item->surname, 'cp1251', 'utf-8'),
                                    mb_convert_encoding($item->middle_name, 'cp1251', 'utf-8'),
                                    $item->phone,
                                    $item->date,
                                    $item->time,
                                    $item->type
                                ));
    Ответ написан
    Комментировать
  • Как определить яркость основного цвета изображения?

    @alexalexes
    1. Ищите реализацию "Определение основного цвета изображения в PHP".
    2. Ищите реализацию "RGB to HSL (или HSV) для PHP".
    3. Устанавливаете пороговое значение для L параметра из цветовой модели HSL (или V в HSV) пикселя основного цвета. От этого будет зависеть, что изображение "условно светлое" или "условно темное".
    Ответ написан
    Комментировать
  • Как в php сделать так чтобы по ссылке xml открывался php файл?

    @alexalexes
    Сделайте rewrite правило в конфиге nginx, чтобы при обращении к sitemap.xml вызывался php скрипт, который и обновит и выведет содержимое sitemap.xml. Только позаботьтесь о некой логики кеша, чтобы функция обновления файла запускалась не каждый раз, а по мере устаревания файла или его отсутствии.
    Ответ написан
    Комментировать
  • Передать значение в форме?

    @alexalexes
    <form action="/index.php" method="POST" >
      <input name='pers_delete' type='hidden' value="сюда подставляете значение переменной"/>  
      <input name='submit' type='submit' value="1" class='del_pers'/> 
    </form>

    <?php
       if (isset($_POST['submit']))
       {
         echo $_POST['pers_delete'];
       }
    ?>
    Ответ написан
    Комментировать
  • Как преобразовать одномерный массива в многомерный?

    @alexalexes
    Вам нужен определенный навык работы с наполнением ассоциативных массивов. С помощью него можно делать такие трюки.
    // $in_arr - вход
    // $out_arr - выход
    $out_arr = [];
    foreach($in_arr as $in_item)
      $out_arr[$in_item['api_id']][] = $in_item;
    $out_arr = array_values($out_arr);
    Ответ написан
    Комментировать