Различается в foreach l oop. Многим результат из-за двух петель - PullRequest
2 голосов
/ 23 марта 2020

У меня есть пользовательская система, которая обеспечивает добавление новой информации в пользовательских столбцах. У меня есть две таблицы в моей базе данных. Один для моих значений данных, а второй для столбцов (данные отображаются).

enter image description here

Выше вы видите изображение из моей формы, созданное по заказу поля данных с данными на поле. Только по моему для каждого я получаю за каждые данные дополнительные l oop, поэтому я получил из каждого поля данных два. Как я могу это исправить?

<?php foreach ($list as $key => $value) { ?>
    <?php foreach ($dataList as $data) { ?>
        <div class="row clearfix">
            <div class="col-xl-12">
                <div class="form-group form-group-default">
                    <label><?php echo ucfirst($key); ?></label>
                    <?php if($key == $data['name']) { ?>
                    <input type="text" class="form-control" name="value_<?php echo trim($data['name']); ?>" value="<?php echo trim($data['value']); ?>" required>
                    <?php }else{ ?>
                        <input type="text" class="form-control" name="value_<?php echo trim($data['name']); ?>" placeholder="<?php echo ucfirst($key); ?>">
                    <?php } ?>
                </div>
            </div>
        </div>
    <?php } ?>
<?php } ?>

$list вы найдете список полей данных и в $dataList вы найдете записи данных.

Структура базы данных:

данные:

['id','hash','field_id','value']

Пример данных:

['id' => 1, 'hash' => 123, 'field_id' => 1, 'value' => 'food']

Поля:

['id','name']

Пример полей:

['id' => 1, 'name' => 'firstname']

Ниже вы найдете переменные foreach:

$data = processing('read', 'data JOIN fields ON data.field_id = fields.id', ['data.value,data.uid,fields.name,data.id,fields.category_id'], 'uid = "' . trim($_GET['datalist']) . '"', true);
$dataItem = processing('read', 'data JOIN fields ON data.field_id = fields.id', ['fields.category_id'], 'uid = "' . trim($_GET['datalist']) . '"');
$fieldList = processing('read', 'fields', ['name'], 'category_id = "'. trim($dataItem['category_id']) . '"',true);
$list = [];
foreach($fieldList as $key => $value) {
    $list[$value['name']] = $value['name'];
}

Обновление:

Я обновил свой собственный вопрос, потому что другие ответы не решили мою проблему. Единственная проблема в моем ответе состоит в том, что при обновлении он смотрит не на идентификатор элемента, а на его имя, поэтому я не могу сохранить два элемента с одинаковым именем.

<?php foreach ($dataItems as $key => $value) { ?>
<div class="row clearfix">
    <div class="col-xl-12">
        <div class="form-group form-group-default">
            <label><?php echo ucfirst($key); ?></label>
            <input type="text" placeholder="<?php echo ucfirst($key); ?>" class="form-control" name="<?php echo trim($key); ?>" value="<?php echo trim($value); ?>">
        </div>
    </div>
</div>
<?php } ?>

метод:

public function getDataListItems(int $category, array $list) {
global $dbh;

$query = 'SELECT data.value, data.uid, fields.name FROM data JOIN fields ON data.field_id = fields.id WHERE fields.category_id = "' . trim($category) . '" ORDER BY uid';

$sql = $dbh->prepare($query);
$sql->execute();
$values = $sql->fetchAll(PDO::FETCH_ASSOC);

foreach ($values as $row) {
    if (!isset($items[$row['uid']])) {
        $items[$row['uid']] = array_fill_keys($list, '');  // if it needs to dynamically generated
        $items[$row['uid']]['uid'] = $row['uid'];
    }
    $items[$row['uid']][$row['name']] = $row['value'];
}
return $items;  
}

Возврат:

  array (
  '7d1f4f8e906245f' => 
  array (
    'Voornaam' => 'Bettina',
    'Achternaam' => 'Les',
    'Initialen' => 'pop',
    'uid' => '7d1f4f8e906245f',
  ),
  '7d1f4f8e906245g' => 
  array (
    'Voornaam' => 'Simone',
    'Achternaam' => '',
    'Initialen' => '',
    'uid' => '7d1f4f8e906245g',
  ),
  '7d1f4f8e906245l' => 
  array (
    'Voornaam' => 'test',
    'Achternaam' => 'Kül',
    'Initialen' => 'lol',
    'uid' => '7d1f4f8e906245l',
  ),
  '7d1f4f8e906245s' => 
  array (
    'Voornaam' => 'Joshua',
    'Achternaam' => 'Mas',
    'Initialen' => '',
    'uid' => '7d1f4f8e906245s',
  ),
  'gGcYEJdRYJ1vqcn' => 
  array (
    'Voornaam' => '',
    'Achternaam' => 'Hello',
    'Initialen' => '',
    'uid' => 'gGcYEJdRYJ1vqcn',
  ),
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...