使用数据库中的数据预设窗体的值
Preset the values of a form with data from a database
我在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让这一切变得简单。。。
- 在HTML中,创建表单元素:
<!doctype html>
<form>
<input name="email" />
<input name="age" />
<input name="website" />
</form>
-
在javascript文件中,以:开头
$(document).ready(function){});或$(函数($){});
-
在您的主功能中,使用JQuery选择from并创建一个JEasyUI表单组件
$('form').form();
-
然后,用您的数据填充表单(必须是对象):
$('form').form('load'{电子邮件:'mymail@gmail.com',年龄:5岁,网站:'http://stackoverflow.com'});或$.ajax({url:"getData.php?",类型:"GET",dataType:"json",成功:函数(json_data){$('form').form('load',json_data);}});
-
最后,你的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);}});});
- 防止Iframe窗体在新窗口中打开
- 用程序搜索JQuery数据表中的文本
- 要求输入在数据列表中
- 正在将数据主题添加到所有项目
- 根据输入的数据重定向到页面的窗体
- 模型数据未通过窗体传播到控制器ASP.NET MVC4
- 将嵌套对象数据添加到窗体中
- 如何在窗体操作或window.location(PHP)中使用数据切换
- 如何从LiveCycle中的下拉列表将一个子窗体中的数据填充到另一个子窗体的文本字段
- 如何从<窗体>中获取数据并在单独的
- 函数、窗体和用户输入的数据
- 使用localstorage存储表数据并将其传递给窗体
- 从窗体将窗体数据从视图传递到控制器
- 使用数据库中的数据预设窗体的值
- 在Xamarin窗体中从WebView获取数据
- 可以't从窗体将其他数据保存在数据库中
- 无法从窗体向函数提取数据
- ExtJs没有't将数据加载到窗体
- 将数据发送到窗体中的新窗口
- 如何将数据从HTML保存到excel,点击“提交”即可;窗体按钮