Drachenmond: Formulardaten nach Fehlerhaften Validierung verschwunden

Ich habe da ein kleineres Problem und finde einfach nicht den Fehler im Skript. Es handelt sich um eine Formular, bei dem eingie Werte vor der Übergabe an ein Folgeformular überprüft validiert werden. Die Daten werden soweit auch richtig übergeben. Das Problem ist allerding, wenn ein Feld Fehlerhaft war, so wird das Formular nach der Fehlermeldung erneut geladen, allerdings sind die Inhalte aud den Feldern verschwunden. Ich verwende ein ganz ähnliches Formular, bei dem das ganze einwandfrei funktioniert. Vielleicht bin ich mal wieder einfach nur betriebsblind geworden. Ich hoffe mal, dass mir hier jemand helfen kann.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Charaktergenerierung Seite 1</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<link rel="stylesheet" href="http://www.drachenmond.info/wp-content/themes/pirates/style.css" type="text/css" media="screen" />

<script type="text/javascript">
<!--
   function GetHeute(){Heute=new Date(); mon=Heute.getMonth()+1; return Heute.getDate()+'.'+mon+'.'+Heute.getFullYear()}

function CheckData()
    {
      var currField   = "";
      var ObligFields = new Array("Spielername","Charaktername","Rasse","Profession","Herkunft","Contage","Erfahrungspunkte","Gesinnung","Gesinnung","Klasse");
      for(var i = 0; i < ObligFields.length; i++)
      {
        currField = ObligFields[i];
        if(document.charakterdaten.elements[currField].value== "")
        {
          alert("Bitte "+currField+" eingeben");
          document.charakterdaten.elements[currField].focus();
          return false;
        }
      }
  var chkZ = 1;
    for(i=0;i<document.charakterdaten.Contage.value.length;++i)
       if(document.charakterdaten.Contage.value.charAt(i) < "0"
       || document.charakterdaten.Contage.value.charAt(i) > "9")
        chkZ = -1;
    if(chkZ == -1)
    {
       alert("Für Contage bitte eine Zahl angeben!");
       document.charakterdaten.contage.focus();
       return false;
     }
 var chkY = 1;
    for(i=0;i<document.charakterdaten.Erfahrungspunkte.value.length;++i)
       if(document.charakterdaten.Erfahrungspunkte.value.charAt(i) < "0"
       || document.charakterdaten.Erfahrungspunkte.value.charAt(i) > "9")
        chkY = -1;
    if(chkY == -1)
    {
       alert("Für Erfahrungspunkte bitte eine Zahl angeben!");
       document.charakterdaten.Erfahrungspunkte.focus();
       return false;
     }

   /*  SpielerTyp MUSS vorhanden sein */
      if (document.charakterdaten.Klasse.options[0].selected)
      {   /*       Universal:                     */
        document.charakterdaten.action = 'charakter_universal.html';
      }
      else if (document.charakterdaten.Klasse.options[1].selected)
      { /*         Magier:                    */
        document.charakterdaten.action = 'charakter_magier.html';
      }
      else if (document.charakterdaten.Klasse.options[2].selected)
      { /*         Abenteurer:                    */
        document.charakterdaten.action = 'charakter_abenteurer.html';
      }
      else if (document.charakterdaten.Klasse.options[3].selected)
      { /*         Kämpfer:                    */
        document.charakterdaten.action = 'charakter_kaempfer.html';
      }
 else
      {
        alert('Bitte Charakterklasse wählen');
        return false;
      }

      return true;
    } /* end CheckData() */

//-->
</script>

</head>
<body onLoad="document.charakterdaten.AngemeldetAm.value=GetHeute()">>
<div id="page">
 <div id="header">
  <div id="headerimg">
  </div>
 </div>
<hr />
 <div id="content" class="narrowcolumn">
  <div align=center>
   <h2>Charakterdaten</h2>
   <br>
  </div>
  <br>
  <br>
  <form name="charakterdaten" method="get" enctype="application/x-www-form-urlencoded" onSubmit="return CheckData()" action="">
  <table align="center" border=0>
   <tr>
        <td colspan="2" align="center">
         <table align="center" border=0>

            <tr>
               <td colspan="2" align="center">
                <table align="center" border=0>
                   <tr>
                      <td align="right">
                        Spielername<sup>*</sup>
                      </td>
                      <td>
                        <input type="text" name="Spielername" size=40 maxlength=255>
                      </td>
                   </tr>
                   <tr>
                      <td height="8">
                      </td>
                   </tr>
                   <tr>
                      <td align="right">
                        Charaktername<sup>*</sup>
                      </td>
                      <td>
                        <input type="text" name="Charaktername" size=40 maxlength=255>
                      </td>
                   </tr>
                   <tr>
                      <td height="8">
                      </td>
                   </tr>
                   <tr>
                      <td align="right">
                        Rasse<sup>*</sup>
                      </td>
                      <td>
                        <input type="text" name="Rasse" size=40 maxlength=255>
                      </td>
                   </tr>
                   <tr>
                      <td height="8">
                      </td>
                   </tr>
                   <tr>
                      <td align="right">
                        Beruf / Profession<sup>*</sup>
                      </td>
                      <td>
                        <input type="text" name="Profession" size=40 maxlength=255>
                      </td>
                   </tr>
                   <tr>
                      <td height="8">
                      </td>
                   </tr>
                   <tr>
                      <td align="right">
                        Herkunft / Heimat<sup>*</sup>
                      </td>
                      <td>
                        <input type="text" name="Herkunft" size=40 maxlength=255>
                      </td>
                   </tr>
                   <tr>
                      <td height="8">
                      </td>
                   </tr>
                   <tr>
                      <td align="right">
                        Titel</sup>
                      </td>
                      <td>
                        <input type="text" name="Titel" size=40 maxlength=255>
                      </td>
                   </tr>
       <tr>
                      <td height="8">
                      </td>
                   </tr>
                   <tr>
                      <td align="right">
                        Contage<sup>*</sup>
                      </td>
                      <td>
                        <input type="text" name="Contage" size=40 maxlength=255>
                      </td>
                   </tr>
                   <tr>
                      <td height="8">
                      </td>
                   </tr>
                  <tr>
                      <td align="right">
                        Erfahrungspunkte<sup>*
                      </td>
                      <td>
                        <input type="text" name="Erfahrungspunkte" size=40 maxlength=255>
                      </td>
                   </tr>
                   <tr>
                      <td height="8">
                      </td>
                   </tr>
                   <tr>
                      <td align="right">
                        Vorteile
                      </td>
                      <td>
         <textarea name="Vorteile" rows=10 cols=29></textarea>
                      </td>
                   </tr>
       <tr>
                      <td height="8">
                      </td>
                   </tr>
       <tr>
                      <td align="right">
                        Nachteile
                      </td>
                      <td>
                        <textarea name="Nachteile" rows=10 cols=29></textarea>
                      </td>
                   </tr>
       <tr>
                      <td height="8">
                      </td>
                   </tr>
       <tr>
                      <td align="right">
                        Sonstiges
                      </td>
                      <td>
                        <textarea name="Sonstiges" rows=10 cols=29></textarea>
                      </td>
                   </tr>
                 <tr>
                 <td height="8">
                 </td>
              </tr>
       <tr>
                      <td align="right">
                        Gesinnung<sup>*</sup>
                      </td>
                      <td>
                       <select name="Gesinnung" size=3 style="width: 200px">
                          <option value = "gut">Gut
                          <option value = "neutral">Neutral
         <option value = "böse">Böse
                       </select>
                      </td>
                   </tr>
       <tr>
                 <td height="8">
                 </td>
              </tr>
       <tr>
                      <td align="right">
                   Klasse<sup>*</sup>
                 </td>
                 <td>
                  <select name="Klasse" size=4 style="width: 200px">
                     <option value="0">Universalcharakter
                     <option value = "1">Spezialisierter Magier
         <option value="2">Spezialisierter Abenteurer
                     <option value = "3">Spezialisierter Kämpfer
                  </select>
                </td>
              </tr>
       <tr>
            <td height="8">
            </td>
         </tr>
       <tr>
           <td align="center" colspan=2>
             <font size="-1">Alle Felder mit * m&uuml;ssen ausgef&uuml;llt werden</font>
             <br>
               <!-- Sicherstellen, dass das Formular nur mit eingeschaltetem JavaSript verwendet wird: -->

<script type="text/javascript">
             <!--
               document.write('<input type="submit" value="Weiter" tabindex=998> <input type="reset" value="Zurücksetzen" tabindex=999>');
             //-->
             </script>

<br>
           </td>
         </tr>
      </table>
               </td>
            </tr>
           </table>
             </td>
          </tr>
        </table>
</form>
<noscript>
<b>Dein Browser unterst&uuml;tzt kein JavaScript oder es ist ausgeschaltet. Ohne JavaScript kannst Du diese Anmeldeseite leider nicht nutzen :-(<br>
Wenn Du Dir den Quelltext ansiehst, siehst Du aber gleich, dass die Scipte harmlos sind...</b>
</noscript>
</div>
<div id="footer">
</div>
</div>
</body>
</html>

  1. Lieber Drachenmond,

    1.) verabscheue ich Deinen Code, denn übersichtlich ist anders, und semantisch ist Dein Code auch nicht. Wozu diese elende Tabelle?

    2.) Abgeschickte Daten verbleiben beim Server. Das erneute Laden einer HTML-Datei bewirkt, dass die Felder erneut befüllt werden müssen, denn die abgeschickten Daten haben mit dem neu geladenen HTML-Dokument ja nix zu tun, oder?

    3.) Um abgeschickte Formulardaten bei einer erneuten Anzeige in das Formular vor-einzutragen, bedarf es eines server-seitigen Scripts. Da wirst Du mit Deinem heißgeliebten JavaScript nicht weiter kommen.

    4.) Verzichte auf den zwingenden Einsatz von JavaScript. Betrachte es als optionale Erweiterung einer Seite, deren Inhalte auch ohne diese Technologie uneingeschränkt nutzbar sein müssen.

    Du darfst Dir gerne mein Gästebuch einmal mit und einmal ohne JavaScript anschauen. Insbesondere beim Erstellen eines neuen Eintrags kannst Du sehen, wie ich JavaScript zur Verbesserung der Seite einsetze, aber keinesfalls die Bedienbarkeit der Seite davon abhängig mache.

    Wenn Dich dann noch interessiert, wie man abgeschickte Werte wieder in ein Formular vor-einträgt, dann rate ich zu dem Suchbegriff "Affenformular".

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Vielen Dank shcon mal für die schnell Antwort.

      Lieber Drachenmond,

      1.) verabscheue ich Deinen Code, denn übersichtlich ist anders, und semantisch ist Dein Code auch nicht. Wozu diese elende Tabelle?

      Ist im Moment erst mal nur ein Entwurf auf der Basis einer bereits funktionierenden (nicht von mir programmierten Seite entstanden. Die Tabelle soll im Anschluss verschwinden, wenn ich die grundlegende Funktion hinbekommen habe.

      2.) Abgeschickte Daten verbleiben beim Server. Das erneute Laden einer HTML-Datei bewirkt, dass die Felder erneut befüllt werden müssen, denn die abgeschickten Daten haben mit dem neu geladenen HTML-Dokument ja nix zu tun, oder?

      Die Daten sollten ja eben noch nicht abgeschickt sein, da sie ja zunächst validiert werden und nur abgeschickt werden sollen, wenn alle Angaben soweit korekt sind, oder habe ich jetzt aus versehen, das so programmiert, dass die Daten doch schon abgesendet werden und das Dokument neu geladen wird? Oh man es ist glaube ich deutlich zu spät für deratige Arbeiten. Ich blicke selber absolut nicht mehr durch.

      3.) Um abgeschickte Formulardaten bei einer erneuten Anzeige in das Formular vor-einzutragen, bedarf es eines server-seitigen Scripts. Da wirst Du mit Deinem heißgeliebten JavaScript nicht weiter kommen.

      Eigentlich bin ich auch kein Freund von Javaskript. Da das Tool aber nicht nur für mich gedacht ist, sondern leider auch auf einem Server eingestzt werden soll, der weder benutzereigne CGIs noch sonstige Serverseitige Skriptsprachen unterstützt, wäre eine Umsetzung mittels des von präferiereten PHP leider kontraproduktiv. An diese Umsetzung werde ich mich wohl im Anshcluss für meine eigene Seite machen.

      4.) Verzichte auf den zwingenden Einsatz von JavaScript. Betrachte es als optionale Erweiterung einer Seite, deren Inhalte auch ohne diese Technologie uneingeschränkt nutzbar sein müssen.

      War im Urpsrungscode so umgestzt und ich habe an diesem Code bislang noch nichts geändert. Wird aber ind er endgültigen Version auf jeden Fall verschwunden sein.

      Das Skript was schon funktioniert und auf fast den gleichen Skripten basiert ist unter der nun geposteten Adresse zu finden. Hier bleiben die Formulardaten bis zur positiven Validierung und Weiterleitung auf die nächste Seite im Formular erhalten.

      1. Hiho.

        Eigentlich bin ich auch kein Freund von Javaskript. Da das Tool aber nicht nur für mich gedacht ist, sondern leider auch auf einem Server eingestzt werden soll, der weder benutzereigne CGIs noch sonstige Serverseitige Skriptsprachen unterstützt, wäre eine Umsetzung mittels des von präferiereten PHP leider kontraproduktiv. An diese Umsetzung werde ich mich wohl im Anshcluss für meine eigene Seite machen.

        Und wie soll das dann funktionieren? Welchen Sinn macht denn ein Formular dessen Daten einfach im Nirvana verschwinden? *kopfkratz* (Und was bitte is das fuern Server? Wir haben 2008, da gibts das alles sogar umsonst oder fuern Taschengeld)

        --
        Trau Dich!
         
        1. [latex]Mae  govannen![/latex]

          Und wie soll das dann funktionieren? Welchen Sinn macht denn ein Formular dessen Daten einfach im Nirvana verschwinden?

          Na ja,man könnte im action-Attribut z.B. einen externen Formmailer-Dienst eintragen. Und ein brauchbarer Formmailer-Dienst ermöglicht auch noch mal eine Überprüfung auf bestimmte Felder. Machbar wär's also rheotetisch.

          (Und was bitte is das fuern Server? Wir haben 2008, da gibts das alles sogar umsonst oder fuern Taschengeld)

          Das ist allerdings wahr. Sogar im Bereich 1-2 Euro/M findet man schon einiges.

          Cü,

          Kai

          --
          Ash nazg durbatulûk, ash nazg gimbatul,ash nazg thrakatulûk, agh burzum-ishi krimpatul
          selfcode sh:( fo:| ch:? rl:( br:< n4:# ie:{ mo:| va:) js:) de:> zu:) fl:( ss:| ls:?
          Mein Selfhtml-Kram
          1. [latex]Mae  govannen![/latex]

            Und wie soll das dann funktionieren? Welchen Sinn macht denn ein Formular dessen Daten einfach im Nirvana verschwinden?

            Na ja,man könnte im action-Attribut z.B. einen externen Formmailer-Dienst eintragen. Und ein brauchbarer Formmailer-Dienst ermöglicht auch noch mal eine Überprüfung auf bestimmte Felder. Machbar wär's also rheotetisch.

            So ähnlich solle es wohl funktionieren. Auf meine Anfage welche skripte serverseitig ausgeführt werden können, sagte mir der Seiteninhaber, dass nur die providerseitig zur verfügten CGIs ausgeführt werden können. Also glaube ich ihm das zunächst einmal. Unter diesen zur Verfügung gestellten CGIs befindet sich ein formmailer, der wohl einigermaßen flexibel sein soll und zum versenden der Formulardaten am Ende eingesetzt werden soll.

            (Und was bitte is das fuern Server? Wir haben 2008, da gibts das alles sogar umsonst oder fuern Taschengeld)

            Das ist allerdings wahr. Sogar im Bereich 1-2 Euro/M findet man schon einiges.

            Ich weiß das, aber bislang konnte ich meine Bekannte nicht davon überzeugen Ihren Anbieter zu wechseln. Ich denke mal sie scheut sich vor dem Domainumzug, aber vielleicht bekomme ich sie ja doch noch überzeugt. Auf jeden Fall danke noch mal an Alle für die Hilfe. Das Probelm ist aus meiner Sicht nun gelöst.

  2. [latex]Mae  govannen![/latex]

    Ich habe da ein kleineres Problem und finde einfach nicht den Fehler im Skript. Es handelt sich um eine Formular, bei dem eingie Werte vor der Übergabe an ein Folgeformular überprüft validiert werden. Die Daten werden soweit auch richtig übergeben. Das Problem ist allerding, wenn ein Feld Fehlerhaft war, so wird das Formular nach der Fehlermeldung erneut geladen, allerdings sind die Inhalte aud den Feldern verschwunden.

    Ja, allerdings kann ich diesen Fehler nur bei Fehleingaben im Feld Contage nachvollziehen.

    Siehst du den Unterschied?

    if(document.charakterdaten.Contage.value.charAt(i) < "0"

    document.charakterdaten.contage.focus();

    Und document.charakterdaten.contage kennt Javascript im Gegensatz zu document.charakterdaten.Contage nicht
    und bricht das Script ab => return false wird nicht mehr zurückgegeben => action="" wird ausgeführt.

    Cü,

    Kai

    --
    Ash nazg durbatulûk, ash nazg gimbatul,ash nazg thrakatulûk, agh burzum-ishi krimpatul
    selfcode sh:( fo:| ch:? rl:( br:< n4:# ie:{ mo:| va:) js:) de:> zu:) fl:( ss:| ls:?
    Mein Selfhtml-Kram
    1. MAe govannen,

      hannon le. Ich danke Dir, das war der Fehler und jetzt funktioniert zumindest die Seite schon mal so wie gewünscht.

      Vielen Dank für die schnelle Antwort