Announcement

Collapse
No announcement yet.

XML, XQL, eXist, Javascript und Formulardaten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • XML, XQL, eXist, Javascript und Formulardaten

    Hallo,

    ich bin gearde dabei eine Webapplikation zu erstellen, welche einen Studienplan verwalten soll. Für einen Gast soll es nur möglich sein diesen Studienplan anzuzeigen, für einen Benutzer mit Admin-Rechten, soll das editieren, löschen und hinzufügen von neuen Fächern (subjects), Modulen (modules) und Kursen (courses) möglich sein.

    Das Problem ist folgendes:
    Wenn ein Admin eingeloggt ist, werden die Inhalte nicht nur angezeigt, sondern über eine xql-Querie in eine Textarea geladen. Hier soll der Benutzer nun Veränderungen vornehmen können und diese wiederum persistent in der Datenbank speichern können (gleiches gilt für löschen und Neuanlage).

    Wie bekomme ich also die Formulardaten wieder in die Datenbank? Der Studienplan besteht aus mehreren XML-Dokumenten, wir arbeiten mit einer eXist-DB und die Abfragesprache ist XQL.

    Bin für eure Ratschläge sehr dankbar.
    LG Roman

    Hier meine neuesten Codezeilen:

    Code:
    xquery version "1.0";
    
    declare namespace transform="http://exist-db.org/xquery/transform";
    declare namespace xdb="http://exist-db.org/xquery/xmldb";
    
    declare option exist:serialize "method=xhtml media-type=text/html indent=yes";
    declare variable $database-uri as xs:string { "xmldb:exist:///db" };
    
    let $pass := session:get-attribute("pass")
    let $user := session:get-attribute("user")
    let $login := xdb:authenticate($database-uri, $user, $pass)
    return
    
    <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
            <title>Fächer</title>
            
            <script type="text/javascript">
            <!--    
                function updateDB() {
                
                if ($login) {
                    var form = document.formular;
                    var sub_f_workload = form.sub_f_workload.value;
                    var sub_f_studiensemester = form.sub_f_studiensemester.value;
                }
                for $chSubject in concat("//db/winfbac/subjects/", request:get-parameter("link",""),".xml"){
                    update replace doc($chSubject)/subject/workload[. = $chSubject/subject/workload]  with <workload>{sub_f_workload}</workload>,
                    update replace doc($chSubject)/subject/suggested_semester[. = $chSubject/subject/suggested_semester]  with <suggested_semester>{sub_f_studiensemester}</suggested_semester>
                }
                }
            -->
            </script>
            
        </head>
        <body>
            <h2>SUBJECT</h2>
            {
                let $chSubject := concat("//db/winfbac/subjects/", request:get-parameter("link",""),".xml")
                for $subject in doc($chSubject)/subject
                    return <h2>{$subject/name}</h2>
            }             
            <h3>Details</h3>
            {
            (: I) Eigener Aufbau wenn eingeloggt :)
            if ($login) then (
                
                <form name="formular" method="get" onsubmit="return updateDB()">
                <table border="1">
                    <tr bgcolor="#9acd32">
                        <th>Details</th>
                        <th>Beschreibung</th>
                    </tr>
                    
                    (: Ab hier beginnen Felder :)
                    <tr><td>Workload: </td>
                    <td>            
                    
                    <textarea name="sub_f_workload">
                    {for $subject in doc(concat("//db/winfbac/subjects/", request:get-parameter("link",""),".xml"))/subject/workload
                    return
                        data($subject)}</textarea>
                    
                    </td></tr>
                    
                    <tr><td>Studiensemester: </td>
                    <td>            
                    
                    <textarea name="sub_f_studiensemester">
                    {for $subject in doc(concat("//db/winfbac/subjects/", request:get-parameter("link",""),".xml"))/subject/suggested_semester
                    return
                        data($subject)}</textarea>
                    
                    </td></tr>
                    
                    (: Submit und Reset Button :)
                    <input type="submit" value="Update">
                    <input type="reset" value="Felder leeren">
                
            )
            (: II) Aufbau wenn nicht eingeloggt :)
            else (
                <table border="1">
                    <tr bgcolor="#9acd32">
                        <th>Details</th>
                        <th>Beschreibung</th>
                    </tr>
                    
                    (: Ab hier beginnen Felder :)
                    <tr><td>Workload: </td>
                    <td>
                    
                    for $subject in doc(concat("//db/winfbac/subjects/", request:get-parameter("link",""),".xml"))/subject/workload
                            return
                                data($subject)</td></tr>
                    
                    <tr><td>Studiensemester: </td>
                    <td>
                    
                    for $subject in doc(concat("//db/winfbac/subjects/", request:get-parameter("link",""),".xml"))/subject/suggested_semester
                            return
                                data($subject)</td></tr>
                    
                </table>
            )}
            
        </body> 
    </html>

  • #2
    Wie bekomme ich also die Formulardaten wieder in die Datenbank?
    Mittels einer serverseitigen Sprache wie PERL, PHP, JAVA die in deimen Form-Tag

    <form name="formular" method="get" onsubmit="return updateDB()" action="...." >

    aufgerufen wird
    Christian

    Comment


    • #3
      Hi,

      danke für die schnelle Antwort.
      Was muss ich in das Feld action hineinschreiben?

      LG

      Comment


      • #4
        Die URL des CGI-Programmes, welches die Daten entgegen nimmt und in die DB schreibt
        Christian

        Comment


        • #5
          Könntest du mir das etwas genauer erklären?
          Wie ist der Weg der Daten? Was ist ein CGI-Programm?
          Danke vielmals!

          Comment


          • #6
            http://de.selfhtml.org/servercgi/cgi/cgihtml.htm
            Christian

            Comment


            • #7
              Danke für die Hilfe, werd mich mal einlesen.
              Schönen Abend noch

              Comment


              • #8
                Hallo,

                hab mich jetzt ein wenig eingelesen.
                Also, meine Formularseite schickt die Formulardaten per submit-Button an das CGI-Script weiter.
                In diesem Script kann ich dann die Felder auslesen und verarbeiten (in meinem Fall auch ein XQL-Update durchführen?!).
                Wo lege ich das CGI-Script am Server ab?

                LG Roman

                Comment


                • #9
                  Wo lege ich das CGI-Script am Server ab?
                  Was für eine Sprache? Was für ein Server?
                  Christian

                  Comment


                  • #10
                    Ich arbeite mit einer eXist-Datenbank.
                    Aufgebaut ist das ganze mit xquery-Abfragen und html-forms.
                    Hoffe das hilft dir weiter.

                    LG

                    Comment


                    • #11
                      Nein, da wird es dann sicherlich ein spezielles Verfahren geben
                      Christian

                      Comment

                      Working...
                      X