[w3concepts.form.v1] doppeltes size attribut

Gesperrt
Jamest
Beiträge: 137
Registriert: Mi 2. Aug 2006, 09:29
Kontaktdaten:

[w3concepts.form.v1] doppeltes size attribut

Beitrag von Jamest »

Hallo,

ich setze das Formular von w3concepts 1, und mir is aufgefallen, das das attribut size doppelt generiert wird.

Folgenden Code setze ich in der Formularkonfiguration ein:

Code: Alles auswählen

Ihr Name:*	###name:kontakt_name; type:text; mandatory:true; size:25; minlength:5;###
Ihre Firma: 	###name:kontakt_firma; type:text; size:25; minlength:5;###
Ihre Email:* 	###name:kontakt_email; type:text; mandatory:true; size:25; minlength:5; valid:email;###
Ihr Betreff:* 	###name:kontakt_betreff; type:text; mandatory:true; size:25; minlength:5;###
Ihre Nachricht:* 	###name:kontakt_nachricht; type:textarea; mandatory:true; cols:30; rows:5;###  
Daraus wird dann letztendlich wenn ich mir den Quelltext der seite anschaue, folgendes generiert:

Code: Alles auswählen

<tr>
<td style="width: 150px;">Ihr Name:*<br /></td>
<td><input type="text" name="kontakt_name" size="25" size="25" value=""  /></td></tr>
<tr>
<td>Ihre Firma:</td>
<td><input type="text" name="kontakt_firma" size="25" size="25" value=""  /></td></tr>
<tr>
<td>Ihre Email:*</td>
<td><input type="text" name="kontakt_email" size="25" size="25" value=""  /></td></tr>
<tr>
<td>Ihr Betreff:* </td>

<td><input type="text" name="kontakt_betreff" size="25" size="25" value=""  /> </td></tr>
<tr>
<td>Ihre Nachricht:* </td>
<td><textarea name="kontakt_nachricht" cols="30" rows="5" wrap="virtual" ></textarea>&nbsp;&nbsp; </td></tr>
<tr>
wie man sieht taucht das Attribut size doppelt auf, das führt dazu das die seite nicht valide wird.

Hier poste ich nochmal den Modul Output, wenn sonst noch etwas fehlt fragt mich einfach.

Code: Alles auswählen

<?php

/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname   :     w3concepts.form.v1
* Author      :     Andreas Kummer
* Copyright   :     mumprecht & kummer w3concepts
* Created     :     20-08-2004
* Modified    :     20-08-2004
************************************************/

class w3form {

	var $email, $aufgedroeselt, $form, $formularFeld;

	function w3form() {
	}

	// PRIVATE
	function sendEmail() {
		$this->aufdroeseln($this->suppress('sent'));
		$this->generateEmailMessage();
		mail($this->email['adresses'],$this->email['subject'],$this->email['message'],"From: {$this->email['from']['name']} <{$this->email['from']['email']}>\nReply-To: {$this->email['from']['email']}\nX-Mailer: PHP/" . phpversion());
	}

	// PRIVATE
	function aufdroeseln($aufzudroeseln,$prefix = '') {
		foreach ($aufzudroeseln as $key => $value) {
			if (is_array($value)) {
				$this->aufdroeseln($value,$key." ");
			} else {
				$this->aufgedroeselt["{$prefix}{$key}"] = $value;
			}
		}
	}

	// PRIVATE
	function add2Message($key,$value) {
		if (strlen($key) > 25 OR strlen($value) > 54) {
			$this->email['message'] .= "$key\n$value\n";
		} else {
		$this->email['message'] .= $key;
		$this->email['message'] .= str_repeat(' ',25-strlen($key));
		$this->email['message'] .= "$value\n";
		}
	}

	// PRIVATE
	function generateEmailMessage() {
		if ($this->aufgedroeselt) foreach ($this->aufgedroeselt as $key => $value) {
			$this->add2Message($key,$value);
		}
	}

	// PRIVATE
	function suppress() {
		$suppress = func_get_args();
		foreach ($_POST as $key => $value) {
			if (array_search($key,$suppress) === false) $fields[$key] = $value;
		}
		return $fields;
	}



	// PUBLIC
	function addEmailAdress($email) {
		if (empty($this->emailAdresses)) {
			$this->email['adresses'] .= "$email";
		} else {
			$this->email['adresses'] .= ", $email";
		}
	}

	// PUBLIC
	function setEmailSubject($subject) {
		$this->email['subject'] = $subject;
	}

	// PUBLIC
	function setEmailFrom($email,$name) {
		$this->email['from']['email'] = $email;
		$this->email['from']['name'] = $name;
	}

	// PUBLIC
	function setForm($form) {
		$this->form['form'] = $form;
	}

	// PUBLIC
	function setAnswer($answer) {
		$this->form['answer'] = $answer;
	}

	// PUBLIC
	function setBackgroundError($color) {
		$this->form['colorError'] = $color;
	}

	// PRIVATE
	function formularInterpretation(&$formular) {
		$felder = split('###',$formular);
		for ($i=1;$i<count($felder);$i=$i+2) {
			$attributte = split(';',trim($felder[$i]));
			foreach ($attributte as $attribut) {
				$namewert = split(':',trim($attribut));
				if ($namewert[0] != 'option' && $namewert[0] != 'optionvalue') {
					$feld["{$felder[$i]}"]["{$namewert[0]}"] = $namewert[1];
				} else {
					$feld["{$felder[$i]}"]["{$namewert[0]}"][] = $namewert[1];
				}
			}
		}
		return $feld;
	}

	// PRIVATE
	function formularAusgabe($sent = false) {
		echo '<form action="" method="post">';
		echo '<input type="hidden" name="sent" value="true" />';
		$formular = $this->form['form'];
		$formulardaten = $this->formularInterpretation(&$formular);
		$formular = split('###',$formular);
		foreach ($formular as $formularteil) {
			if (!empty($formulardaten["{$formularteil}"])) {
				$this->formularFeld($formulardaten["{$formularteil}"],$sent);
			} else {
				echo $formularteil;
			}
		}
		echo '</form>';
	}

	// PRIVATE
	function formularFeld($attribute,$sent) {
		$parameter = "name=\"{$attribute['name']}\"";
		if ($sent && !$this->formularFeldKorrekt(&$attribute)) $style ="style=\"background-color:{$this->form['colorError']};\"";
		switch ($attribute['type']) {
			case 'select':
			case 'password':
			case 'text':
				if (!empty($attribute['size'])) $parameter .= " size=\"{$attribute['size']}\"";
				break;
		}
		switch ($attribute['type']) {
			case 'textarea':
			case 'text':
				if (!empty($attribute['size'])) $parameter .= " size=\"{$attribute['size']}\"";
				if (!empty($attribute['value'])) $value = $attribute['value'];
				if (!empty($_POST["{$attribute['name']}"])) $value = $_POST["{$attribute['name']}"];
				break;
		}
		switch ($attribute['type']) {
			case 'text':
				echo "<input type=\"text\" $parameter value=\"$value\" $style />";
				break;
			case 'password':
				echo "<input type=\"password\" $parameter value=\"$value\" $style />";
				break;
			case 'textarea':
				echo "<textarea name=\"{$attribute['name']}\" cols=\"";
				echo (empty($attribute['cols']))?('20'):($attribute['cols']);
				echo "\" rows=\"";
				echo (empty($attribute['rows']))?('2'):($attribute['rows']);
				echo "\" wrap=\"virtual\" $style>$value</textarea>";
				break;
			case 'select':
				echo "<select $parameter $style>";
				for ($i=0;$i<count($attribute['option']);$i++) {
					if (!empty($attribute['optionvalue'][$i])) {
						if (!empty($_POST["{$attribute['name']}"]) && $_POST["{$attribute['name']}"] == $attribute['optionvalue'][$i]) {
							echo "<option value=\"{$attribute['optionvalue'][$i]}\" selected=\"selected\">{$attribute['option'][$i]}</option>\n";
						} else {
							if (empty($_POST["{$attribute['name']}"]) && !empty($attribute['optionvalue'][$i]) && $attribute['optionvalue'][$i] == $attribute['value']) {
								echo "<option value=\"{$attribute['optionvalue'][$i]}\" selected=\"selected\">{$attribute['option'][$i]}</option>\n";
							} else {
								echo "<option value=\"{$attribute['optionvalue'][$i]}\">{$attribute['option'][$i]}</option>\n";
							}
						}
					} else {
						if (!empty($_POST["{$attribute['name']}"]) && $_POST["{$attribute['name']}"] == $attribute['option'][$i]) {
							echo "<option selected=\"selected\">{$attribute['option'][$i]}</option>\n";
						} else {
							if (empty($_POST["{$attribute['name']}"]) && $attribute['option'][$i] == $attribute['value']) {
								echo "<option selected=\"selected\">{$attribute['option'][$i]}</option>\n";
							} else {
								echo "<option>{$attribute['option'][$i]}</option>\n";
							}
						}
					}
				}
				echo "</select>";
				break;
			case 'checkbox':
				$formularbezeichner = preg_split('[\[|\]]',$attribute['name']);
				if ($sent) {
					if ($_POST["{$formularbezeichner[0]}"]["{$formularbezeichner[1]}"] == $attribute['value']) {
						echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\" checked=\"checked\"/>";
					} else {
						echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\"/>";
					}
				} else {
					if (!empty($attribute['selected']) && $attribute['selected'] == 'true') {
						echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\" checked=\"checked\"/>";
					} else {
						echo "<input type=\"checkbox\" $parameter value=\"{$attribute['value']}\"/>";
					}
				}
				break;
			case 'radio':
				if (!empty($_POST["{$attribute['name']}"])) {
					if ($_POST["{$attribute['name']}"] == $attribute['value']) {
						echo "<input type=\"radio\" $parameter value=\"{$attribute['value']}\" checked=\"checked\"/>";
					} else {
						echo "<input type=\"radio\" $parameter value=\"{$attribute['value']}\" />";
					}
				} else {
					if (!empty($attribute['selected']) && $attribute['selected'] == 'true') {
						echo "<input type=\"radio\" $parameter value=\"{$attribute['value']}\" checked=\"checked\"/>";
					} else {
						echo "<input type=\"radio\" $parameter value=\"{$attribute['value']}\"/>";
					}
				}
				break;
		}
	}

	// PRIVATE
	function formularVollstaendig() {

		$formular = $this->form['form'];

		$felder = $this->formularInterpretation(&$formular);

		foreach ($felder as $feld) {
			if (!$this->formularFeldKorrekt(&$feld)) return false;
		}

		return true;
	}

	// PRIVATE
	function success() {
		$this->sendEmail();
		echo $this->form['answer'];
	}

	// PRIVATE
	function formularFeldKorrekt(&$feld) {

		// prüfung, ob pflichtfeld vorhanden
		if (!empty($feld['mandatory']) && $feld['mandatory'] == 'true' && empty($_POST["{$feld['name']}"])) return false;

		// wenn das formularfeld kein pflichtfeld und nicht vorhanden ist, true zurück geben
		if (empty($_POST["{$feld['name']}"])) return true;

		// regular expression prüfungen
		if (!empty($feld['valid']) && $feld['valid'] == 'simpletext' && !eregi("^[öäüéàèâêîça-z-]*$",$_POST["{$feld['name']}"])) return false;
		if (!empty($feld['valid']) && $feld['valid'] == 'text' && !eregi("^[ .,;!?()öäüéàèâêîça-z-]*$",$_POST["{$feld['name']}"])) return false;
		if (!empty($feld['valid']) && $feld['valid'] == 'integer' && !eregi("^[0-9]*$",$_POST["{$feld['name']}"])) return false;
		if (!empty($feld['valid']) && $feld['valid'] == 'float' && !eregi("^[0-9]*[.]{0,1}[0-9]*$",$_POST["{$feld['name']}"])) return false;
		if (!empty($feld['valid']) && $feld['valid'] == 'date' && !eregi("^[0-9]{1,2}.[0-9]{1,2}.[0-9]{2}$",$_POST["{$feld['name']}"])) return false;
		if (!empty($feld['valid']) && $feld['valid'] == 'email' && !eregi("^[öäüéàèâêîç_a-z0-9-]+(\.[öäüéàèâêîç_a-z0-9-]+)*@[öäüéàèâêîça-z0-9-]+(\.[öäüéàèâêîça-z0-9-]+)*$",$_POST["{$feld['name']}"])) return false;

		// grössenbereich bei integer und float prüfen
		if (!empty($feld['minvalue']) && $_POST["{$feld['name']}"] < $feld['minvalue']) return false;
		if (!empty($feld['maxvalue']) && $_POST["{$feld['name']}"] > $feld['maxvalue']) return false;

		// längenbereich bei allen typen prüfen
		if (!empty($feld['minlength']) && strlen($_POST["{$feld['name']}"]) < $feld['minlength']) return false;
		if (!empty($feld['maxlength']) && strlen($_POST["{$feld['name']}"]) > $feld['maxlength']) return false;

		return true;
	}

	//PUBLIC
	function process() {
		if (!isset($_POST['sent'])) {
			$this->formularAusgabe();
		} elseif ($this->formularVollstaendig()) {
			$this->success();
		} else {
			$this->formularAusgabe(true);
		}
	}

}

if ($edit) {
	echo "<h1>Formularkonfiguration</h1>";
	echo "<p>Hier ist das Formular sowie der Text einzugeben, der zusammen mit dem Formular ausgegeben werden soll:</p>";
	echo "CMS_HTML[0]";
	echo "<p>Hier ist die Ausgabe einzugeben, die erscheint, wenn das Formular erfolgreich prozessiert worden ist:</p>";
	echo "CMS_HTML[1]";
} else {
	$formular = new w3form();
	$formular->addEmailAdress("CMS_VALUE[0]");
	$formular->setEmailSubject("CMS_VALUE[1]");
	$formular->setEmailFrom("CMS_VALUE[2]","CMS_VALUE[3]");
	$formular->setBackgroundError("CMS_VALUE[4]");
	$formular->setForm("CMS_HTML[0]");
	$formular->setAnswer("CMS_HTML[1]");
	$formular->process();
}

?>
Danke und Gruß

Jamest
delinquent
Beiträge: 184
Registriert: Fr 17. Aug 2007, 12:15
Kontaktdaten:

Re: [w3concepts.form.v1] doppeltes size attribut

Beitrag von delinquent »

Jamest hat geschrieben:Hallo,

ich setze das Formular von w3concepts 1, und mir is aufgefallen, das das attribut size doppelt generiert wird.

Code: Alles auswählen

<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname   :     w3concepts.form.v1
* Author      :     Andreas Kummer
* Copyright   :     mumprecht & kummer w3concepts
* Created     :     20-08-2004
* Modified    :     20-08-2004
************************************************/

class w3form {

	<schnipp>

	// PRIVATE
	function formularFeld($attribute,$sent) {
		$parameter = "name="{$attribute['name']}"";
		if ($sent && !$this->formularFeldKorrekt(&$attribute)) $style ="style="background-color:{$this->form['colorError']};"";
		switch ($attribute['type']) {
			case 'select':
			case 'password':
			case 'text':
				if (!empty($attribute['size'])) $parameter .= " size="{$attribute['size']}"";
				break;
		}
		switch ($attribute['type']) {
			case 'textarea':
			case 'text':
				if (!empty($attribute['size'])) $parameter .= " size="{$attribute['size']}"";
				if (!empty($attribute['value'])) $value = $attribute['value'];
				if (!empty($_POST["{$attribute['name']}"])) $value = $_POST["{$attribute['name']}"];
				break;
		}

	<schnipp>
?>
Ich denke Dein Problem liegt genau in diesem Teil. Nimm mal im 2. switch-block die erste Abfrage raus, die wird nämlich 6 Zeilen drüber schon ausgeführt. Und 'ne Textare bekommt sowieso nur cols und rows und nicht noch ein size Attribut. Außerdem kannst Du so auch ner Textarea ein value="..." Attribut mitgeben seh ich gerade. Eigentlich auch nicht wirklich konform :-) Naja.

Dein Resultat sollte in diesem Teil ungefähr so aussehen:

Code: Alles auswählen

		switch ($attribute['type']) {
			case 'textarea':
			case 'text':
				if (!empty($attribute['value'])) $value = $attribute['value'];
				if (!empty($_POST["{$attribute['name']}"])) $value = $_POST["{$attribute['name']}"];
				break;
		}
Ich habs nicht ausprobiert, also bitte ohne gewähr. Ist nur meine Vermutung.
Jamest
Beiträge: 137
Registriert: Mi 2. Aug 2006, 09:29
Kontaktdaten:

Beitrag von Jamest »

Danke, das hat funktioniert. :-)

Noch ne kurze Frage:

Ich hab hier:

Code: Alles auswählen

echo "\" wrap=\"virtual\" $style>$value</textarea>";
das wrap=\"virtual\"

herausgenommen, sollte mir das probleme bringen?

Weil bisher läuft es.

Grüße

Jamest[/quote]
Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Beitrag von Dodger77 »

Jamest hat geschrieben:Ich hab hier:

Code: Alles auswählen

echo "" wrap="virtual" $style>$value</textarea>";
das wrap="virtual"

herausgenommen, sollte mir das probleme bringen?
http://de.selfhtml.org/html/formulare/e ... he_umbruch
Jamest
Beiträge: 137
Registriert: Mi 2. Aug 2006, 09:29
Kontaktdaten:

Beitrag von Jamest »

die beschreibung bei dem Formular ist folgende:
Syntax der Formularfeldplatzhalter

Die Platzhalter haben die allgemeine Form ###inhalt### wobei der Inhalt aus folgenden Teilen besteht oder bestehen kann (getrennt durch Semikola):

* name:feldbezeichnung
Feldbezeichnung ist der Name des Formularfeldes und muss mit Ausnahme von Radiobuttons im Kontext des Formulares eindeutig sein.
* type:typ
Typ ist der Formularfeldtyp. Zur Auswahl stehen folgende Typen: text, textarea, password, select, radio, checkbox.
* valid:validierungstyp
Optional. Der Validierungstyp ist die für die Eingabenprüfung herangezogene Regular Expression. Als Validierungstypen stehen derzeit folgende Typen zur Verfügung: simpletext (nur Buchstaben ohne Lücken und ohne Interpunktionen), text (mit Lücken und Interpunktionen), date (format TT.MM.YY), email, integer (nur ganze Zahlen) sowie float (reelle Zahlen).
* mandatory:true
Optional. Wenn mandatory auf true gesetzt wird, ist eine Eingabe erforderlich. Diese Prüfung erfolgt unabhängig des Validierungstypes. Das heisst, dass bei Feldern, welche nicht auf mandatory gesetzt sind, immer auch eine Leereingabe möglich ist.
* value:wert
Optional. Wert kann auf einen möglichen Wert gesetzt werden. Dieser dient bei der ersten Darstellung des Formulares (oder beim Reload) als Vorgabewert für das jeweilige Feld.
* size:wert
Optional. Als Wert einen ganzzahligen nummerischen Wert einfügen. Setzt die Breite von Textfeldern respektive die sichtbare Höhe bei Selects.
* cols:wert
Optional. Als Wert einen ganzzahligen nummerischen Wert einfügen. Setzt die Breite von Textareas.
* rows:wert
Optional. Setzt die Höhe von Textareas.
* option:wert
Pflichtfeld bei Selects. Füllt das Selectfeld mit Werten. Der Aufruf von option kann beliebig oft erfolgen.
* optionvalue:wert
Optional. Wird dieser Parameter bei Selects nicht gesetzt, entspricht der im Browser dargestellte Werte dem zu übertragenden Wert. Wert ist typischerweise eine Ganzzahl. Kann allerdings auch ein String sein.
* minvalue:wert
Optional. Setzt einen Mindestwert, den die Eingabe erfüllen muss. Nur sinnvoll bei einer Validierungsprüfung mit integer oder float.
* maxvalue:wert
Optional. Setzt einen Maximalwert, die die Eingabe annehmen darf.
* minlength:wert
Optional. Setzt eine Mindestanzahl Zeichen, die die Eingabe aufweisen muss.
* maxlength:wert
Optional. Setzt eine Maximalanzahl Zeichen, die die Eingabe aufweisen darf.
Jetzt ist meine Frage, wie kann ich da noch ne id mitgeben, beispielsweise um eine bestimmte CSS formatierung wirken zu lassen.

Danke und Gruß

Jamest
Gesperrt