PHPbzw.HTML-Formulare referenzieren
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 134795
Url: https://administrator.de/contentid/134795
Ausgedruckt am: 22.11.2024 um 22:11 Uhr
11 Kommentare
Neuester Kommentar
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 ...
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 ...
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.
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.
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):
(PHP 5.3.0 vorrausgesetzt, ungetestet)
So ein Skeleton ist in 25 Minuten geschrieben (OK, ich wurde vom Telefon aufgehalten):
<?php
class HTMLInput {
protected $type;
protected $attr = array();
protected $sbmtRawValue = null;
protected $vfunc = null;
public function __construct($type,$name) {
$this->type = $type;
$this->attr['name'] = $name;
//prüfen ob wir ein abgeschicktes form haben
if(array_key_exists($name, $_POST))
$this->sbmtRawValue = $_POST[$name];
return $this;
}
public function setAttribute($attribute,$value) {
$this->attr[$attribute] = $value;
return $this;
}
public function getAttribute($attr) {
if(!array_key_exists($attr, $this->attr))
throw new Exception('Trying to access unset attribute {'.$attr.'}');
return $this->attr[$attr];
}
public function validateFunction($closure) {
$this->vfunc = $closure;
}
public function rawValue() {
if(!$this->isSubmitted())
throw new Exception('Form not yet submitted!');
return $this->sbmtRawValue;
}
public function validValue() {
try {
return $this->validate();
} catch (Exception $e) {
throw new Exception('No valid represenatation: {'.$e->getMessage().'}', 1);
}
}
public function isSubmitted() {
return ($this->sbmtRawValue !== null);
}
public function getName() {
return $this->getAttribute('name');
}
public function validate() {
return $this->vfunc($this->rawValue());
}
public function render() {
$s = '<input type="'.$this->type.'"';
foreach ($this->attr as $key => $value) {
$s .= ' '.$key.'="'.$value.'"';
}
if($this->isSubmitted())
$s .= ' value="'.htmlspecialchars($this->sbmtRawValue).'"';
$s .= ' />';
//validation
if($this->isSubmitted() && $this->vfunc !== null) {
try {
$this->validate();
//ok
} catch (Exception $e) {
echo '<div class="error">'.$e->getMessage().'</div>';
}
}
return $s;
}
}
$email = new HTMLInput('text','email');
$email->validateFunction(function($mail) {
if(!preg_match('/^.+@[a-z]+\.[a-z]{2,3}$/iD', $mail))
throw new Exception('Die eingebene E-Mailadresse ist ungültig!');
return strtolower($mail);
});
?>
<html>
<body>
<form action="" method="post">
<?php echo $email->render(); ?>
</form>
</body>
</html>
Füge diese Funktion irgendwo oben hinzu:
Dann ändere
in
function checkmail($email){
if (! ereg('^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'.'@'.'[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.'.'[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$', $email))
{$i="0";}
else {$i="1";}
return $i;
}
Dann ändere
elseif (preg_match($RegXmail, $mail)== 0)
{
$fehlerflag = true;
$fehlertext .= " Die Mailadresse ist nicht gültig."; /* ... soll möglichst als Formularlabel ausgegeben werden */
}
in
elseif (checkmail($mail)==0)
{
$fehlerflag = true;
$fehlertext .= " Die Mailadresse ist nicht gültig."; /* ... soll möglichst als Formularlabel ausgegeben werden */
}
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
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
Datei: default.css
Datei: sub_kontaktformular.php
form {
background-color: #eee;
padding: 20px;
border: 1px solid #8c8c8c;
font-family: Verdana, Arial, Helvetica;
font-size: small;
margin-left: 160px;
width: 400px;
}
div.err_name { }
div.err_mail { }
div.err_nachricht { }
Datei: sub_kontaktformular.php
<?php
// Das Template für dein Formular mit HTML Kopf und Fuss
$tpl_html = <<<__HTML__
<!DOCTYPE html PUBLIC " -W3CDTD XHTML 1.0 Transitiona lEN" "http:www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title></title>
<link href="default.css" type="text/css" />
</head>
<body>
<form id="kontaktformular" name="kontaktformular" action="sub_kontaktformular.php" method="post">
<div class="{CSS_NAME}">
<label for"name"> Ihr Name {ERR_NAME}</label> <br />
<input type="text" id="name" name="name" size="62" value="{NAME}" />
</div>
<div class="{CSS_MAIL}">
<label for"mail"> Ihre E-Mail-Adresse {ERR_MAIL}</label> <br />
<input type="text" id="mail" name="mail" size="62" value="{MAIL}" />
</div>
<div class="{CSS_NACHRICHT}">
<label for "nachricht"> Ihre Nachricht an uns {ERR_NACHRICHT}</label> <br />
<textarea id="nachricht" name="nachricht" cols="47" rows="3">{NACHRICHT}</textarea>
</div>
<div> <input type="submit" value="Senden" name="go" /> </div>
</form>
</body>
__HTML__;
// alle Ersetzungs Tags raussuchen
$aReplace = array();
if (preg_match_all('/(\{[A-Z0-9\_]*\})/', $tpl_html, $list)) {
foreach (array_keys($list) as $key) {
$aReplace[$key] = '';
}
}
// @todo ...
// Inhalte prüfen und Inhalte zu den Tags in das $aReplace Array speichern
// ggf Email versenden
// Inhalte ersetzen
$tpl_html = str_replace(array_keys($aReplace), array_values($aReplace), $tpl_html);
// und ausgeben
echo $tpl_html;
?>