使用数据库中的数据预设窗体的值

Preset the values of a form with data from a database

本文关键字:窗体 数据 数据库      更新时间:2023-09-26

我在web中有一个表单(用html构建)。假设我有一些可以更改的表单值,所以我将它们存储在数据库中。我想做的是,每当用户转到表单所在的页面时,都必须读取数据库中的数据,并用这些信息填充表单(例如,我有一个电子邮件字段,所以我想用数据库中的电子邮件填充它)。

我一直在寻找一种方法来做到这一点,但我没有找到任何我真正"喜欢"的方法。我能做到这一点的唯一方法是对PHP脚本执行javascript上的AJAX请求,在那里我连接到DB并获取数据。一旦我得到它,我就会通过Javascript修改整个表单,但我真的不确定它是否足够安全。

关于如何以不同的方式或如何足够安全地进行,有什么想法吗?

非常感谢。

我的解决方案允许链接任意HTML输入元素和数据库字段。在任何需要的情况下,都可以将这些代码放入可重用函数中。

将数据库字段命名为与HTML表单元素的名称属性相同的名称。然后你就可以做如下的事情:

<!doctype html>
<form>
    <input name="email" />
    <input name="age" />
    <input name="website" />
</form>

在PHP中,将HTML文件的内容读取到DomDocument构造函数中:

$dom = new DomDocument(file_get_contents("MyPage.html"));

然后,您可以获得所有输入元素的DomNodeList,只需使用:

$xpath = new DomXPath($dom);
$nodeList = $xpath->query("//form/input");

假设您的数据库数据表示在一个名为$data:的关联数组中

$data = $mysql->query("yourQuery");
foreach($nodeList as $node) {
    $key = $node->getAttribute("name");
    if(array_key_exists($key, $data)) {
        $node->setAttribute("value", $data[$key]);
    }
}

然后,您可以像往常一样通过将DOM输出到浏览器来呈现页面。

BONUS:将表单数据保存到数据库中时,由于HTML输入字段的名称与数据库字段名称匹配,因此可以将$_POST数组传递到DAL。

我不完全相信我回答的问题是正确的,但通常为了填写表格,你只需要做这样的事情:

<form>
    <input name="username" value="<?php echo isset($dataRow->UserName) ? htmlentities($dataRow->UserName) : ""; ?>">
</form>

我省略了一些不重要的内容,但如果这是您第一次使用HTML表单,您可能也需要阅读这些内容。

当然,你首先需要从数据库中获取数据,然后再行:

$resultSet = mysqli_query($connection, "SELECT * FROM Table WHERE Id = " . ((int)$id));
$dataRow = mysqli_fetch_object($query);

再次:我省略了一些内容,假设您可以根据这个示例找到正确的方法。当然,过程风格的mysqli_*函数可能应该被它们的面向对象的对应函数所取代。

使用AJAX似乎毫无意义:不管怎样,你都在请求表单,你还不如预先填充它

至于安全:我不认为这是一个问题。只要你逃离你的HTML(在我上面的代码中是htmlentities),你就应该没事了。

我会在这里使用JQuery(JQuery.com)和JEasyUI(www.jeasyi.com)解决方案,因为我已经安装了这些框架。。。(听起来您已经安装了JQuery,因为您使用了AJAX)。JEasUI让这一切变得简单。。。

  1. 在HTML中,创建表单元素:
    <!doctype html><form><input name="email" /><input name="age" /><input name="website" /></form>
  2. 在javascript文件中,以:开头

              $(document).ready(function){});$(函数($){});
  3. 在您的主功能中,使用JQuery选择from并创建一个JEasyUI表单组件

    $('form').form();
  4. 然后,用您的数据填充表单(必须是对象):

    $('form').form('load'{电子邮件:'mymail@gmail.com',年龄:5岁,网站:'http://stackoverflow.com'});或$.ajax({url:"getData.php?",类型:"GET",dataType:"json",成功:函数(json_data){$('form').form('load',json_data);}});
  5. 最后,你的JS应该是这样的:

              $(document).ready(function){$('form').form('load'{电子邮件:'mymail@gmail.com',年龄:5岁,网站:'http://stackoverflow.com'});});$(函数($){$.ajax({url:"getData.php?",类型:"GET",dataType:"json",成功:函数(json_data){$('form').form('load',json_data);}});});