1

我在网络中有一个表单(使用 html 构建)。假设我有一些可以更改的表单值,所以我将它们存储在数据库中。我想要做的是,每次用户进入表单所在的页面时,都必须读取数据库中的数据并且必须用该信息填充表单(例如,我有一个 e 字段-mail,所以我想用我在数据库中的电子邮件填写它)。

我一直在寻找一种方法来做到这一点,但我还没有找到任何我真正“喜欢”的方法。我能做到的唯一方法是在 javascript 上向 PHP 脚本发出 AJAX 请求,我在其中连接到数据库并获取数据。一旦我得到它,我会通过 Javascript 修改整个表单,但我不确定它是否足够安全。

关于如何以不同的方式进行操作或如何足够安全地进行操作的任何想法?

非常感谢。

4

3 回答 3

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 输出到浏览器来像往常一样呈现页面。

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

于 2013-08-19T17:31:05.073 回答
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在我上面的代码中)你应该没问题。

于 2013-08-19T17:22:44.303 回答
0

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

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

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

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

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

    
    $(文档).ready(函数(){
        $('form').form('load',{
            电子邮件:'mymail@gmail.com',
            年龄:5,
            网站:'http://stackoverflow.com'
        });
    });
    
    或者
    
    $(函数($){
        $.ajax({
            url: "getData.php?",
            类型:“获取”,
            数据类型:“json”,
            成功:函数(json_data){
                $('form').form('load', json_data);
            }
        });
    });
    
    
于 2013-08-19T19:38:20.030 回答