【问题标题】:Exporting data from an HTML form into an XML document将数据从 HTML 表单导出到 XML 文档
【发布时间】:2012-01-12 17:07:47
【问题描述】:

好吧,这就是我想要做的。我有一个用 HTML 编写的表单。虽然它有一些 HTML5 元素。我想要发生的是,当用户填写所有必填字段(使用 PHP 和一些 HTML5 验证)并提交表单时,它将导出到现有的 XML 文件。该表单还使用 AJAX 在用户填写字段时进行验证,并在不重新加载我的页面的情况下验证整个表单(一旦提交)。

XML 文件只是一个空标签框架,它设置为接收来自表单提交的信息,建立在一个模式(我制作的)之上,以将其限制为某些值而不是什么。我还需要能够有一个脚本来根据架构验证新的 XML 值,以确保所有值都有效,如果没有则返回错误消息。

XML Schema 验证尽可能接近 PHP 验证,只是在此处和那里添加了一些字符数量限制。

如果您需要我发布 XML 文件的架构以便给出更具体的答案,那么我会应要求提供。

XML 框架:

    <form>
**<!-- First Name -->**
    <fname></fname>

<!-- Last Name -->
    <lname></lname>

<!-- Phone Number -->
    <phone></phone>

<!-- Email -->
    <email></email>

<!-- Website -->
    <website></website>

<!-- Subject -->
    <subject></subject>

<!-- Message -->
    <message></message>

</form>

HTML 表单:

<form method="post" action="php/validator.php" name="contactform" id="contactform" autocomplete="on"> 

    <fieldset> 

        <legend>Contact Details</legend> 

        <div> 
            <label for="fname" accesskey="F">Your First Name*</label>
            <input name="fname" type="text" id="name" placeholder="Enter your first name" tabindex="1" required /> 
        </div>

        <div> 
            <label for="lname" accesskey="L">Your Last Name*</label>
            <input name="lname" type="text" id="name" placeholder="Enter your last name" tabindex="2" required /> 
        </div> 

        <div> 
            <label for="email" accesskey="E">Email*</label> 
            <input name="email" type="email" id="email" placeholder="myEmail@example.com" pattern="^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$" tabindex="3" required /> 
        </div> 

        <div> 
            <label for="phone" accesskey="P">Phone <small>(optional)</small></label> 
            <input name="phone" type="tel" id="phone" size="12" placeholder="555-555-5555" tabindex="4" /> 
        </div> 

        <div> 
            <label for="website" accesskey="W">Website <small>(optional)</small></label> 
            <input name="website" type="url" id="website" placeholder="www.yourWebDomain.com" tabindex="5" /> 
        </div> 

    </fieldset> 

    <fieldset> 

        <legend>Your Comments</legend> 

        <div> 
            <label for="subject" accesskey="S">Subject*</label> 
            <select name="subject" id="subject" tabindex="6" required="required"> 
                <option value=""></option> 
                <option value="Support">Support</option> 
                <option value="Sale">Sales</option> 
                <option value="Bug">Report a bug</option>
                <option value="Other">Other</option>
            </select>
        </div>
        <div> 
            <label for="comments" accesskey="C">Comments*</label>
            <textarea name="comments" cols="40" rows="3" id="comments" class="comments" placeholder="Enter your comments" spellcheck="true" required tabindex="7"></textarea> 
        </div> 

    </fieldset> 
    <input type="submit" class="submit" id="submit" value="Submit" tabindex="9" />
</form>

【问题讨论】:

  • 您不能拥有多个具有相同 id 的对象(名字和姓氏字段中都包含“名称”)。

标签: php javascript html xml ajax


【解决方案1】:

验证后使用 PHP 捕获表单字段,将它们包装在 XML 元素中,然后保存。

例如

<form>
    <fname><?php=$_REQUEST['fname']?></fname>
    <lname><?php=$_REQUEST['lname']?></lname>
    ...
    ..
</form>

双重验证也没有意义,其中一个与另一个略有不同。用户成功提交数据但不知何故在后端被拒绝而没有警告会很烦人。 DOMDocument 也有点矫枉过正。

【讨论】:

    【解决方案2】:

    PHP 包含一个名为DOMDocument 的类,专门用于构建、更改、导入和导出 XML 数据。如果你熟悉用 Javascript 构造 DOM 元素,那也是同样的想法。创建您的 DOMDocument,然后创建每个元素并将这些元素附加到 DOMDocument(或该元素的父元素),然后再创建它们。完成后,使用保存功能将其写入文件。

    【讨论】:

      猜你喜欢
      • 2014-03-19
      • 2015-11-07
      • 2016-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-21
      • 1970-01-01
      • 2018-12-21
      相关资源
      最近更新 更多