Zum Inhalt springen

Mailformplus Inhalte semantisch prüfen

Erstellt am 17. Februar 2007 · 11 Antworten · letzte Antwort am 13. April 2007

Tags: Frage

Gin ·

Hallo allerseits, einen närrischen Gruß schonmal an all jene, die damit was anfangen können =)

Trotzdem ich bereits über die Suche versucht habe ein Lösung für ein sicherlich winziges Problem zu finden, blieb ich bisher unfündig.

Ich möchte nichts weiter machen, als das Mailformplus Formular neben der Prüfung der Pflichtfelder auf Inhalt auch den Inhalt semantisch zu prüfen. Also bloß, ob im Telefonnummer-Eintrag auch wirklich nur Ziffern etc. stehen. Eine fertige Funktion dafür habe ich bereits in JS, aber wenn ich das in mein Template einfüge und die Funktion mittels: "OnSubmit" aufrufe, wird sie einfach ignoriert.
Ich würde ja mittels PHP arbeiten, allerdings kann ich so eine Prüfunf weder schreiben, noch wüßte ich, wo ich sie einbinden müsste.

Wer hat eine Idee, wie ich fortfahren sollte?

Viele Grüße
Gin

wandler ·

Du kannst Dein Script zb. ins TS-Setup schreiben:

page.headerData.777 = dein JS Code

oder ggf. den Templateautoparser entsprechend konfigurieren, dass
er die Headerdaten Deines Templates integriert. Habe ich aber
noch nie so gemacht...

Gin ·

Hallo wandler,

vielen Dank für deine Antwort, immerhin habe ich noch ein paar Suchbergriffe mehr gefunden und einiges ausprobiert, leider aber ohne Erfolg.
Folgendes habe ich probiert:
deine Zeile angegeben in meinem Page-Objekt - kein Erfolg
JS-Code ins Formular-Template eingebunden innerhalb des Templatebereichs - kein Erfolg
JS-Code in eine Datei ausgelagert und im TS-Setup unter Page ein Template-Objekt erzeugt, dem ich die Datei zugewiesen habe - kein Erfolg
JS-Code in eine Datei ausgelagert und in der index.php eingefügt in:

$this->doc->JScode = '
				<script language="javascript" type="text/javascript" src="check.js">

- kein Erfolg

Ich weiß leider nicht so ganz, wie das funktionieren soll. Am liebsten würde ich den Code auslagern und an geeigneter Stelle den Pfad angeben, aber welche Stelle das sein soll, weiß ich nicht. Bei statischen HTML-Seiten war das bisher nie ein Problem.
Mein form-Tag sieht folgendermaßen aus:

<form name="Formular" method="post" action="index.php" onSubmit="return check()"; enctype="multipart/form-data">

Aber woher soll die Funktion onSubmit wissen, wo check() auszuführen ist?
Hat noch jemand eine Idee?

Vielen, vielen Dank
Gruß Gin

Gin ·

Leider bin ich bei meinem Problem noch keinen Schritt weiter gekommen, das Javascript wird ignoriert, weil ich einfach nicht weiß, wie man es richtig einbindet. Ich finde auch überhaupt keine Anleitung dazu wie das funktionieren könnte.
Weiß vielleicht doch noch jemand, wie ich das JS unterbringen kann?

Vielen Dank

Gin

Pausenbrot ·

Hallo Gin,

kämpfe auch mit dem Mailformplus, aber die Verifizierung per JavaScript funktioniert auf alle Fälle. Hab das Script direkt im HTML-Template stehen, also etwa so:

<!-- ###TEMPLATE_FORM### begin -->

<script language="JavaScript" type="text/JavaScript">
<!--
function submitForm() {
   // Hier der Verifizierungs-Code, mal beispielhaft:
   feld1 = document.buchung.vorname.value;
   feld2 = document.buchung.nachname.value;
   if (feld1 == "" || feld2 == "") {
      alert("Fehlermeldung");
      return false;
   } else {
      return true;
   }
}
//-->
</script>

<form name="buchung" method="post" action="index.php">
   // Hier die Formular-Felder rein
   ...
   ...
   ...
   // Und der Submit-Button:
   <input name="Submit" type="button" onClick="javascript:submitForm(); return false;" value="BUCHEN">
</form>
<!-- ###TEMPLATE_FORM### end -->

Hope this helps!
Martin

Gin ·

Hallo Martin,

dein Post hat in mir wieder Hoffnung erweckt. Dennoch kann ich bisher noch keinen Erfolg verbuchen. Ich poste gleich mal was ich habe, erst hab ich noch zwei Fragen:
Habe gesehen, dass du den JS-Code in <!-- --> geschrieben hast. Warum? Muss man das so machen?
Weiterhin habe ich gesehen, dass du anstelle eines Submit-Buttons einen einfachen Button verwendest.

Viele Grüße
Gin

Gin ·

Hier ist mal mein Template. Ich werd noch verrückt: Wenn ich einen normalesn Button nehme, passiert gar nichts, das Formular wird nicht mal mehr abgeschickt =( (Wird nicht die mitgelieferte index.php genutzt?? Muss ich eine eigene erstellen?)
Wenn ich einen Button vom Typ submit nehme, wird nach wie vor der php-Code ausgeführt, das Javascript wird aber komplett ignoriert, die alert-Funktion wird auch nicht ausgeführt. Ich hab auch zu Beginn des JS <!-- und am Schluss //--> ausprobiert, aber das bringt auch nichts. *verzweifel*

<!-- ###TEMPLATE_FORM### begin -->
<script language="JavaScript" type="text/javascript">
 
var checkString = [ "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.,äÄöÖüÜß-_ ", 
					"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.,äÄöÖüÜß-_ ",		
				    "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.äÄöÖüÜß- 0123456789&/()',#~+_",	// Firma
				    "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.äÄöÖüÜß- 0123456789&/()',#~+_" //Betreff
					"0123456789/-+ ",									// Tel
					"0123456789/_@abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-",		// eMail
					"0123456789/_@abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-äÄöÖüÜß ;,!:()&%$§'#+*~?={}<>|²³"]; // Anliegen 

var errMes = [ "Ihre Anrede",				// Anrede
		     "Ihren Namen",			// Name
		     "Ihre Firma",				// Firma
		     "Ihren Betreff",			// Betreff
		     "Ihre Telefonnummer",		// Tel
			 "Ihre E-Mail Adresse",		// eMail
			 "Ihr Anliegen"			 ];	// Anliegen

function check()
{	
alert("Test"); // soll nur helfen zu sehen, ob das JS ueberhaupt angesprochen wird
  for(i=0; i<6; i++)
  { 
    var element = window.document.forms[0].elements[i];
    var eingabe = element.value;
	var length = eingabe.length;
	
	if(i!=0 && i!=2 && i!=3)
	{
     if(length > 0)
     {
        
        var _checkString = checkString[i];
	  for(var c = 0; c < length; c++)
	  {
	    if(_checkString.indexOf(eingabe.charAt(c))==-1)
	    {
	      alert("Bitte geben Sie " + errMes[i] + " ein!");
	      element.value = "";
	      element.focus();
	      return false;
	    }
	   }
      }
	  else 
      {
       alert("Bitte füllen Sie mindestens alle mit '*' gekennzeichneten Felder des Formulars aus!");
       element.value = "";
	   element.focus();
       return false;
      }
	 }
	if(i==0 || i==2 || i==3)
	{
	 if(length > 0)
     {
       var _checkString = checkString[i];
	  for(var c = 0; c < length; c++)
	  {
	    if(_checkString.indexOf(eingabe.charAt(c))==-1)
	    {
	      alert("Bitte geben Sie " + errMes[i] + " korrekt oder gar nicht ein!");
	      element.value = "";
	      element.focus();
	      return false;
	    }
	   }
      }
	  
	}
  }

  return true;
}

</script>
<form name="Formular" method="post" action="index.php" onSubmit="javascript:check();" enctype="multipart/form-data">
<input type="hidden" name="id" value="###PID###">
<input type="hidden" name="submitted" value="1">
<input type="hidden" name="L" value="0"> 
<input type="hidden" name="type" value="###value_type###"> 
###ERROR###

<table border="0" cellspacing="0" cellpadding="0" ID="Table1">
<tr>
<td class="fuss">Felder mit einem Sternchen (*) dahinter sind Pflichtfelder und müssen von Ihnen ausgefüllt werden.<br></td>
</tr>
</table>
<table border="0" cellspacing="2" cellpadding="0">
<tr>
	<td valign="top">Anrede:</td>
	<td valign="top"><select name="who" style="WIDTH:320px" ID="Select1">
		<option value="leer" ###selected_topic_leer### selected></option>
		<option value="sir" ###selected_topic_webdesign###>Herr</option>
		<option value="madam" ###selected_topic_hosting###>Frau</option>
		</select>###error_who###</td>
</tr>
<tr>
	<td valign="top">Name:* ###CAPTCHA###</td>
	<td valign="top"><input type="text" name="name" value="###value_name###">###error_name###</td>
</tr>
<tr>
	<td valign="top">Firma:</td>
	<td valign="top"><input type="text" name="firm" value="###value_firm###" ID="Text1">###error_firm###</td>
</tr>
<tr>
	<td valign="top">Betreff:</td>
	<td valign="top"><input type="text" name="subject" value="###value_subject###">###error_subject###</td>
</tr>
<tr>
	<td valign="top">Email:*</td>
	<td valign="top"><input type="text" name="email"  value="###value_email###">###error_email###</td>
</tr>
<tr>
	<td valign="top">Telefon:*</td>
	<td valign="top"><input type="text" name="phone" value="###value_phone###">###error_phone###</td>
</tr>
<tr>
	<td valign="top">Themenbereich:</td>
	<td valign="top"><select name="topic" style="WIDTH:320px">
		<option value="leer" ###selected_topic_leer### selected></option>
		<option value="general" ###selected_topic_webdesign###>Allgemeines</option>
		<option value="sanitaer" ###selected_topic_hosting###>Sanitär</option>
		<option value="heat" ###selected_topic_price###>Heizung</option>
		<option value="feedback" ###selected_topic_feedback###>Feedback</option>
		</select>###error_topic###</td>
</tr>
<tr>
	<td valign="top">Anliegen:*</td>
	<td valign="top"><textarea cols="50" rows="5" name="text" style="WIDTH:320px">###value_text###</textarea>###error_text###</td>
</tr>
<tr>
	<td>&nbsp;</td>
	<td valign="top" align="left"><input type="submit" value="Senden"></td>
</tr>
</table>
</form>
<!-- ###TEMPLATE_FORM### end -->




<!-- ###TEMPLATE_SUBMITTED_OK### begin
  OPTIONAL - will be shown if form was submitted and all required fields were filled out
-->
<b>Vielen Dank, Ihre Anfrage wird bearbeitet.</b>
<!-- ###TEMPLATE_SUBMITTED_OK### end -->


<!-- ###TEMPLATE_EMAIL_USER### begin
    OPTIONAL - this will be the email text that is sent to the user (plaintext!)
-->Hallo ###name###, Sie haben das Formular ausgefüllt und ??: ###subject###

Wir werden uns baldmöglichst bei Ihnen melden.
<!-- ###TEMPLATE_EMAIL_USER### end -->

 

 

<!-- ###TEMPLATE_EMAIL_RECEIVER### begin
    OPTIONAL - this will be the email text that is sent to the admin (plaintext!)
    (admin-email = the email you can specify in the mailformplus plugin)
-->Sehr geehrter Herr Scheuer, eine Anfrage ist über Ihr Webportal eingegangen: 
name: ###name### subject: ###subject###

Mit der Bitte um Bearbeitung. Kontaktadresse: ###email###
<!-- ###TEMPLATE_EMAIL_RECEIVER### end -->
 



<!-- ###TEMPLATE_ERROR### begin -->
<!-- ###ERROR_START### begin 
this is used for the global error marker ###ERROR### -->

<font color="red">Folgende Fehler sind aufgetreten:
<ul>
<!-- ###ERROR_START### end -->


<!-- ###ERROR_END### begin 
this is used for the global error marker ###ERROR### -->
</ul>
</font>
<!-- ###ERROR_END### end -->

<!-- ###ERROR_name### begin -->
<li>Bitte geben Sie Ihren Namen an
<!-- ###ERROR_name### end -->
 
 
 <!-- ###ERROR_email### begin -->
<li>Bitte geben Sie Ihre Email-Adresse an
<!-- ###ERROR_email### end -->

<!-- ###ERROR_phone### begin -->
<li>Bitte geben Sie Ihre Telefonnummer an
<!-- ###ERROR_phone### end -->

<!-- ###ERROR_text### begin -->
<li>Bitte geben Sie Ihr Anliegen an
<!-- ###ERROR_text### end -->
</li>
<!-- ###TEMPLATE_ERROR### end -->

=(
Gin

Gin ·

Ich verzweifle noch.

Bisher bleibt mir nur die Möglichkeit die Inhaltselemente daraufhin zu prüfen, ob sie leer sind, oder nicht.
Ich habe ein Validierungsscript in Javascript und alles scheitert daran, dass ich es nicht einbinden kann! Das kann doch nicht wahr sein.

Sollte nochmal jemand einen Hinweis für mich haben, ich danke tausendfach!

Gruß Gin

steffenk ·

verzweifeln ? Kein Grund 😉

Hier habe ich ein Beispiel mit mailformplus, wo ich eine Ajax-Validierung eingebaut habe:
http://www.sk-typo3.de/Mailformplus.214.0.html

Dabei habe ich einfach auf der Seite ein Ext-Template mit dem Javascript:

page.headerData.7777 = TEXT
page.headerData.7777.value (
<link rel="stylesheet" type="text/css" href="fileadmin/css/mailform.css" />
<script type="text/javascript" src="fileadmin/templates/mailforms/prototype.js"></script>
<script type="text/javascript" src="fileadmin/templates/mailforms/effects.js"></script>
<script type="text/javascript" src="fileadmin/templates/mailforms/validation.js"></script>
)

und darunter das nötige TS für mailformplus.
Es ist nichts spezielles drin, alles über source der Seite einsehbar 😉

Gin ·

Hm... das erste Mal, dass dein Eintrag mir nicht den Kopfschmerz nimmt =)
Offenbar liegt es überhaupt nciht an der einbindung des JavaScripts. Das wird zwar absolut ignoriert, aber ich hab es so eingebunden, wie ihr das vorschlagt udn auch auf 300 andere Möglichkeiten... das kann es also nicht sein.

Ich verstehe auch leider die bei Mailformplus mitgelieferte index.php nicht, somit kann ich auch nicht sagen, ob es an ihr liegt.
Immerhin habe ich festgestellt, dass das Hidden-Feld im html-Template, das sagt "submitted" darüber entscheidet, ob nun die php-Prüfung ausgeführt wird oder nicht. Das Formular wird aber auch nicht abgeschickt, wenn man das Feld auskommentiert.
Ich hab langsam einfach den Verdacht, dass ich was ganz anderes Grundsätzlich falsch mache und zum Geier, die typo3.org funktioniert auch nicht richtig, so dass ich mir die Anleitung nicht nochmal diesbezüglich anschauen kann.
Wahrscheinlich liegt der Fehler im TS?
Bisher habe ich quasi keins, außer der Zuweisung des Templates.
Aber welches man einbinden muss, erfahre ich doch sonst nirgends, oder?

Grüße von Gin

Gin ·

So, ich markiere den Thread mal als gelöst, auch wenn das nicht ganz richtig ist.
Ich habe noch immer keine Möglichkeit gefunden, mein Jacascript ausführen zu lassen, aber ich hab die Stelle gefunden, wo die Fehlerüberprüfung stattfindet und diese per TS richtig einbinden können. Da konnte ich dann noch die mir fehlenden Überprüfungen hinzu schreiben.

Vielen Dank für alle Interessierten =)

Viele Grüße
Gin

ToM04 ·

Hi Gin,

meine Vermutung zu deinem Prob. Du willst bei onSubmit dein Script aufrufen. Bei onSubmit ist der Aufruf wahrscheinlich zu spät. Mach einfach statt den Submit-Button einen normalen Link. Auf onClick rufst du deine Javascriptfunktion auf.

Ist alles ok, dann einfach document.formularname.submit(); um das Formular abzuschicken.

ToM