如何仅基于特定的表列字段名称生成表单字段?

时间:2018-08-26 21:32:39

标签: php forms mysqli

我正在使用以下简单代码基于表列字段名称生成动态表单输入:

<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 :(得分:0)

我认为您正在尝试做的事情可能会采用不同的方法来考虑如何确定某个字段是否应该作为输入。例如。

考虑您的表如下所示:

+----+------------+-------------+-------------+------------+
| 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

但是我建议不要这样做。 为什么?。您可能会问。

从本质上讲,每个领域都是不同的。机器肯定不会知道特定字段的标签,它应该具有什么验证,或者它应该包含什么样的信息。

最常见的是, id 是整数,以为可能不是。但是date字段呢?还是电话号码?还是邮政编码?

为每个输入生成动态输入时,您可能还必须读取列的名称作为每个字段的标签,但是,某些信息仍然会在某些时候绑定到硬编码。 / p>

电话号码验证,邮政编码验证,电子邮件验证,网站验证。

其中大部分都必须在后端中进行硬编码,然后此信息才能到达数据库。因此,如果您必须为特定字段编写一些特定规则,为什么不还要在表单中指定此字段?

当您尝试查找每个字段时,这会使您的生活变得更轻松,并且您将不会完全依赖为某些字段显示而创建忽略规则,例如:created_at,{{ 1}}。这些字段通常由系统而不是由用户更新(当然,知道谁在做什么以及何时做)。

但是,TL; DR;有时从长远来看,硬编码比相反的编码更清晰,更快。

[编辑]

将计数添加到可见的答案中,如果@IdontDownVote发布了此答案,请选择他的答案。