За последние 24 часа нас посетили 18766 программистов и 1608 роботов. Сейчас ищут 687 программистов ...

Как внести данные в связанные таблицы?

Тема в разделе "PHP для новичков", создана пользователем lamac0, 10 авг 2022.

  1. lamac0

    lamac0 Новичок

    С нами с:
    4 авг 2022
    Сообщения:
    42
    Симпатии:
    0
    Всем привет, есть две таблицы связанные между собой
    SHOP
    upload_2022-8-10_14-22-59.png
    TICKETS
    upload_2022-8-10_14-24-26.png

    каким образом можно вносить и вытаскивать данные одновременно в две связанные таблицы?
    суть в том, чтоб юзер выбрал свою точку и отправил заявку, а я потом ее прочитал.
    есть вот такое выпадающее меню, но оно не выдает данных
    PHP:
    1.     <select name="shop">
    2.             <option value="0">Выберите магазин</option>
    3.         <?
    4.         $link= new mysqli('localhost', 'root', 'root', 'new_db');
    5.          $sql= 'SELECT name FROM shop';
    6.         $res = mysqli_query($link, $sql);
    7.         while($row = mysqli_fetch_assoc($res)){
    8.             ?>
    9.             <option value="<?=$row['name']?>"></option>
    10.             <?
    11.         }
    12.         ?>
    13.     </select>
     
    #1 lamac0, 10 авг 2022
    Последнее редактирование: 10 авг 2022
  2. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.835
    Симпатии:
    651
    Вставка – INSERT, при этом лучше использовать подготовленные запросы.

    И зачем тогда вносить в SHOP? Хотите редактировать состав магазинов своим софтом?

    Пустые option ;) Совсем что ли не сечете? Тогда переносите тему во фриланс.
    --- Добавлено ---
    Имя как раз в тексте option должно быть, а не в атрибуте value ;)
    --- Добавлено ---
    P.S. Пихать работу с БД между тегами – полнейший отстой. И нет проверки ошибок.
     
  3. lamac0

    lamac0 Новичок

    С нами с:
    4 авг 2022
    Сообщения:
    42
    Симпатии:
    0
    я пока только учусь и делаю это по большей части для себя и если получится, то применю в своей сфере деятельности, посоветовался с человеком, он сказал, что всегда создаются две таблицы, связываются индексами.

    upload_2022-8-11_9-15-53.png

    и поэтому и всплыл вопрос в разделе "php для новичков" как реализовать выпадающее меню с именами магазинов, чтоб вносить в две таблицы заявки и потом их просматривать.

    С выпадающим меню разобрался, спасибо
     
    #3 lamac0, 11 авг 2022
    Последнее редактирование: 11 авг 2022
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.835
    Симпатии:
    651
    Еще раз. У вас таблица заявок одна. Именно в нее нужно вносить заявки. SHOP – вспомогательная таблица в данном случае. По ней вы обеспечиваете целостность данных (автоматом, как вам показали в пред. теме, или вручную, т.е. при помощи доп. кода).
     
  5. lamac0

    lamac0 Новичок

    С нами с:
    4 авг 2022
    Сообщения:
    42
    Симпатии:
    0
    я вас услышал, над таблицей и связями поработал, пришел к связи один ко многим, получилось следующее
    SHOP
    upload_2022-8-12_10-20-22.png

    TICKETS
    upload_2022-8-12_10-22-3.png

    СВЯЗЬ
    upload_2022-8-12_10-22-44.png

    Далее как я понимаю, нужно при помощи SELECT вытащить из таблицы TICKETS id_shop и присвоить ему name из таблицы SHOP для человеческого вида в выпадающем меню, верно? и если да, то как примерно должно выглядеть условие, чтоб было понимание как это делается
     
  6. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.835
    Симпатии:
    651
    Для «человеческого вида» имя в текст option заносится. А серверу передается id-шник магаза. Мускул сам будет проверять его соответствие имеющимся магазинам, благодаря явно определенной связи.
     
    #6 miketomlin, 12 авг 2022
    Последнее редактирование: 12 авг 2022
  7. lamac0

    lamac0 Новичок

    С нами с:
    4 авг 2022
    Сообщения:
    42
    Симпатии:
    0
    не могу понять логики построения выражения, то есть как оно должно выглядеть
    PHP:
    1. <?php
    2. $link=mysqli_connect('localhost', 'admin', 'pass', 'new_db') or die(mysqli_error() .$link);
    3. $sql=('SELECT name FROM shop');
    4. $result=mysqli_query($link, $sql);
    5. ?>
    6. <select name='name'>
    7. <?php while($name = mysqli_fetch_assoc($result));
    8. ?>
    9. <option><?=$name['name']?></option>
    10. <?php endwhile?>
    11. </select>
    таким образом вытаскиваю имя из базы, а как потом передать его в виде id ума не приложу, можно какой-то пример? не обязательно мой, просто чтоб понять как дальше ковырять все это действие

    если в option value добавить id это поможет?
    HTML:
    1. <option value="<?=$name['id']?>"><?=$name['name']?></option>
     
  8. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.579
    Симпатии:
    1.760
    Ну вообще, именно так и делают все нормальные люди :)
     
  9. lamac0

    lamac0 Новичок

    С нами с:
    4 авг 2022
    Сообщения:
    42
    Симпатии:
    0
    с выпадающим списком разобрались, теперь другой вопрос возник, есть форма, которая вносит данные в таблицу, до этого работала, но теперь говорит, что id_shop не может быть пустым, вот собственно сама форма
    PHP:
    1. <?php
    2. $dsn = "mysql:host=localhost;dbname=new_db;charset=utf8";
    3. $options = [
    4.       PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    5.       PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
    6.     ];
    7. $pdo = new PDO($dsn, 'admin', 'pass', $options);
    8. $magz = $_POST['id_shop'];
    9. $contact = $_POST['contacts'];
    10. $problem = $_POST['problem'];
    11. $data = $_POST['data'];
    12. $stmt = $pdo->prepare("INSERT INTO tickets (id_shop, contact, problem, data) VALUES (:id_shop, :contact, :problem, :data)");
    13. $stmt->bindParam(':id_shop', $magz);
    14. $stmt->bindParam(':contact', $contact);
    15. $stmt->bindParam(':problem', $problem);
    16. $stmt->bindParam(':data', $data);
    17. $falg = $stmt->execute();
    18. ?>
     
  10. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.835
    Симпатии:
    651
    Вам нужно понять, как работают формы. Иначе так и будете топтаться на ровном месте.
    --- Добавлено ---
    Вот это муть:
    PHP:
    1. $magz = $_POST['id_shop'];
    2. $contact = $_POST['contacts'];
    3. $problem = $_POST['problem'];
    4. $data = $_POST['data'];
    Нужно проверять наличие необходимых параметров и не переприсваить без надобности.
     
  11. lamac0

    lamac0 Новичок

    С нами с:
    4 авг 2022
    Сообщения:
    42
    Симпатии:
    0
    понял косяк и исправил, данные вносятся корректно, ошибка была как в sql запросе-не был указан id_shop при выборке из базы, а так же не верно указан параметр name в select, вот как теперь это выглядит

    PHP:
    1. <?php
    2. $link=mysqli_connect('localhost', 'admin', 'pass', 'new_db') or die(mysqli_error() .$link);
    3. $sql=('SELECT name, id_shop FROM shop');
    4. $result=mysqli_query($link, $sql);
    5. ?>
    6. <select name="id_shop">
    7. <?php while($name = mysqli_fetch_assoc($result));
    8. ?>
    9. <option value="<?=$name['id_shop']?>"><?=$name['name']?></option>
    10. <?php endwhile?>
    11. </select>
    теперь вопрос другой, каким образом лучше подгружать картинки к заявкам- с хранением непосредственно в базе mysql или же где-то в папке на сервере?

    вот тут не понял вас, разъясните если не трудно?
     
  12. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.835
    Симпатии:
    651
    Почти «все нормальные люди» хранят файлы в ФС, а доп. инфу о них в БД. Ту же привязку к заявкам нужно где-то хранить. Еще одно имя файла картинки можно хранить в самой заявке. И то, если картинки прикрепляются не часто, получается почти «бесполезное» поле.

    Речь о POST-параметрах. Кто-то может сделать POST-запрос напрямую без какого-то параметра или пользователь может стереть какое-то поле в форме (через инструменты Web-разраба в браузере). В результате ваш скрипт-обработчик начнет глючить. Норм. обработка всех входных параметров – основа Web-разработки.

    И Шо у вас за прикол с использованием разных расширений для работы с БД? Мускулай если что тоже поддерживает подготовленные выражения ;)
    --- Добавлено ---
    P.S. Только сейчас заметил еще один прикол в старт. посте. Шо за id_ticket в SHOP?! :)
     
  13. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.835
    Симпатии:
    651
    P.P.S. А в пятом посте уже не видно этого поля. Норм.
     
  14. lamac0

    lamac0 Новичок

    С нами с:
    4 авг 2022
    Сообщения:
    42
    Симпатии:
    0
    подразумевается, что ко многим заявкам будет идти прикрепление изображения для видения полноты картины проблемы и понимания объема работ, так что без этого поля никак

    вы имеете ввиду фильрацию вводимых данных, чтобы кул хацкер инъекцию не бахнул?

    я пока только учусь и это планируется ввести в полу-боевою работу, само собой все будет обновляться и дописываться не раз, пока что пытаюсь довести до рабочего состояния хоть как-то, а потом уже с чувством тактом и расстановкой так сказать допиливать
     
  15. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.835
    Симпатии:
    651
    Я имею в виду проверку наличия того, что используете. Тут любой мало-мальски подкованный юзер может завалить ваш сайт. О хакерах и речи нет. Есть минимум, который нужно соблюдать при разработке Web-приложений. Без него пускать ваши поделки в прод опасно, позорно и т.п.
    --- Добавлено ---
    В общем учитесь! Желаю успехов!
    --- Добавлено ---
    P.S. Проверять наличие/тип/формат можно через ф-ции фильтрации пыха, но не обязательно именно через них.
     
  16. lamac0

    lamac0 Новичок

    С нами с:
    4 авг 2022
    Сообщения:
    42
    Симпатии:
    0
    благодарю за помощь, осталась буквально пара вопросов

    проверку этих данных можно сделать в уже имеющейся форме или для каждой проверки лучше сделать свою и подключать через include? и если каждую отдельно подключать то к index'y или к форме?