2016-10-05 11 views
1

これは私のXMLファイルと私のPHPコードです。私はfirstnameで学生を検索する入力タイプを入れました。特定の生徒の情報が表示され、別のボタンの更新が表示されます。私のXMLファイルをPHPフォームで修正してください。

問題はそれ以降の情報を変更したいということです。特定の生徒の情報を変更できるように、タグ名で要素を取得するにはどうすればよいですか?

<students> 
    <student> 
    <firstname>John</firstname> 
    <lasttname>Snow</lasttname> 
    <student_id>160600</student_id> 
    <gender>male</gender> 
    <dob>23-06-95</dob> 
    <email>[email protected]</email> 
    <mobilenumber>57675060</mobilenumber> 
    <address>albatros, portlouis</address> 
    <cohort>BSE15PT</cohort> 
    <programme>Software Engineering</programme> 
    <mode>PT</mode> 
    </student> 
    <student> 
    <firstname>Jey</firstname> 
    <lastname>Lacroix</lastname> 
    <student_id>150501</student_id> 
    <gender>M</gender> 
    <dob>1990-02-22</dob> 
    <email>[email protected]</email> 
    <mobilenumber>57553536</mobilenumber> 
    <address>Curepipe</address> 
    <cohort>BSE15AFT</cohort> 
    <programme>software engineering</programme> 
    <mode>FT</mode> 
    </student> 
</students> 
<?php 
    if(isset($_POST['search'])) 
{ 
    $xml=simplexml_load_file("studentInstance.xml") or die("Error: Cannot Create Object"); 

    //query the document 
    $name = $_POST['studentname']; 

    //$xml = simplexml_load_string($xml); 
    $query = $xml->xpath("/students/student[firstname = '$name']"); 
    $array=$query; 
    //echo "<pre>"; 
    //rint_r($array); 
    //echo "</pre>"; 

    $count=0; 
    $size=count($array); 
    //echo $count; 
    echo "<center>"; 
    while($count!=count($array)){ 
    foreach ($array[$count]->children() as $child) {//stores values in child 
     $getElementTag=$child->getName();//get tag so nom 
     echo '<label>'.$getElementTag.'</label>'." "; 
     echo '<input type="text" value= " '.$child.' " size="30"></intput>'; 
     echo "<br>"; 
     echo "<br>"; 
    } 
     $count++; 
    } 

    echo '<input type="submit" name="modify" value="Update Record">'.'<br>'; 



echo "***************************"; 
echo "</center>"; 
    } 

?> 
<!DOCTYPE html> 
<html> 
    <head> 
     <title>Searching</title> 

    </head> 
    <body> 
<center> 
    <form method="POST" action="searchtest.php"> 
     <label>Enter Student Name</label> 
     <input type="text" name="studentname" pattern="[A-Z][a-z]+" title="Must start with capital letters!" required><br> 
     <br> 
     <input type="submit" name="search" value="search"> 
     </form> 
    </center> 


    </body> 
</html> 

答えて

2

フォーム値がXSLTスクリプトに渡される動的XSLT(XML文書を変更するために使用される変換言語)を考えます。しかし、いくつかの項目は、現在のスクリプトで変更する必要があります。

  1. あなたは$_POST配列を開始し、サーバー側に値を送​​信するために<form>タグが必要です。必要に応じてアクションを追加してください。
  2. それぞれ<input>には、すでに持っている別名を$ getElementTagとする必要があります。サーバー側の値を$_POSTの値でサニタイズすることを検討してください。
  3. ユーザーがこの値を変更する場合には、古いファーストネームを保持するために、非表示の入力フィールドが必要です。このフィールドは、XSLTで適切な<student>ノードを選択するために使用されるため、重要です。

PHPスクリプト以下のスクリプト

は2つのだけif (isset(...)条件文が含まれています。完全なスクリプトに統合して、エコーが<html><head>の上に表示されないようにしてください。また、埋め込まれたXSLT文字列も含まれています。 .iniファイルにXSLTProcessor拡張子(php_xsl.dllまたはphp_xsl.so)が有効になっていることを確認してください。

<?php 

$xml=simplexml_load_file($cd."/FormInput.xml") or die("Error: Cannot Create Object"); 

if (isset($_POST['modify'])) {  

    $oldfirstname=($_POST['oldfirstname']);  
    $firstname=($_POST['firstname']); 
    $lastname=($_POST['lastname']); 
    $student_id=($_POST['student_id']); 
    $gender=($_POST['gender']); 
    $dob=($_POST['dob']); 
    $email=($_POST['email']); 
    $mobilenumber=($_POST['mobilenumber']); 
    $address=($_POST['address']); 
    $cohort=($_POST['cohort']); 
    $programme=($_POST['programme']); 
    $mode=($_POST['mode']); 

    $xslstr = '<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
       <xsl:output version="1.0" encoding="UTF-8" indent="yes" /> 
       <xsl:strip-space elements="*"/> 

        <xsl:template match="@*|node()"> 
         <xsl:copy> 
         <xsl:apply-templates select="@*|node()"/> 
         </xsl:copy> 
        </xsl:template> 

        <xsl:template match="student[firstname=\''.$oldfirstname.'\']"> 
         <xsl:copy> 
          <firstname>'.$firstname.'</firstname> 
          <lasttname>'.$lastname.'</lasttname> 
          <student_id>'.$student_id.'</student_id> 
          <gender>'.$gender.'</gender> 
          <dob>'.$dob.'</dob> 
          <email>'.$email.'</email> 
          <mobilenumber>'.$mobilenumber.'</mobilenumber> 
          <address>'.$address.'</address> 
          <cohort>'.$cohort.'</cohort> 
          <programme>'.$programme.'</programme> 
          <mode>'.$mode.'</mode> 
         </xsl:copy> 
        </xsl:template> 

       </xsl:transform>'; 

    $xsl = new DOMDocument; 
    $xsl->loadXML($xslstr); 

    // Configure the transformer 
    $proc = new XSLTProcessor; 
    $proc->importStyleSheet($xsl); 

    // Transform XML source 
    $newXml = $proc->transformToXML($xml); 

    // Save into new file 
    file_put_contents($cd."/FormInput_php.xml", $newXml); 
} 

if(isset($_POST['search'])) { 
    //query the document 
    $name = $_POST['studentname']; 

    $query = $xml->xpath("/students/student[firstname = '$name']"); 
    $array=$query; 

    $count=0; 
    $size=count($array); 

    echo "<center>"; 
    echo '<form id="contactform" name="contactform" method="post">';  
    while($count!=count($array)){ 
     foreach ($array[$count]->children() as $child) { 
      $getElementTag=$child->getName(); 
      echo '<label>'.$getElementTag.'</label>'." "; 
      echo '<input type="text" name="'. $getElementTag .'" value= "'.$child.'" size="30"></intput>'; 
      echo "<br>"; 
      echo "<br>"; 
     } 
     $count++; 
    } 
    echo '<input type="hidden" name="oldfirstname" value="'.$name.'"></input>'; 
    echo '<input type="submit" name="modify" value="Update Record">'.'<br>'; 


echo "</form>"; 
echo "***************************"; 
echo "</center>"; 
} 

?> 

HTML入力

HTML Form Input

XML出力

を(新しいファイルは、ジェスのStackOverflowが古いスノーを置き換える方法を見て、既存の上書きしません)
<?xml version="1.0" encoding="UTF-8"?> 
<students> 
    <student> 
    <firstname>Jess</firstname> 
    <lasttname>Stackoverflow</lasttname> 
    <student_id>999999</student_id> 
    <gender>female</gender> 
    <dob>10-05-16</dob> 
    <email>[email protected]</email> 
    <mobilenumber>7777777</mobilenumber> 
    <address>Example, Place</address> 
    <cohort>HGJD13D</cohort> 
    <programme>Web development</programme> 
    <mode>FT</mode> 
    </student> 
    <student> 
    <firstname>Jey</firstname> 
    <lastname>Lacroix</lastname> 
    <student_id>150501</student_id> 
    <gender>M</gender> 
    <dob>1990-02-22</dob> 
    <email>[email protected]</email> 
    <mobilenumber>57553536</mobilenumber> 
    <address>Curepipe</address> 
    <cohort>BSE15AFT</cohort> 
    <programme>software engineering</programme> 
    <mode>FT</mode> 
    </student> 
</students> 
関連する問題