За последние 24 часа нас посетили 22547 программистов и 1276 роботов. Сейчас ищут 752 программиста ...

Подскажите как сформировать таблицу в БД?

Тема в разделе "PHP для новичков", создана пользователем Sofia, 23 июл 2020.

  1. Sofia

    Sofia Активный пользователь

    С нами с:
    25 сен 2008
    Сообщения:
    963
    Симпатии:
    2
    Всем привет.
    Стоит задача в отеле фиксировать продажи, пополнение товаром и списания товара.
    На сегодняшний момент делают это в Exel файле и в конце сменя отсылают бухгалтеру.

    Вот надо исключить пересылку файлов и сделать это методом онлайна (ну через страничку).
    Я пологаю что надо в базе данных 2 таблицы:
    1. Наименование товара
    2. Операции с товаром

    Но сообразить как должно выводиться что-то не получается. Подскажите пожалуйста, как лучше это осуществить? Может примеры есть?
     
  2. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Если вы не руководитель, у вас должно быть ТЗ, вот по нему и делайте как должно быть. А не тут спрашивать.
     
  3. twim32

    twim32 Активный пользователь

    С нами с:
    29 мар 2017
    Сообщения:
    275
    Симпатии:
    58
    Вкрадце, примерно так:

    Таблицы
    - клиенты + поставщики + склады (в одной таблице)
    - товары
    - типы документов
    - документы: продажа, инвентаризация, заказ поставщику, приходы, расходы, резервы, брак, и т.д. (для каждого отдельная таблица и отдельная таблица с товаром)
    - регистр документов (для связи между документами)
    - цены на товары
    - модификации товара
    - категории товара + связь между товаром и категориями

    Представления
    - движение товаров
    - движение денег
    - кол-во товара на складе + резервы

    Неплохо было бы иметь таблицу, в которой храняться остатки за определенный период и переодически ее обновлять, чтобы избежать черезмерной нагрузки на бд.
     
    Sofia нравится это.
  4. Sofia

    Sofia Активный пользователь

    С нами с:
    25 сен 2008
    Сообщения:
    963
    Симпатии:
    2
    @twim32 Спасибо. Попробую постепенно все добавлять.
    Итак, создала 2 таблицы:
    1. Название shop_pro - тут список товара.
    Структура:
    id - уникальный id
    name - наименование товара
    distr - описание товара
    price - цена
    group_id - id группы, для которой выводятся данные
    count - количество
    hide - отображать или скрывать (0 - отображать, 1 - скрывать)
    Выглядит вот так вот:
    [​IMG]

    2. Вторая табличка с названием shop_story.
    Структура:
    id - уникальный id
    name - будет записываться название товара
    price - будет записываться сумма продажи
    date - дата и время продажи
    count - количество проданного товара
    group_id - id группы, для которой выводятся данные
    Выглядит вот так вот:
    [​IMG]

    Вроде пока бд созданна.
    Следующий шаг - это вывести...
    Вывела я вот так (часть кода)
    PHP:
    1. case 'index':
    2.    $result1 = mysqli_query($db, "SELECT * FROM shop_pro WHERE hide='0' AND group_id=$group_id ORDER BY name DESC")or die('error1!'); //выборка товара
    3.    ?>
    4.    <form action="index.php?page=sell">
    5.    <table>
    6.    <tbody>
    7.    <tr>
    8.    <td>Наименование</td>
    9.    <td width="5%">Остаток</td>
    10.    <td width="5%">Кол-во</td>
    11.    </tr>
    12.    <?
    13.    while ($row1 = mysqli_fetch_array($result1)) {
    14.    echo '<tr>';
    15.    echo '<td>'.$row1['name'].' по цене '.$row1['price'].'руб.</td>';
    16.    echo '<td>'.$row1['count'].'</td>';
    17.    echo '<td><input type="number" size="3"></td>';
    18.    echo '</tr>';
    19.    }
    20.    ?>
    21.    </tbody>
    22.    </table>
    23.    <input type="submit" value="Отправить">
    24.    </form>
    25.    <?
    26.    break;
    27.    case 'sell':
    28.    
    29.    break;
    Вот тут у меня загвоздка: Подскажите пожалуйста, как данные отправить на страничку sell? (там будет обработчик)
    П.С.: Пример вот тут
     
  5. Sofia

    Sofia Активный пользователь

    С нами с:
    25 сен 2008
    Сообщения:
    963
    Симпатии:
    2
    Немного поэксперементировав получилось вот так:
    PHP:
    1. case 'index':
    2.    $result1 = mysqli_query($db, "SELECT * FROM shop_pro WHERE hide='0' AND group_id=$group_id ORDER BY name DESC")or die('error1!'); //выборка товара
    3.    ?>
    4.    <form method="POST" action="index.php?page=sell">
    5.    <table>
    6.    <tbody>
    7.    <tr>
    8.    <td>Наименование</td>
    9.    <td width="5%">Остаток</td>
    10.    <td width="5%">Кол-во</td>
    11.    </tr>
    12.    <?
    13.    while ($row1 = mysqli_fetch_array($result1)) {
    14.    echo '<tr>';
    15.    echo '<td>'.$row1['name'].' по цене '.$row1['price'].'руб.<input type="hidden" name="name" value="'.$row1['name'].'"><input type="hidden" name="price" value="'.$row1['price'].'"></td>';
    16.    echo '<td>'.$row1['count'].'</td>';
    17.    echo '<td><input name="count" size="3" type="number"></td>';
    18.    echo '</tr>';
    19.    }
    20.    ?>
    21.    </tbody>
    22.    </table>
    23.    <input type="submit" value="Отправить">
    24.    </form>
    25.    <?
    26.    break;
    27.    case 'sell':
    28.    $name = $_POST['name'];
    29.    $price = $_POST['price'];
    30.    $count = $_POST['count'];
    31.    echo 'Наименование: '.$name.'<br>';
    32.    echo 'Цена за единицу: '.$price.'<br>';
    33.    echo 'Кол-во продано: '.$count.'<br>';
    34.    break;
    Подскажите пожалуйста, как в обработчик отправлять все данные, которые указаны в начальной странице в поле Кол-во?
    На практике выходит так: добавляю 2 товара, а в обработчик попадает только один =(
     
    #5 Sofia, 24 июл 2020
    Последнее редактирование: 24 июл 2020
  6. twim32

    twim32 Активный пользователь

    С нами с:
    29 мар 2017
    Сообщения:
    275
    Симпатии:
    58
    Вам далеко до складского и бухгалтерского учёта. Простите, но это факт.
     
  7. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    @Sofia, попробуйте начать с анализа того самого Excel-файла.
    Какие в нём использованы сущности из предметной области, определите связи между ними...
    Что из них представляет собой "условно-постоянную" информацию, которую надо вынести в отдельные "справочники", а что - данные о движении товара, которые будут храниться в других "таблицах", имеющих "ссылки" на "справочники"...
    К примеру: "Лекция 7: Методы проектирования логических моделей реляционных баз данных. Декомпозиция и синтез отношений" а также другие лекции.
    --- Добавлено ---
    А пример можете сделать, например, на DB Fiddle.
     
  8. Sofia

    Sofia Активный пользователь

    С нами с:
    25 сен 2008
    Сообщения:
    963
    Симпатии:
    2
    т.е. решения нет, как с начальной страницы данные перенести в обработчик?
    У меня сейчас стоит задача - как отмеченные объекты перенести в обработчик и записать в бд.
    То что у меня сейчас получилось - переносятся данные в обработчик только по последней позиции товара.
     
  9. twim32

    twim32 Активный пользователь

    С нами с:
    29 мар 2017
    Сообщения:
    275
    Симпатии:
    58
    Самое простое : эксель сохранить в формате CSV (кодировка UTF-8) и прочитать его с помощью PHP. Далее через цикл записать все данные в БД
     
  10. Sofia

    Sofia Активный пользователь

    С нами с:
    25 сен 2008
    Сообщения:
    963
    Симпатии:
    2
    А почему с существующей таблицы данные невозможно обработать? Таблица составлена неверно? Или в чем причина?
     
  11. onderbert

    onderbert Новичок

    С нами с:
    24 мар 2019
    Сообщения:
    18
    Симпатии:
    1
    PHP:
    1. echo '<td><input name="count[' . $result1['id'] . ']" size="3" type="number" value="' . $result1['count'] . '"></td>';
    Вставлять данные без подготовки в запрос плохо
    https://www.php.net/manual/ru/mysqli.quickstart.prepared-statements.php
     
  12. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    @onderbert Так на вывод другая подготовка нужна, причём здесь подготовленные запросы?
     
  13. onderbert

    onderbert Новичок

    С нами с:
    24 мар 2019
    Сообщения:
    18
    Симпатии:
    1
    Там проблема в том что нейм инпутов один. И когда она форму отправит прийдёт только последний. Написал как исправить проблему.

    А на счет подготовки я об этом говорил, посмотри на запрос)
    PHP:
    1.  $result1 = mysqli_query($db, "SELECT * FROM shop_pro WHERE hide='0' AND group_id=$group_id ORDER BY name DESC")or die('error1!'); //выборка товара
    2.