Hallo,
ich habe ein wahrscheinlich kleines Problem mit Meinem Formular.
Das Formular ermöglicht usern die Registrierung auf meiner Seite.
Ziel Beschreibung:
Das Formular besteht aus vielen Typischen Personbezognenen input felder.
Da drunter befindet sich eine Selectbox.
In der Selectbox kann der User die Zahlungsart auswählen.
Folgende möglichkeiten gibt es.
Rechnung
Einzugsermächtigung
Wenn der User Einzugs..... wählt, erweitert sich das Formular automatisch, so das der User Kontodaten erfassen kann.
Dieser Teil funktioniert mittlerweile wunderbar.
Jetzt wird das Formular abgeschickt per POST komm es dann bei meinem Skript an.
Jetzt überprüfe ich das Formular auf Logik:
Das schaut dann so aus:
<?php
//Xajax Objekt anlegen und Funktionen registrieren.
//Hier liegt mein Problem was ich gleich erkläre
include("KLassen/xajax/xajax_core/xajax.inc.php");
$xajax = new xajax();
$xajax->registerFunction("onSelect");
$xajax->processRequest();
//XAJAX Ende
//Alle überflüssigen Leerzeichen entfernen.
$_POST = leerzeichen($_POST);
// Fehlerprüfung
$fc = new fehler_class();
$fc->leer($_POST['user'], 'Benutzername');
$fc->leer($_POST['mail'], 'E-Mail');
$fc->leer($_POST['name'], 'Name');
$fc->leer($_POST['vorname'], 'Vorname');
$fc->leer($_POST['strasse'], 'Straße');
$fc->leer($_POST['hausnummer'], 'Hausnummer');
$fc->leer($_POST['plz'], 'Plz');
$fc->leer($_POST['passwort1'], 'Passwort');
$fc->leer($_POST['passwort2'], 'Passwortwiederholung');
$fc->laenge($_POST['passwort1'], 'laenge', '6');
$fc->laenge($_POST['user'], 'Benutzername', '6');
$fc->email_syntax($_POST['mail'], '');
$fc->pw($_POST['passwort1'], $_POST['passwort2'], '');
$fc->zahl($_POST['plz'], 'Plz');
// Prüfen ob der Benutzername schon vorhanden sind.
$db = new db($schema);
$ergebnis1 = $db->getanz('SELECT benutzername FROM user WHERE benutzername = "'.m_escape($_POST['user']).'"');
if($ergebnis1 > 0) {
$fc->reg_fehler('Benutzername vergeben. Bitte wählen Sie einen anderen.');
}
// Prüfen ob E-Mail Adresse schon vorhanden ist.
$ergebnis2 = $db->getanz('SELECT email FROM user WHERE email = "'.m_escape($_POST['mail']).'"');
if($ergebnis2 > 0) {
$fc->reg_fehler('Mit dieser E-Mail Adresse wurde eine Registrierung schon durchgeführt.');
}
if(!isset($_POST['agb'])){
$fc->reg_fehler('Bitte akzeptieren Sie die Nutzungsbedingungen, ansonsten ist keine Registrierung möglich');
}
// Wenn Einzugsermächtigung gewählt wurde dann müssen weitere Bedingunen erfüllt sein.
// 3 ist die ID von Einzugsermächtigung
if ($_POST['zahlungsart'] == 3){
$fc->leer($_POST['kontoinhaber'], 'Kontoinhaber');
$fc->leer($_POST['kontonummer'], 'Kontonummer');
$fc->leer($_POST['bankleitzahl'], 'Blz');
$fc->leer($_POST['bank'], 'Bank');
$fc->zahl($_POST['kontonummer'], 'Kontonummer');
$fc->zahl($_POST['bankleitzahl'], 'Blz');
if (!isset($_POST['einzugserlaubnis'])){
$fc->reg_fehler('Darf Ivently die Kosten von Ihrem angegebenen Konto abbuchen?');
}
}
//Fehlerprüfung ende.
$fehler = $fc->fehler_out();
// Formular bei Fehler wieder ausgeben.
if (!empty($fehler)){
//Ausgabe starten
$out = new op();
$out->xajax = $xajax;
$out->fehler = $fc->fehler_out();
$out->post = $_POST;
$out->reg_output('divcontent.html');
$out->reg_output('veranstalter_anmeldung.php');
$out->reg_output('divende.html');
$out->output();
}
?>
Weitere erklärung zum Code:
1. Die KLasse fehler_class überprüft alle übergebenen Felder nach richtlienen wenn ein Fehler auftaucht wird die Meldung in ein Array geschrieben.
2. Die Xajax ist ein Framework was Ajax extrem erleichtert.
3. Die Klasse op bekommt alle Datei die inlcudet werden sollen.
Diese werden dann in der Klasse includet.
Problem Beschreibung:
Der User hat das Formular ausgefüllt und in der Selectbox Einzugsermächtigung gewähl. Und diese Felder für die Kontoverbindung ausgefüllt.
Jetzt findet das Skript ein Fehler bsp Benutzername zu kurz, dann wird das Formular wieder mit den Fehlermeldungen ausgegeben. Die input felder bleiben natürlich mit den Werten die der User eingegeben hat gefüllt.
Jetzt wird die Formularerweiterung aber nicht angezeigt, obwohl in der Selectbox der Wert Einzugsermächtigung auf selected='selected' steht.
Warum ist mir auch bekannt, da dies erst passiert wenn, wenn auf ein Wert geklickt worden ist in der Box.
Wenn ein Wert in der Selectbox ausgewählt wird, dann wird folgende Funktion
ausgeführt:
<?php
// Die Funktion erweitert das Formular wenn sSelect = 3 ist. 3 ist die ID für Einzugsermächtigung.
function onSelect($sSelect, $sDestination){
$objResponse = new xajaxResponse();
if($sSelect == 3){
$formular = file_get_contents('Templates/bankdaten.php');
$objResponse->assign($sDestination, 'innerHTML', $formular);
}
else {
$objResponse->assign($sDestination, 'innerHTML', $formular = '');
}
return $objResponse;
}
?>
Hat da jemand eine Idee wie ich das hinbekomme das die weiteren Felder angezeigt werden wenn diese zuvor auch ausgefüllt beispielsweise übergeben worden sind?
Ich hoffe ich konnte es verständlich erklären.
Danke für die Hilfe und euren Einsatz.