好的,我正试图这样做。我有一个用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>
答案 0 :(得分:1)
验证后,使用PHP捕获表单字段,将它们包装在XML元素中,然后保存。
e.g。
<form>
<fname><?php=$_REQUEST['fname']?></fname>
<lname><?php=$_REQUEST['lname']?></lname>
...
..
</form>
双重验证也没有意义,只有一个略有不同。用户成功提交他们的数据会很烦人,但不知何故会在没有警告的情况下在后端被拒绝。 DOMDocument也有点矫枉过正。
答案 1 :(得分:0)
PHP包含一个名为DOMDocument的类,专门用于构建,更改,导入和导出XML数据。如果您熟悉在Javascript中构造DOM元素,那就是同样的想法。创建DOMDocument,然后创建每个元素,并在创建它们之后将这些元素附加到DOMDocument(或该元素的父元素)。完成后,使用保存功能将其写入文件。