Как генерировать поля формы, основываясь только на именах полей столбцов таблицы? - PullRequest
0 голосов
/ 27 августа 2018

Я генерирую входные данные динамической формы на основе имен полей столбцов таблицы с помощью этого простого кода:

<form id="generate-user-register-form" type="POST">
                <?php 
                $queryuser= "DESCRIBE users";
                $resultstmt_queryuser= $conn->query($queryuser); 

                $fields = array();

                while($row = $resultstmt_queryuser->fetch_assoc()) {
                    $fields[] = $row['Field'];
                }

                foreach($fields as $field): ?>
                   <div class="col-md-6">
                        <?php echo "$field: "; ?>
                        <input class="form-control" type="text" name="<?php echo $field; ?>" />
                   </div>
                <?php endforeach; ?>
                <input type="button" name="submit" value="submit"/>
            </form>

Хорошо, это прекрасно работает, но первые 10 полей не нужны, а первый столбец id - автоинкременттак что это определенно не нужно в качестве ввода формы.Есть ли способ для меня, чтобы генерировать только определенные поля без необходимости вручную жестко кодировать что-то вроде приведенного ниже кода 10 раз?

 if($field !="id"){
//generate input
}

1 Ответ

0 голосов
/ 27 августа 2018

Я думаю, что то, что вы пытаетесь сделать, может иметь разные подходы, учитывая, как решить, должно ли поле быть входным или нет.Например.

Учтите, что ваша таблица будет выглядеть следующим образом:

+----+------------+-------------+-------------+------------+
| id | name_input | email_input | phone_input | created_at |
+----+------------+-------------+-------------+------------+
| 1  | John Smith | not@me.com  | 888 333 444 | 2018-08-26 |
| 2  | Lila White | not@us.com  | 412 322 555 | 2018-08-27 |
+----+------------+-------------+-------------+------------+

Итак, с помощью этой таблицы вы можете легко найти ключевое слово input в столбцах и назначитьтолько их в форму:

while($row = $resultstmt_queryuser->fetch_assoc()) {
    if (strpos($row['Field'], '_input') === false) {
        continue;
    }
    $fields[] = $row['Field'];
}

Или, как указал @IdontDownVote в комментариях выше, вы можете использовать счетчик внутри цикла и добавлять поля только если после некоторого числа или между некоторыми, или додругой, как:

$count = 0;
while($row = $resultstmt_queryuser->fetch_assoc()) {
    if ($count < 1 /* adding extra clauses here as && $count > 5 */) {
        continue;
    }
    $fields[] = $row['Field'];
}someone

Но я бы советовал против этого. Почему? спросите вы.

Ну, по своей природе каждое поле отличается.Машина, конечно, не будет знать, какова метка для определенного поля, какая проверка должна иметься, или какую информацию она должна хранить.

Чаще всего идентификаторы являются целыми числами,думал, что они не могут быть.Но как насчет date полей?Или номера телефонов?Или почтовые коды?

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

Проверка телефонных номеров, проверка почтовых индексов, электронных писем, веб-сайтов.

Большая часть кода должна быть в любом случае жестко задана в бэкэнде, прежде чем эта информация попадет в базу данных.Итак, если вам нужно написать некоторые конкретные правила для определенных полей, почему бы не указать эти поля также в форме?

Это облегчает вашу жизнь при попытке отследить каждое поле, и вы не будетеполностью зависеть от создания игнорировать правила для определенных полей, которые будут отображаться как: created_at, created_by.Когда эти поля обычно обновляются системой, а не пользователем (конечно, зная, кто что сделал и когда).

Но хорошо, TL;DR;иногда жесткое кодирование является более четким и более быстрым (в долгосрочной перспективе), чем противоположное.

[Edit]

Добавление счетчика к ответу, который будет виден, если @IdontDownVoteопубликуйте этот ответ, пожалуйста, выберите его ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...