我在网页上有一个表单(使用html构建)。假设我有一些可以更改的表单值,因此我将它们存储在数据库中。我想要做的是,每当用户访问表单所在的页面时,必须读取数据库中的数据,并且必须使用该信息填充表单(例如,我有一个字段用于表示邮件,所以我想填写我在数据库中的电子邮件。)
我一直在寻找一种方法来做到这一点,但我还没有找到任何我真正“喜欢”的方法。我能做到的唯一方法是在javascript上对PHP脚本执行AJAX请求,在那里我连接到数据库并获取数据。一旦我得到它,我通过Javascript修改整个表单,但我不确定它是否足够安全。
有关如何以不同方式进行操作或如何安全地进行操作的任何想法?
非常感谢。
答案 0 :(得分:3)
我的解决方案允许链接任意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。
答案 1 :(得分:0)
我并不完全相信我正在回答正确的问题,但通常为了填写表格,你所要做的就是这样:
<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
)就应该没事了。
答案 2 :(得分:0)
我会在这里使用JQuery(jquery.com)和JEasyUI(www.jeasyui.com)解决方案,因为我已经安装了这些框架......(听起来你已经安装了JQuery,因为你使用的是AJAX) 。 JEasyUI让这很容易......
<!doctype html>
<form>
<input name="email" />
<input name="age" />
<input name="website" />
</form>
在javascript文件中,以:
开头$(document).ready(function(){ }); or $(function($){ });
在main函数中,从JQuery中选择from并创建一个JEasyUI表单组件
$('form').form();
然后,使用您的数据填充表单(必须是对象):
$('form').form('load',{ email:'mymail@gmail.com', age:5, website:'http://stackoverflow.com' }); or $.ajax({ url: "getData.php?", type: "GET", dataType: "json", success: function(json_data) { $('form').form('load', json_data); } });
最后你的JS应该是这样的:
$(document).ready(function(){ $('form').form('load',{ email:'mymail@gmail.com', age:5, website:'http://stackoverflow.com' }); }); or $(function($){ $.ajax({ url: "getData.php?", type: "GET", dataType: "json", success: function(json_data) { $('form').form('load', json_data); } }); });