Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

PHPbzw.HTML-Formulare referenzieren

Frage Entwicklung PHP

Mitglied: christophkoeln

christophkoeln (Level 1) - Jetzt verbinden

31.01.2010 um 13:09 Uhr, 6110 Aufrufe, 11 Kommentare

Liebe Gemeinde der Wissenden,

ist es möglich, ein HTML-Formular nach z.B. einer Fehleingabe mit PHP zu referenzieren, so dass z.B. bei Fehleingabe einer Mail-Adresse das Label des Eingabefeldes "Mail-Adresse" mit dem Text "Falsche Mail-Adresse" belegt wird und z.B. die Hintergrundfarbe des Eingabefeldes rot wird. Wie referenziert man ein Formularfeld im folgenden Code ? (oder geht das gar nicht ?).

Gruß aus Köln
Mitglied: sputnik
31.01.2010 um 14:39 Uhr
Du meinst eine Plausibilitätsprüfung. Dazu gibt es viele Beispiele im Internet, siehe hier:

http://www.gaijin.at/scrphpcform.php

Und hier die Grundlagen: http://tut.php-q.net/de/post.html

Email-Adresse überprüfen:

http://www.php.de/php-fortgeschrittene/24-email-adresse-auf-korrektheit ...
Bitte warten ..
Mitglied: christophkoeln
31.01.2010 um 15:33 Uhr
Sorry - ich habe mich etwas unklar ausgedrückt und hoffe, es gelingt mir jetzt besser:

Die Plausibilität ist in meinem Programm bereits geprüft. Nun möchte ich dem User mitteilen, dass er die Mail-Adresse im falschen Format eingegeben hat. Folgende Möglichkeiten fallen mir ein:
1. Möglichkeit:
- per "Echo" schreibe ich die Nachricht irgendwo auf die Seite.
Beurteilung: geht zwar, sieht aber unprofessionell aus, finde ich.
2. Möglichkeit:
- eine MessageBox per JavaScript weist den User auf die Fehleingabe hin
Beurteilung: ich möchte kein JavaScript benutzen, da nicht jeder User dieses nutzt
3. Möglichkeit:
- Ich schreibe den Fehlertext direkt an die Stelle der Fehleingabe , z.B. als Label des betreffenden Input-Feldes. Hier soll die Ursprungsüberschrift "Bitte geben Sie Ihre Mailadresse ein." sich "wie von Zauberhand" in die Überschrift "Die eingegebene Mail-Adresse hat nicht das richtige Format" (oder Ähnliches) verwandeln
Beurteilung: würde ich mir wünschen, weiß aber nicht, wie man das Formular in dieser Form ändern kann.

Ich hoffe, jetzt ist's klarer geworden - hoffe auf positive Nachrichten
Bitte warten ..
Mitglied: sputnik
31.01.2010 um 17:18 Uhr
Na der letzte Link befasst sich genau mit deinem Problem. Du musst die entsrpechenden Codeschnipsel in dein Script einbauen und anpassen.

Bevor du ein "echo" senden kannst, musst du die Eingabe erst analysieren. Post doch deinen Quelltext hier, wenn er nicht zu lang ist.

Viele schalten JavaScript ab, entweder muss dies abfangen oder doch lieber auf PHP setzen. Die 3. Möglichkeit ist auch JavaScript.
Bitte warten ..
Mitglied: christophkoeln
31.01.2010 um 18:09 Uhr
Schön, dass Du Dir die Arbeit machen willst, den Code mal durchzusehen. Ich hoffe, er kommt auch richtig formatiert an (habe bisher noch keinen Code gepostet). Also:

<code type="html">
<!DOCTYPE html PUBLIC " -W3CDTD XHTML 1.0 Transitiona lEN" "http:www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<style type="text/css">
/*Das Kontaktformular */
form {
background-color: #eee;
padding: 20px;
border: 1px solid #8c8c8c;
font-family: Verdana, Arial, Helvetica;
font-size: small;
margin-left: 160px;
width: 400px;
}
</style>
<form id="kontaktformular" name="kontaktformular" action="sub_kontaktformular.php" method="post">
<div>
<label for"name"> Ihr Name </label> <br>
<input type="text" id="name" name="name" size="62" value="<?php if (isset($_POST['name']))
{
echo htmlspecialchars (stripslashes($_POST['name']));
}
?>">
</div>
<div>
<label for"mail"> Ihre E-Mail-Adresse</label> <br>
<input type="text" id="mail" name="mail" size="62" value="<?php if (isset($_POST['mail']))
{
echo htmlspecialchars (stripslashes($_POST['mail']));
}
?>">
</div>
<div>
<label for "nachricht"> Ihre Nachricht an uns </label> <br>
<textarea id="nachricht" name="nachricht" cols="47" rows="3">
<?php
If (isset($_POST['nachricht']))
{
echo trim(htmlspecialchars(stripslashes($_POST['nachricht'])));
}
?>
</textarea>
</div>
<div>
<input type="submit" value="Senden" name="go" />
</div>
</form>
<?php
$name = $_POST['name'];
$mail = $_POST['mail'];
$nachricht = $_POST['nachricht'];
$RegXmail = "/^[a-zA-Z0-9-_.]+@[a-zA-Z0-9-_.]+\.[a-zA-Z]{2,4}$/";
/* -------------------------------------------------- */
/* FEHLERPRÜFUNG */
/* -------------------------------------------------- */
If (isset($_POST['go']))
{
$fehlerflag = false;
$fehlertext = "";
/* -------------------------------------------------- */
If (empty($name))
{
$fehlerflag = true;
$fehlertext .= " Bitte geben Sie einen Namen ein."; /* ... soll möglichst als Formularlabel ausgegeben werden */
}
/* -------------------------------------------------- */
If (empty($mail))
{
$fehlerflag = true;
$fehlertext .= " Bitte geben Sie eine Mailadresse an."; /* ... soll möglichst als Formularlabel ausgegeben werden */
}
elseif (strlen($mail)<5)
{
$fehlerflag = true;
$fehlertext .= " Die Mailadresse ist nicht komplett."; /* ... soll möglichst als Formularlabel ausgegeben werden */
}
elseif (preg_match($RegXmail, $mail)== 0)
{
$fehlerflag = true;
$fehlertext .= " Die Mailadresse ist nicht gültig."; /* ... soll möglichst als Formularlabel ausgegeben werden */
}
/* -------------------------------------------------- */
If (empty($nachricht))
{
$fehlerflag = true;
$fehlertext .= " Möchten Sie keine Nachricht senden?"; /* ... soll möglichst als Formularlabel ausgegeben werden */
}
If ($fehlerflag)
{
echo "<p>$fehlertext</p>";
}
else
{
/* mail("info@irgendwohin.de", $name, $nachricht, "From: $mail"); */
echo "Die Mail wurde versendet - wir werden Sie sobald wie möglich bearbeiten!"; /* und auch dieser Satz soll im Formular erscheinen ! */
}
}
?>
</body>
</html>
Bitte warten ..
Mitglied: maretz
31.01.2010 um 18:14 Uhr
Naja - du könntest z.b. mit nem template system arbeiten (php-template-it sollte als suchbegriff reichen). da darfst du alles mit machen ;)
Bitte warten ..
Mitglied: dog
31.01.2010 um 20:03 Uhr
Das ist mal wieder so eine Frage, die ich nicht verstehe.
So ein Skeleton ist in 25 Minuten geschrieben (OK, ich wurde vom Telefon aufgehalten):
01.
<?php 
02.
 
03.
	class HTMLInput { 
04.
		protected $type
05.
		protected $attr = array(); 
06.
		protected $sbmtRawValue = null; 
07.
		protected $vfunc = null; 
08.
		 
09.
		public function __construct($type,$name) { 
10.
			$this->type = $type
11.
			$this->attr['name'] = $name
12.
			//prüfen ob wir ein abgeschicktes form haben 
13.
			if(array_key_exists($name, $_POST)) 
14.
				$this->sbmtRawValue = $_POST[$name]; 
15.
			return $this
16.
17.
		 
18.
		public function setAttribute($attribute,$value) { 
19.
			$this->attr[$attribute] = $value
20.
			return $this
21.
22.
		 
23.
		public function getAttribute($attr) { 
24.
			if(!array_key_exists($attr, $this->attr)) 
25.
				throw new Exception('Trying to access unset attribute {'.$attr.'}'); 
26.
			return $this->attr[$attr]; 
27.
28.
		 
29.
		public function validateFunction($closure) { 
30.
			$this->vfunc = $closure
31.
32.
		 
33.
		public function rawValue() { 
34.
			if(!$this->isSubmitted()) 
35.
				throw new Exception('Form not yet submitted!'); 
36.
			return $this->sbmtRawValue; 
37.
38.
		 
39.
		public function validValue() { 
40.
			try { 
41.
				return $this->validate(); 
42.
			} catch (Exception $e) { 
43.
				throw new Exception('No valid represenatation: {'.$e->getMessage().'}', 1); 
44.
45.
46.
		 
47.
		public function isSubmitted() { 
48.
			return ($this->sbmtRawValue !== null); 
49.
50.
		 
51.
		public function getName() { 
52.
			return $this->getAttribute('name'); 
53.
54.
		 
55.
		public function validate() { 
56.
			return $this->vfunc($this->rawValue()); 
57.
58.
		 
59.
		public function render() { 
60.
			$s = '<input type="'.$this->type.'"'
61.
			foreach ($this->attr as $key => $value) { 
62.
				$s .= ' '.$key.'="'.$value.'"'
63.
64.
			if($this->isSubmitted()) 
65.
				$s .= ' value="'.htmlspecialchars($this->sbmtRawValue).'"'
66.
			$s .= ' />'
67.
			//validation 
68.
			if($this->isSubmitted() && $this->vfunc !== null) { 
69.
				try { 
70.
					$this->validate(); 
71.
					//ok 
72.
				} catch (Exception $e) { 
73.
					echo '<div class="error">'.$e->getMessage().'</div>'
74.
75.
76.
			return $s
77.
78.
79.
	 
80.
	$email = new HTMLInput('text','email'); 
81.
	$email->validateFunction(function($mail) { 
82.
		if(!preg_match('/^.+@[a-z]+\.[a-z]{2,3}$/iD', $mail)) 
83.
			throw new Exception('Die eingebene E-Mailadresse ist ungültig!'); 
84.
		return strtolower($mail); 
85.
	}); 
86.
	 
87.
?> 
88.
<html> 
89.
	<body> 
90.
		<form action="" method="post"
91.
			<?php echo $email->render(); ?> 
92.
		</form> 
93.
	</body> 
94.
</html>
(PHP 5.3.0 vorrausgesetzt, ungetestet)
Bitte warten ..
Mitglied: christophkoeln
31.01.2010 um 20:28 Uhr
Ok - ich gebe es zu, Du spielst in einer anderen PHP-Klasse - da komme ich nicht ran - was "Klassen" in PHP angeht, fehlt mir noch die Erfahrung. Einfacher geht's für den Newbi nicht, oder ?
Ich find' es wirklich bewundernswert, wie Du das in 25 Minuten aus dem Ärmel schüttelst, aber dafür spiel ich Dich fußballtechnisch in einer Telöefonzelle schwindelig - wetten ? So hat halt jeder seine Stärken ) - Danke Dir trotzdem .
Bitte warten ..
Mitglied: sputnik
31.01.2010 um 20:41 Uhr
Füge diese Funktion irgendwo oben hinzu:

01.
function checkmail($email){ 
02.
if (! ereg('^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'.'@'.'[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.'.'[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$', $email)) 
03.
{$i="0";} 
04.
else {$i="1";} 
05.
return $i; 
06.
}
Dann ändere

01.
elseif (preg_match($RegXmail, $mail)== 0) 
02.
03.
$fehlerflag = true; 
04.
$fehlertext .= " Die Mailadresse ist nicht gültig."; /* ... soll möglichst als Formularlabel ausgegeben werden */ 
05.
}
in

01.
elseif (checkmail($mail)==0) 
02.
03.
$fehlerflag = true; 
04.
$fehlertext .= " Die Mailadresse ist nicht gültig."; /* ... soll möglichst als Formularlabel ausgegeben werden */ 
05.
}
Bitte warten ..
Mitglied: christophkoeln
31.01.2010 um 22:51 Uhr
Hallo spytnik,

danke für Deine Mühe, aber soweit ich sehe, ändert sich durch Deine Funktion nichts an der Art und Weise und v.a. am Ort der Fehlermeldung - und nur darum geht es mir hier. Die Plausibilitätsprüfung steht ja schon fest.

Also - noch mal ganz simpel

Ich habe ein Formular auf einer Seite und möchte, dass sich nach Mausklick auf den Submit-Botton - ganz unabhängig von irgendwelchen Daten, egal, ob Eingaben geschehen sind, oder nicht - sich alle Überschriften über den Formularfeldern in "Hallo Welt" ändern und alle Inputfeld-Hintergründe rot werden.

Geht das auf simple Weise oder nicht ?

Gruß aus Köln
Bitte warten ..
Mitglied: Edi.Pfisterer
01.02.2010 um 08:05 Uhr
Hallo!
Ja, das geht!
Da ich in Eile bin ohne Code - nur die Idee:

Du greifst ab, ob der user den Submit-Button betätigt hat (in dem Du die länge der Benutzereingabe submit überprüfts (der Input-type submit hat ja auch einen value).

Wenn er das Formular also abgesendet hat, dann lädst Du einfach ein anderes CSS-File. Fertig.

Vielleicht gehts eleganter, aber nachdem Dir niemand mehr geantwortet hat, empfehle ich Dir mal diese Lösung, die
1.) einfach zu realisieren ist und
2.) sicher funtkioniert.

lg
Bitte warten ..
Mitglied: nxclass
01.02.2010 um 09:14 Uhr
Datei: default.css
01.
form { 
02.
    background-color: #eee; 
03.
    padding: 20px; 
04.
    border: 1px solid #8c8c8c; 
05.
    font-family: Verdana, Arial, Helvetica; 
06.
    font-size: small; 
07.
    margin-left: 160px; 
08.
    width: 400px; 
09.
10.
div.err_name { } 
11.
div.err_mail { } 
12.
div.err_nachricht { }
Datei: sub_kontaktformular.php
01.
<?php 
02.
    // Das Template für dein Formular mit HTML Kopf und Fuss 
03.
    $tpl_html = <<<__HTML__ 
04.
<!DOCTYPE html PUBLIC " -W3CDTD XHTML 1.0 Transitiona lEN" "http:www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
05.
<html> 
06.
<head> 
07.
    <title></title> 
08.
    <link href="default.css" type="text/css" /> 
09.
</head> 
10.
<body> 
11.
 
12.
<form id="kontaktformular" name="kontaktformular" action="sub_kontaktformular.php" method="post"> 
13.
    <div class="{CSS_NAME}"> 
14.
        <label for"name"> Ihr Name {ERR_NAME}</label> <br /> 
15.
        <input type="text" id="name" name="name" size="62" value="{NAME}" /> 
16.
    </div> 
17.
    <div class="{CSS_MAIL}"> 
18.
        <label for"mail"> Ihre E-Mail-Adresse {ERR_MAIL}</label> <br /> 
19.
        <input type="text" id="mail" name="mail" size="62" value="{MAIL}" /> 
20.
    </div> 
21.
    <div class="{CSS_NACHRICHT}"> 
22.
        <label for "nachricht"> Ihre Nachricht an uns {ERR_NACHRICHT}</label> <br /> 
23.
        <textarea id="nachricht" name="nachricht" cols="47" rows="3">{NACHRICHT}</textarea> 
24.
    </div> 
25.
    <div> <input type="submit" value="Senden" name="go" /> </div> 
26.
</form> 
27.
 
28.
</body> 
29.
__HTML__; 
30.
 
31.
 
32.
// alle Ersetzungs Tags raussuchen 
33.
$aReplace = array(); 
34.
if (preg_match_all('/(\{[A-Z0-9\_]*\})/', $tpl_html, $list)) { 
35.
    foreach (array_keys($list[0]) as $key) { 
36.
        $aReplace[$key] = ''; 
37.
38.
39.
 
40.
// @todo ... 
41.
// Inhalte prüfen und Inhalte zu den Tags in das $aReplace Array speichern 
42.
// ggf Email versenden 
43.
 
44.
// Inhalte ersetzen 
45.
$tpl_html = str_replace(array_keys($aReplace), array_values($aReplace), $tpl_html); 
46.
// und ausgeben 
47.
echo $tpl_html; 
48.
 
49.
?>
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Webentwicklung
gelöst HTML Output in eine txt Datei mit VisualBasicScript (2)

Frage von coca22COCA zum Thema Webentwicklung ...

Sonstige Systeme
PDF-Formulare mit handschriftlicher Unterschrift (19)

Frage von FenjaW zum Thema Sonstige Systeme ...

Microsoft Office
Word Textbaustein referenzieren (3)

Frage von PharIT zum Thema Microsoft Office ...

PHP
gelöst HTML Dropdownmenü auslesen und in PHP als Variable übergeben (35)

Frage von ITFlori zum Thema PHP ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (27)

Frage von patz223 zum Thema Windows Userverwaltung ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (20)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...