【问题标题】:How to display the input fields according to the what outputs come from the database如何根据来自数据库的输出显示输入字段
【发布时间】:2018-02-24 13:31:00
【问题描述】:

我正在尝试根据来自数据库的输出来显示输入字段。请分享其中的任何想法或逻辑。我有超过 25 个字段。

Page1.php

我在表单中有姓名(文本类型)、电子邮件(电子邮件类型)、性别(无线电)、国家(选择下拉菜单)、地址(文本区域)。用户将单击表单中任何他需要的复选框并单击提交,然后他选择的字段的值将存储在数据库中。

表单页面

Page2.php

这里我显示的是从 Page1.php 中选择的字段,但我还需要与哪些字段来自数据库相关的输入类型。

例如:在 page1 我选择 Name、Email、Country 并提交表单然后在 page2 我必须显示输出 <input type="text" name="Name">,<input type="text" name="Name">,<select></select>.

我需要知道我必须使用什么逻辑。谁能帮我写剧本?

表单代码

<form action="" method="post">
<input type="checkbox" name="check-fields[]"  value="Name">
<label>Name(Text type)</label>
<input type="checkbox" name="check-fields[]"  value="Email">
<label>Email(Email type)</label>
<input type="checkbox" name="check-fields[]"  value="Gender">
<label>Gender(Radio type)</label>
<input type="checkbox" name="check-fields[]"  value="Select">
<label>Country(Drop down)</label>
<input type="checkbox" name="check-fields[]"  value="textarea">
<label>Address(Textare)</label>
<input type="submit" name="submit" value="submit">
</form>

将值存储在数据库中

if (isset($_POST['submit'])) {
// prepare and bind
$a=$_POST['check-fields'];
$elements= implode(',',$a);
$sql_elements="INSERT INTO test (elements) VALUES (?)";
$stmt = $conn->prepare($sql_elements);
$stmt->bind_param("s",  $elements);
$stmt->execute();
echo "New records created successfully";
$stmt->close();
$conn->close();
}

第 2 页

我正在获取输出,但我该如何设置输入字段?

$sql_fields="SELECT elements FROM test WHERE id=3";
if ($stmt = $conn->prepare($sql_fields)) {
            $stmt->execute(); 
            $stmt->bind_result($elements);
        while ($stmt->fetch()) {
            $arr=explode(",", $elements);
            echo "<pre>";
            print_r($arr);
            echo "</pre>";
       }
   }

$stmt->close();
$conn->close();
?>

【问题讨论】:

  • 有什么想法吗?

标签: javascript php jquery html forms


【解决方案1】:

如果我是正确的,您正在尝试为不同的用户创建个性化表单,这意味着您将允许用户根据用户可以选择的字段选择生成表单。

您需要做的是创建一个名为“forminputtypes”的表,您可以在其中为您能想到的每个不同输入字段创建一行,并希望让用户可以从中进行选择。您的表格将如下所示:

Id | FieldName | Type  | etc ->
-------------------------------
1  | Name      | text  | ...
2  | Email     | email | ...
3  | Gender    | radio | ...

您可以在表格中添加更多列来存储更多信息(想想单选输入或下拉菜单中的可能值)。

现在在 Page1.php 中,您从该表中选择所有输入类型,并像您已经显示的那样显示它们。但是,这些复选框的值将是数据库中记录对应的Id 值,如下所示:

<input type="checkbox" name="check-fields[]"  value="3">

现在,当有人选择“性别”字段时,您可以在 Page2.php 中看到用户通过将他的选择“3”与数据库中的记录相匹配来执行此操作。如果要保存此信息,可以创建另一个名为 UserFormInputFields 的表,它将作为用户表和 FormInputTypes 表之间的一对表。

当您想在 Page2.php 中显示表单时,您只需从 FormInputTypes 表中选择 Id 即可获取用户选择的所有输入字段。由于您知道每个输入字段的类型(因为它是表格中的一列),因此您可以正确显示它们。

【讨论】:

  • 如果我是正确的,您正在尝试为不同的用户创建个性化表单,是的,我正在创建它并且我正在提交数据库中的值,类似于 values="Name"。
  • 你的想法很好,但在未来的情况下,我添加了一些额外的字段,而不是我必须更新数据库。
  • 我试过你的逻辑。我可以显示文本、单选、复选框,但是如何显示选择下拉列表和文本区域?
  • 只需扩展我告诉你创建的表。在 type="select" 和 textarea 中创建记录。对于下拉菜单(选择),您必须创建一些额外的逻辑来存储所有选项,添加它也非常简单。
  • Type="select" 和 Type="textarea" 不起作用。我试过了
【解决方案2】:

如果您只想在核心 PHP 中执行此操作。只需将 if else 放在 html 标签周围。如果值来自数据库,那么您不会显示特定标签。您可以修改您的第 2 页代码。

<?php
$sql_fields="SELECT elements FROM test WHERE id=3";
if ($stmt = $conn->prepare($sql_fields)) {
            $stmt->execute(); 
            $stmt->bind_result($elements);
        while ($stmt->fetch()) {
            $arr=explode(",", $elements);
            echo "<pre>";
            print_r($arr);
            echo "</pre>";
       }
   }

$stmt->close();
$conn->close();
?>
<form action="" method="post">
<?php if(in_array("Name",$arr)) { ?>
 <input type="text" name="name"  >
 <label>Name</label>
<?php } ?>
<?php if(in_array("Email",$arr)) { ?>
 <input type="email" name="email">
 <label>Email</label>
<?php } ?>
<?php if(in_array("Gender",$arr)) { ?>
 <input type="radio" name="gender"  value="Male">
 <input type="radio" name="geneer"  value="Female">
<label>Gender(Radio type)</label>
<?php } ?>
//.............write other fiels like this.
<input type="submit" name="submit" value="submit">
</form>

我希望这会有所帮助。

【讨论】:

  • 您的想法不错,但我有超过 25 个字段。这意味着我必须在表格中写下每一个。对吗?
  • 如果你想避免写 25 个条件。你应该考虑让你的元素表提供更多信息。在其中存储有关表单元素的所有信息,例如 - 标签名称、类型、值等。然后对来自数据库的元素运行 foreach 循环并动态生成标签。这将使您的代码非常小。
猜你喜欢
  • 2019-02-21
  • 1970-01-01
  • 1970-01-01
  • 2023-01-27
  • 1970-01-01
  • 2023-03-13
  • 2012-06-15
  • 2022-01-13
  • 2016-03-16
相关资源
最近更新 更多