@Danny13

Как сделать так чтобы выбранные в select2 элементы отображались в созданной форме?

Был бы благодарен если бы кто-то смог бы помочь новичку. Я хочу чтобы работники, которых я выбираю в select2 форме (там можно сразу нескольких выбрать) отображались в созданной форме. Но я не знаю как сохранить этот array в mysql и потом отобразить в форме. При создании формы, я также назначаю ID задачи ID выбранного работника, с ID мне кажется я разобрался. Код внизу.

У меня 3 таблицы:

tasks: id, name и т.д.
workers: id, firstname, lastname.
worker_tasks: worker_id, task_id.

Здесь я создаю форму и вставляю данные в таблицу table, а также сразу добавляю ID задачи в таблицу workers_tasks.

$sql = "INSERT INTO tasks (shortname, projectname, createdby, starting_date, end_date, `description`, workstatus) VALUES(?, ?, ?, ?, ?, ?, ?)";
             $q = $pdo->prepare($sql);
             $q->execute(array($shortname,$projectname,$createdby,$starting_date,$end_date,$description,$workstatus));
             $task_id = $pdo->lastInsertId();
             $sql = "INSERT INTO worker_tasks (worker_id, task_id) value(?, ?)";
             $w = $pdo->prepare($sql);


Это форма select2 где я собственно выбираю работников. Работники берутся из таблицы workers.

<select name="worker[]" class="select2 browser-default"
        multiple="multiple">
  <optgroup  label="Konstruktion">
    <?php
$pdo = Database::connect();
$sql = 'SELECT * FROM workers';
foreach ($pdo->query($sql) as $row) {
echo '<option value="'. $row['id']. '"';
echo 'class="left">'. $row['worker_name'] . ' ' . $row['worker_surname'];
echo '</option>';    
} 
Database::disconnect();
?>
  </optgroup>
  <optgroup  label="Produktion">
    <?php
$pdo = Database::connect();
$sql = 'SELECT * FROM workers WHERE worker_field = "Produktion"';
foreach ($pdo->query($sql) as $row) {
echo '<option value="'. $row['id']. '"';
echo 'class="left">'. $row['worker_name'] . ' ' . $row['worker_surname'];
echo '</option>';    
} 
Database::disconnect();
?>
  </optgroup>
</select>


А это форма в которой всё в конце отображается. Я удалил некоторые элементы, чтобы меньше букофф было для чтения,
<?php
    $pdo = Database::connect();
    $sql = 'SELECT * FROM tasks WHERE workstatus="In Bearbeitung" ORDER BY id DESC';
    foreach ($pdo->query($sql) as $row) {
    echo '<ul class="collapsible collapsible-accordion animate fadeUp">';
    echo '<li>';
    echo '<div class="collapsible-header" tabindex="0">';
    echo  $row['shortname'];
    echo '</div>';
    echo '<div class="collapsible-body pad white-blur lighten-5">';
    echo '<p class="black-text">';
    echo '<b>Projekt:</b>';
   /* echo '<br>'. $row[' Я не знаю как здесь отабразить array с выбранными работниками, и чтобы это были ID именно для этой задачи.'] . '<br>'; */
    echo '<br>';
    echo '<b>Projekt Bezeichnung:</b>';
    echo '<br>B8 Version 1.2.0';
    echo '<br>';
    echo '<b>Aufgabe:</b>';
    echo '<br>'. $row['description'] . '<br>';
    echo '<br>';
    echo '<b>Mitarbeiter:</b>';
    echo '<br>'. $row['workers_array'] . '<br>';
    echo '</p>';
    echo '</li>';
    echo '</ul>';
    }
    Database::disconnect();
    ?>


Картинка ко всему этому:
5e6b9a9b4a38d102890262.png
  • Вопрос задан
  • 62 просмотра
Решения вопроса 1
@resident01
Php разработчик
Решение в лоб. Тебе известен id таски ($row['id'])
Теперь тебе нужно получить id работников из промежуточной таблицы, например
$sql = "SELECT worker_id FROM worker_tasks WHERE task_id=$row['id']"
Ну и собственно имея id не составит труда достать всех работников
$sql = "SELECT * FROM worker WHERE id IN [....]
Но это не лучшее решение. Проще сделать одним запросом

$sql = "SELECT `workers`.* FROM workers JOIN worker_tasks ON `workers`.id = worker_id
WHERE task_id = $row['id']";
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы