Seite 1 von 1

FORMULAR senden mit Plausiprüfung ?

Verfasst: Do, 14. Mär 2013 9:25
von brandelh
Hi,

in meinen CGI Programmen habe ich INPUT Felder, OK und CANCEL Buttons, jeweils mit Namen:

Code: Alles auswählen

    ...
    <H3>Überschrift</H3>
    <FORM ACTION="{CGI_EXE_NAME}" METHOD="post">
       Name
       <INPUT id="NAME" NAME="NAME" VALUE="" title="Name eingeben"> <br>
       Vorname
       <INPUT id="VNAM" NAME="VNAM" VALUE="" title="Vorname eingeben"> <br>
       PLZ
       <INPUT id="PLZ" NAME="PLZ" VALUE="" title="PLZ eingeben"> <br>
       ...
       <INPUT TYPE="Submit" class='Button' NAME='SUBMITBUTTON_SAVE' VALUE="Daten speichern" title="Eingegebene Daten speichern !">
       ...
    </FORM>
    ...
Ich persönlich vermeide Scripts wo es nur geht und validiere auf dem Server ... dummerweise sehen das nicht alle so ;-)
Nun soll vor dem Speichern eine Plausiprüfung stattfinden und wenn nicht alle Felder ausgefüllt sind eine MsgBox mit "Nicht alle Felder ausgefüllt, dennoch speichern ?" JA / NEIN angezeigt werden. Ich vermute das geht nur über Java-Script als Clickevent vom Button "SUBMITBUTTON_SAVE" (der Name dient meinem CGI Programm zu erkennen welcher SUBMIT Button gedrückt wurde, es gibt bei mir mehrere ;-) ) ... eventuell brauche ich ja auch noch eine ID ... aber ich habe keine Ahnung wie man das mit Javascript macht, hat jemand Beispielcode ?

PS: der Beispielcode wurde vereinfacht hier abgebildet, Übertragungsfehler sind daher immer möglich ;-)

Re: FORMULAR senden mit Plausiprüfung ?

Verfasst: Do, 14. Mär 2013 9:45
von Martin Altmann
Moin,
meine erste Adresse ist in solchen Fällen immer:
http://www.selfhtml.org/
Wärmstens zu empfehlen!!!
Dort findest Du z.B.: http://forum.de.selfhtml.org/archiv/201 ... /#m1453453

Viele Grüße,
Martin

Re: FORMULAR senden mit Plausiprüfung ?

Verfasst: Do, 14. Mär 2013 10:00
von Koverhage
Aus Selfhtml, wenn eine Falscheingabe passiert, wird sogar der Focus auf das entsprechende Feld gesetzt.

Code: Alles auswählen

<html>
<head>
<title>Formulareingaben &uuml;berpr&uuml;fen</title>
<script type="text/javascript">
function chkFormular () {
  if (document.Formular.User.value == "") {
    alert("Bitte Ihren Namen eingeben!");
    document.Formular.User.focus();
    return false;
  }
  if (document.Formular.Ort.value == "") {
    alert("Bitte Ihren Wohnort eingeben!");
    document.Formular.Ort.focus();
    return false;
  }
  if (document.Formular.Mail.value == "") {
    alert("Bitte Ihre E-Mail-Adresse eingeben!");
    document.Formular.Mail.focus();
    return false;
  }
  if (document.Formular.Mail.value.indexOf("@") == -1) {
    alert("Keine E-Mail-Adresse!");
    document.Formular.Mail.focus();
    return false;
  }
  if (document.Formular.Alter.value == "") {
    alert("Bitte Ihr Alter eingeben!");
    document.Formular.Alter.focus();
    return false;
  }
  var chkZ = 1;
  for (i = 0; i < document.Formular.Alter.value.length; ++i)
    if (document.Formular.Alter.value.charAt(i) < "0" ||
        document.Formular.Alter.value.charAt(i) > "9")
      chkZ = -1;
  if (chkZ == -1) {
    alert("Altersangabe keine Zahl!");
    document.Formular.Alter.focus();
    return false;
  }
}
</script>
</head>
<body>

<h1>Formular</h1>

<form name="Formular" action="http://de.selfhtml.org/cgi-bin/formview.pl"
  method="post" onsubmit="return chkFormular()">
<pre>
Name:     <input type="text" size="40" name="User">
Wohnort:  <input type="text" size="40" name="Ort">
E-Mail:   <input type="text" size="40" name="Mail">
Alter:    <input type="text" size="40" name="Alter">
Formular: <input type="submit" value="Absenden"><input type="reset" value="Abbrechen">

Zum Absenden muss eine Internet-Verbindung bestehen!
</pre>
</form>

</body>
</html>

Re: FORMULAR senden mit Plausiprüfung ?

Verfasst: Do, 14. Mär 2013 10:17
von brandelh
meine erste Adresse ist in solchen Fällen immer:
Bei HTML und CSS suche ich dort auch immer, bei JavaScript fiel es mir nicht ein :(
Nunja viel Infos und ein steiniger Weg beim Suchen ... ;-)

und ein schönes Beispiel von Klaus, muss ich mir mal ansehen :D

Re: FORMULAR senden mit Plausiprüfung ?

Verfasst: Do, 14. Mär 2013 10:34
von nightcrawler
Wenn die Prüfung recht komplex serverseitig erfolgen sollte, so kannst du auch einen AJAX-call absetzen (zB bei jedem Fokuswechsel oder jeder Änderung in den Textfeldern) und bei erfolgreicher Prüfung den Submit-Button freigeben (bzw in einem Bereich die Fehlermeldungen ausgeben).

Re: FORMULAR senden mit Plausiprüfung ?

Verfasst: Do, 14. Mär 2013 12:21
von brandelh
nightcrawler hat geschrieben: so kannst du auch einen AJAX-call absetzen
AJAX ist bei mir immer noch ein Putzmittel :roll: dazu reichen meine Kenntnisse nicht. ;-)

Re: FORMULAR senden mit Plausiprüfung ?

Verfasst: Do, 14. Mär 2013 16:17
von nightcrawler
brandelh hat geschrieben:AJAX ist bei mir immer noch ein Putzmittel :roll: dazu reichen meine Kenntnisse nicht. ;-)
JQuery einbinden, dann mit diesem Skript Daten senden und Antwort empfangen:

Code: Alles auswählen

function SendData(_url, _frm, _div, _link)
{
  var fields = $(_frm).serializeArray();
  var json=JSON.stringify(fields);
  //alert(_url+'...'+_frm+'...'+_div+'...'+json);
  $.ajax({
        url: _url,
        data: $.parseJSON(json),
        datatype: "json",
        type: "POST",
        success: function(data) { SendDataResponse(data, _div, _link); }
  });
  return false;
}

function SendDataResponse(data, div, link) 
{
   var response = $.parseJSON(data);
   if (response.result=='success')
   {
      //alert(div+'...'+link);
      $(div).load(link);
   }
   else
   {
     alert("Fehler");
   }
}
Hier sende ich Daten aus einem Formular ab. Ist das Senden erfolgreich (also ein einfaches echo '{"result":"success"}';), so wird das DIV anhand eines Links neu geladen.

Re: FORMULAR senden mit Plausiprüfung ?

Verfasst: Do, 14. Mär 2013 17:52
von brandelh
So ich habe jetzt den Vorschlag von Klaus eingebaut und erhalte auch beim Klicken auf die Submit Buttons eine Prüfung.
Dummerweise aber auch bei meinem Cancel Button ... (der soll zurück ohne Prüfung und ohne Speicherung) ...

Code: Alles auswählen

<script type="text/javascript">
       function chkForm1 () {
          if (document.Form1.MI_LFD_NUMMER.value != "000" ) {
             if (document.Form1.FLAECHE_HZ.value == "" ) {
                alert("Bitte m&sup2; eingeben.");
                document.Form1.FLAECHE_HZ.focus();
                return false;
             }
             if (document.Form1.FLAECHE_WW.value == "" ) {
                alert("Bitte m&sup2; eingeben.");
                document.Form1.FLAECHE_WW.focus();
                return false;
             }
             if (document.Form1.FLAECHE_NK.value == "" ) {
                alert("Bitte m&sup2; eingeben.");
                document.Form1.FLAECHE_NK.focus();
                return false;
             }
          }
       }
    </script>
  </head>

  <!-- /* HTML_ShowEditNutzer() */ -->

  <BODY>
    <TITLE>Eingabe</TITLE>
    <H1>Kunde bearbeiten</H1>
    <FORM name="Form1" ACTION="MyCGI.EXE" METHOD="post" onsubmit="return chkForm1()">
      <P>
      <table>
         <tr>
           <td> WHG-Nr. </td>
           <td><INPUT id='WOHNUNG_NR' name='WOHNUNG_NR' value="002" SIZE="20"    MAXLENGTH="18"  autofocus ></td>
           <td></td>
         </tr>
         <tr>
           <td> Lfd-Nr. </td>
           <td class='Bold'>002</td>
           <td></td>
         </tr>
         ...
         <tr>
           <td> m&sup2; HZG </td>
           <td><INPUT id='FLAECHE_HZ' name='FLAECHE_HZ' value="32,160" SIZE="10" MAXLENGTH="10" style='color=blue;font-weight:bold;text-align:right'></td>
           <td></td>
         </tr>
         <tr>
           <td> m&sup2; WW  </td>
           <td><INPUT id='FLAECHE_WW' name='FLAECHE_WW' value="32,160" SIZE="10" MAXLENGTH="10" style='color=blue;font-weight:bold;text-align:right'></td>
           <td></td>
         </tr>
         <tr>
           <td> m&sup2; HNK </td>
           <td><INPUT id='FLAECHE_NK' name='FLAECHE_NK' value="34,400" SIZE="10" MAXLENGTH="10" style='color=blue;font-weight:bold;text-align:right'></td>
           <td></td>
         </tr>
         ...
      </table>
      <p>
       <INPUT TYPE='Submit' class='Button' VALUE="Speichern und zur&uuml;ck"
                            NAME='SUBMITBUTTON_ACTION_SAVE_OK'
                            title="Daten speichern und Eingabe beenden.">
       <INPUT TYPE='Submit' class='Button' VALUE="Speichern"
                            NAME='SUBMITBUTTON_ACTION_SPEICHERN'
                            title="Daten speichern">
       <INPUT TYPE='Submit' class='Button' VALUE="Zur&uuml;ck"
                            NAME='SUBMITBUTTON_ACTION_EINGABE ABBRECHEN'
                            title="Eingabe ohne Speicherung beenden.">
      </p>
      ...
      <INPUT type="HIDDEN" name="MI_LFD_NUMMER" value="002"></INPUT>
    </FORM>
Ich weiß, dass mein "CANCEL" Button ("Zürück zur Auswahlliste") ein SUBMIT Button ist, ein RESET nützt mir nichts, da ja die CGI-EXE wieder die Auswahlliste anzeigen soll.
Kann ich oben im Script abfangen, dass der Button SUBMITBUTTON_ACTION_EINGABEABBRECHEN gedrückt wurde ?

Re: FORMULAR senden mit Plausiprüfung ?

Verfasst: Do, 14. Mär 2013 18:52
von Koverhage
Was passiert bei
if (document.Formular.Name.value == "SUBMITBUTTON_ACTION_EINGABE ABBRECHEN")

Kann sein das document.Formular in dem Zusammenhang falsch ist, aber ich glaube so oder so ähnlich geht es

Re: FORMULAR senden mit Plausiprüfung ?

Verfasst: Fr, 15. Mär 2013 8:54
von Rudolf
Hallo,
ich lege den Scriptaufruf direkt auf den Submitbutton
<input type="submit" name="Submit" value="Speichern" action="javascript:meinscript();">
Zurück mit
<input type="submit" name="back" value="zurück" action="javascript:history.back();">
oder
<input type="submit" name="back" value="zurück" action="javascript:window.close();">
oder mit href
<a href="javascript:meinsrcipt();">

und nicht in die form action, im Script kannst Du dann mit document.formularname.submit() senden

Code: Alles auswählen

<SCRIPT LANGUAGE="JavaScript">
<!--
function meinscript(r)
{
    document.formularname.submit();
}
//-->
</SCRIPT>


Grüße
Rudolf

Re: FORMULAR senden mit Plausiprüfung ?

Verfasst: Fr, 15. Mär 2013 9:10
von brandelh
Hallo Rudolf,

ich habe bewußt darauf verzichtet, da die Seite auch ohne Javascript laufen soll.

Re: FORMULAR senden mit Plausiprüfung ?

Verfasst: Fr, 15. Mär 2013 9:21
von Rudolf
Hallo Hubert,
aber ohne Script gehts nicht, sogar die message box ist ja javascript
Oder meinst Du eigene Script Funktionen einbinden ?
Grüße
Rudolf

Re: FORMULAR senden mit Plausiprüfung ?

Verfasst: Fr, 15. Mär 2013 10:56
von brandelh
Ich habe jetzt wieder auf serverseitige Prüfung umgestellt, JavaScript ist nicht mein Ding und bis auf wenige Ausnahmen (Seite zurück) habe ich es nicht verwendet.
Ein anderes Problem war, dass ich wegen OEM/ANSI Texten vor dem Versenden der Seite alle Umlaute gegen HTM Zeichen tausche, die erscheinen aber dann genauso in der msgbox.

Die EXE ist schon einige Jahre alt und hat nachträglich auch Sprachunterstützung erhalten. Das macht den Quellcode immer komplexer und die HTML Seiten werden fast ausschließlich aus der EXE erzeugt.