FORMULAR senden mit Plausiprüfung ?

Vom Front-End bis SOAP.

Moderator: Moderatoren

Antworten
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

FORMULAR senden mit Plausiprüfung ?

Beitrag 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 ;-)
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: FORMULAR senden mit Plausiprüfung ?

Beitrag 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
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: FORMULAR senden mit Plausiprüfung ?

Beitrag 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>
Gruß
Klaus
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: FORMULAR senden mit Plausiprüfung ?

Beitrag 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
Gruß
Hubert
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 650
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 3 Mal
Danksagung erhalten: 96 Mal
Kontaktdaten:

Re: FORMULAR senden mit Plausiprüfung ?

Beitrag 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).
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: FORMULAR senden mit Plausiprüfung ?

Beitrag 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. ;-)
Gruß
Hubert
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 650
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 3 Mal
Danksagung erhalten: 96 Mal
Kontaktdaten:

Re: FORMULAR senden mit Plausiprüfung ?

Beitrag 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.
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: FORMULAR senden mit Plausiprüfung ?

Beitrag 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 ?
Gruß
Hubert
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: FORMULAR senden mit Plausiprüfung ?

Beitrag 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
Gruß
Klaus
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: FORMULAR senden mit Plausiprüfung ?

Beitrag 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
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: FORMULAR senden mit Plausiprüfung ?

Beitrag von brandelh »

Hallo Rudolf,

ich habe bewußt darauf verzichtet, da die Seite auch ohne Javascript laufen soll.
Gruß
Hubert
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: FORMULAR senden mit Plausiprüfung ?

Beitrag 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
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: FORMULAR senden mit Plausiprüfung ?

Beitrag 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.
Gruß
Hubert
Antworten