2012-01-12 8 views
0

ここでは、私がやろうとしていることがあります。私はHTMLで書かれたフォームを持っています。それにはいくつかのHTML5要素があります。私がしたいのは、ユーザーが必要なフィールド(PHPとHTML5で検証済み)をすべて記入してフォームを送信し、既存のXMLファイルにエクスポートするときです。フォームはまた、AJAXを使用して、ユーザーがフィールドを記入したときに検証し、ページをリロードせずにフォーム全体を検証します(一度送信すると)。HTMLフォームからXMLドキュメントにデータをエクスポートする

XMLファイルは、フォーム提出からの情報を受け取るように設定された空のタグのフレームワークで、スキーマ(特定の値に制限するために作成したもの)に基づいています。私はまた、すべての値が有効であることを確認するために新しいXML値をスキーマに対して検証するスクリプトを持つことができなければならず、エラーメッセージを返さない場合も必要です。

XMLスキーマの検証はできるだけ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="[email protected]" 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

あなたの質問は? – hakre

+0

同じIDを持つ複数のオブジェクトを持つことはできません(名と姓の両方のフィールドに "名前")。 –

答えて

1

検証後、PHPを使用してフォームフィールドを取得し、XML要素でラップして保存します。

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

2重検証では意味がありません。もう1つはわずかに異なります。ユーザーがデータを正常に提出するのは面倒ですが、何もせずにバックエンドで拒否されます。 DOMDocumentはちょっと残酷です。

0

PHPは、XMLデータを、建物の変更、インポートおよびエクスポートの目的のために特別DOMDocumentというクラスが含まれています。 JavascriptでDOM要素を構築することに慣れている場合は、同じ考え方です。 DOMDocumentを作成してから、各要素を作成し、DOMDocument(またはその要素の親)に追加します。そこで終わったら、save関数を使ってファイルに書き出します。

関連する問題