PHP und XAJAX Framework Formular erweiterung
Thorsten
- php
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.
Hallo,
wie wird denn das Formular 'neu aufgebaut'?
Wenn der User Einzugs..... wählt, erweitert sich das Formular automatisch, so das der User Kontodaten erfassen kann.
Ich schätze, das erweiterte Formular ist zunächst mit display:none; versteckt...?
Dann solltest Du dieses display:none; in dem Falle verwerfen, wenn ein Fehler vorliegt und der User Einzugsermächtigung ausgewählt hat, so dass es dann angezeigt werden kann...
Ich hoffe, das hilft...sonst wäre es vll. noch interessant, was Du nach der Fehlerbehandlung machst (hab ich jetzt nicht gesehen) - die Formularseite neu aufrufen oder per xajax updaten?
Gruß,
Manu
Hallo,
wie wird denn das Formular 'neu aufgebaut'?
Was meinst du damit?
Ich schätze, das erweiterte Formular ist zunächst mit display:none; versteckt...?
Dann solltest Du dieses display:none; in dem Falle verwerfen, wenn ein Fehler vorliegt und der User Einzugsermächtigung ausgewählt hat, so dass es dann angezeigt werden kann...
Nein, die Erweiterung wird erst per ajax geladen, wenn die funktion ausgeführt wird. Also wenn jemand den Wert in der Checkbox ändert.
Ich hoffe, das hilft...sonst wäre es vll. noch interessant, was Du nach der Fehlerbehandlung machst (hab ich jetzt nicht gesehen) - die Formularseite neu aufrufen oder per xajax updaten?
Die Formular Seite wird includet und ausgegeben.
Die SELECT Box schaut so aus:
<?php
$db = new db($this->schema);
$zahlungsart = $db->getmatrix('SELECT zahlungsart, zahlungsart_id FROM zahlungsart');
echo "<select name='zahlungsart' id='input_select' onchange=\"xajax_onSelect(this.options[this.selectedIndex].value, 'select_output'); return false;\" >";
foreach ($zahlungsart AS $data)
{
if (isset($fehler))
{
if ($_POST["zahlungsart"] == $data["zahlungsart_id"])
{
$check = "selected='selected'";
}
else
{
$check ="";
}
}
echo "<option ";
if (isset($check))
{
echo $check;
}
echo " value='".$data["zahlungsart_id"]."'>".$data["zahlungsart"]."</option>";
}
echo "</select>";
?>
Die Formularerweiterung wird in einem DIV per XAJAX/AJAX nachgeladen.
An dieser Stelle übergebe ich die ID des Div`s also wo es angezeigt werden soll, und den Value.
echo "<select name='zahlungsart' id='input_select' onchange=\"xajax_onSelect(this.options[this.selectedIndex].value, 'select_output'); return false;\" >";
Eigentlich würde es doch reichen wenn man es hinbekommt hier den Unterschied festzulegen.
Sprich die funktion on_select muss immer ausgeführt werden, wenn $fehler nicht leer ist, und wenn Einzugsermächtigung gewählt wurde.
So sollten dann Automatisch die weiteren Inputfelder angezeigt werden!
Leider weiß ich nicht wie ich das machen könnte.
MfG
Thorsten
Hi,
Nein, die Erweiterung wird erst per ajax geladen, wenn die funktion ausgeführt wird. Also wenn jemand den Wert in der Checkbox ändert.
Wenn du das Formular im Fehlerfalle serverseitig (vorbelegt) generierst - dann solltest du auch diese "Erweiterung" schon serverseitig hineingenerieren. Dafuer dann erst im Anschluss AJAX zu nutzen, erscheint mir widersinnig.
MfG ChrisB
Abend
Wenn du das Formular im Fehlerfalle serverseitig (vorbelegt) generierst - dann solltest du auch diese "Erweiterung" schon serverseitig hineingenerieren. Dafuer dann erst im Anschluss AJAX zu nutzen, erscheint mir widersinnig.
Den gedanken hatte ich auch schon bei weiterem überlegen gibt es aber ein Problem.
Der Fehlerfall:
Wenn ich die Erweiterung Serverseitig schon mit einbinde habe ich das Problem das die Selectbox keine Ajax funktion mehr hat, oder diese dann überflüssig wird.
Weil diese erweiterung dann immer angezeigt wird. Und der User diese dann auch nicht mehr ausblenden kann.
Auch wenn der Teil funktionieren würde habe ich immer noch weitere Probleme die ich wahrscheinlich im Moment auf Grund meines Wissen über AJAX oder dem Framework XAJAX ( Was die ganze sache ja so einfach machen soll *lach ) nicht lösen kann.
Ich bin ernsthaft am überlegen ob mein Vorhaben dieses Formular zu erweitern sinn Macht oder ob ich das erstmal sein lasse.
Weitere Probleme die mich jetzt schon anspringen sind z.b. :
$_POST wird nicht mehr zur verfügung stehen können da das Formular mit ajax nachgeladen wird. Und das eigntliche Skript schon beendet ist.
Also müsste ich hier mit z.b. Sessions arbeiten usw.
Also Frage ich mich ernsthaft ob ich das Tatsächlich mir antun möchte oder ob ich das Formular einfach Komplett anzeigen lasse, und über den 4 weiteren Input Feldern einfach ein Text schreibe. Als Beispiel:
Folgende Felder müssen Sie nur ausfüllen wenn Sie die Einzugsermächtigung gewählt haben.
Und Ajax Verwende ich dann nur da wo du aufwand dem Ergebnis gerecht wird.
Ich glaub da werde ich noch drüber nachtdenken müssen.
Trotzdem bin ich an einer Lösung Interessiert, vieleicht gibt es ja auch einene Komplett anderen Ansatz!
Hi,
Der Fehlerfall:
Wenn ich die Erweiterung Serverseitig schon mit einbinde habe ich das Problem das die Selectbox keine Ajax funktion mehr hat, oder diese dann überflüssig wird.
Ajax-Funktionalitaet koennte man ja auch wieder hinzufuegen.
Weil diese erweiterung dann immer angezeigt wird. Und der User diese dann auch nicht mehr ausblenden kann.
Auch eine alternative Funktion zum "wieder Ausblenden" koennte man dynamisch hinzufuegen oder nicht.
Auch wenn der Teil funktionieren würde habe ich immer noch weitere Probleme die ich wahrscheinlich im Moment auf Grund meines Wissen über AJAX oder dem Framework XAJAX ( Was die ganze sache ja so einfach machen soll *lach ) nicht lösen kann.
Frameworks ersetzen halt keine grundsaetzlichen Kenntnisse ueber und Erfahrungen mit diversen Techniken.
Als Hilfsmittel, um sich als "Erfahrener" die Arbeit einfacher zu machen, halte ich sie fuer voellig legitim.
Wenn aber jemand "ohne Ahnung" (oder eben mit wenig; und das ist jetzt allgemein gesprochen, nicht auf dich bezogen) sie einsetzt, habe ich ob ihres Nutzens oftmals arge Bedenken ...
Ich bin ernsthaft am überlegen ob mein Vorhaben dieses Formular zu erweitern sinn Macht oder ob ich das erstmal sein lasse.
Was haeltst du denn erst mal von dem simpleren Weg, den Manu schon andeutete - alle Formularfelder erst mal "per se" im HTML vorhanden, und dann nur die (un)noetigen dynamisch per Style-/Klassenaenderung aus-/eingeblendet?
Weitere Probleme die mich jetzt schon anspringen sind z.b. :
$_POST wird nicht mehr zur verfügung stehen können da das Formular mit ajax nachgeladen wird. Und das eigntliche Skript schon beendet ist.
HM, wie meinen?
Du laedst doch lediglich per AJAX HTML-Code fuer zusaetzliche Formularfelder nach und fuegst diese dann ins "Haupt"-Formular im aktuellen Dokument ein, mit dem sie dann anschliessend "ganz normal" abgeschickt werden koennen - oder habe ich dich da falsch verstanden?
Folgende Felder müssen Sie nur ausfüllen wenn Sie die Einzugsermächtigung gewählt haben.
Wie gesagt, blende sie bei entsprechender (Vor-)Auswahl im Selectfeld doch einfach aus.
Und Ajax Verwende ich dann nur da wo du aufwand dem Ergebnis gerecht wird.
Das ist immer eine gute Idee :-)
MfG ChrisB
Frameworks ersetzen halt keine grundsaetzlichen Kenntnisse ueber und Erfahrungen mit diversen Techniken.
Als Hilfsmittel, um sich als "Erfahrener" die Arbeit einfacher zu machen, halte ich sie fuer voellig legitim.
Ich auch, allerdings sehe ich es auch so das man die Welt nicht neu erfinden sollte. Außer beim lernen.
Wenn aber jemand "ohne Ahnung" (oder eben mit wenig; und das ist jetzt allgemein gesprochen, nicht auf dich bezogen) sie einsetzt, habe ich ob ihres Nutzens oftmals arge Bedenken ...
Das Stimmt. Ajax kenne ich zumindest ich weiß wie es Funktioniert, aber ich Kann kaum bis garkein JS Deshalb das Framework welches auf PHP basiert,
und eigentlich alle js Funktionen selber erstellt.
Daher war dieses Framework meine Wahl.
Was haeltst du denn erst mal von dem simpleren Weg, den Manu schon andeutete - alle Formularfelder erst mal "per se" im HTML vorhanden, und dann nur die (un)noetigen dynamisch per Style-/Klassenaenderung aus-/eingeblendet?
Diese Idee finde ich eigentlich gut, allerdings muss ich dafür JS können.
Deshalb auch für mich schwer umzusätzen.
HM, wie meinen?
Du laedst doch lediglich per AJAX HTML-Code fuer zusaetzliche Formularfelder nach und fuegst diese dann ins "Haupt"-Formular im aktuellen Dokument ein, mit dem sie dann anschliessend "ganz normal" abgeschickt werden koennen - oder habe ich dich da falsch verstanden?
Ja das ist fast richtig, allerdings wird erst das Formular geladen und dann die Erweiterung in der Erweiterung steht aber auch noch PHP z.b. die ausgabe im value='<?php echo $_POST['bank']; ?>
Ausgehend davon das ein Fehler existiert und das Formular wieder angezeigt werden muss mit dem Inhalt den der User schon erfasst hat.
Post steht dann aber nicht mehr zur verfühgung, da das eigentliche skript schon beendet ist. Und XAjax nur die eine Funktion aufruft.
Wahrscheinlich gibt es jede Mänge an Methoden in diesem Framework, leider ist da wieder ein wenig mein English im wege. Die Deutsche Doku`s die man findet sind so fehlerbehaftet, das man deren Seite erstmal debugen muss.
Hi,
Was haeltst du denn erst mal von dem simpleren Weg, den Manu schon andeutete - alle Formularfelder erst mal "per se" im HTML vorhanden, und dann nur die (un)noetigen dynamisch per Style-/Klassenaenderung aus-/eingeblendet?
Diese Idee finde ich eigentlich gut, allerdings muss ich dafür JS können.
Deshalb auch für mich schwer umzusätzen.
So schwer ist das nicht ...
Formularfelder erst mal per se per PHP ausgeben, und per CSS verstecken (display:none).
Dann auf Aenderung der Auswahl im Selectfeld reagieren, und ggf. aus der Aus- eine Einblendung machen, ueber Aenderung der style-Eigenschaften der Formularfelder oder ihrer Klasse.
Ja das ist fast richtig, allerdings wird erst das Formular geladen und dann die Erweiterung in der Erweiterung steht aber auch noch PHP z.b. die ausgabe im value='<?php echo $_POST['bank']; ?>
Ausgehend davon das ein Fehler existiert und das Formular wieder angezeigt werden muss mit dem Inhalt den der User schon erfasst hat.Post steht dann aber nicht mehr zur verfühgung, da das eigentliche skript schon beendet ist. Und XAjax nur die eine Funktion aufruft.
Dieses Problem ergibt sich aber erst aus der Verwendung von AJAX, weil es eben einen unabhaengigen zweiten Request bedeutet.
Machst du es so wie vorgeschlagen, dass du das ganze Formular gleich vom PHP-Script generieren laesst, kannst du dort auch die zusaetzlichen Felder gleich wieder vorbelegt ausgeben lassen.
MfG ChrisB
Dieses Problem ergibt sich aber erst aus der Verwendung von AJAX, weil es eben einen unabhaengigen zweiten Request bedeutet.
Ja das stimmt ich werde die Ajax funktion nur dann verwenden wenn ich Daten aus DB nachladen möchte usw.
Für diesen Einsatz ist es nicht geeignet.
Machst du es so wie vorgeschlagen, dass du das ganze Formular gleich vom PHP-Script generieren laesst, kannst du dort auch die zusaetzlichen Felder gleich wieder vorbelegt ausgeben lassen.
Ihr habt mich überzeugt.
Und ich lese ganz fleizig.
<script type="text/javascript">
function einblenden(select, id) {
if(select==3){
if(document.getElementById(id).style.display == "none") {
document.getElementById(id).style.display = "inline"
} else {
document.getElementById(id).style.display = "none"
}
}
}
</script>
Select ist bei der Funktion das Value also bei Einzusermächtigung die ID 3.
Leider habe ich 2 Probleme ich schaffe es nicht beide Werte an die Funktion zu übergeben.
Ich dachte es geht so:
echo "<select name='zahlungsart' onchange=\"einblenden(this.options[this.selectedIndex].value, 'bankdaten') return false\" >";
Das 2 Problem wieder ausgehend vom Fehlerfall.
Da soll der Ausgeblendete Teil eingeblendet sein wenn der User diese zahlungsart zuvor gewählt hat. Nicht eingeblendet wenn er dies nicht zuvor gewählt hat.
Das könnte man doch einfach auch mit JS machen, also wenn das Formular aufgerufen wird, und Zahlungsart == 3 ist dann seige an else dann halt nicht.
Da stellt ich mir nur die Frage wie komme ich an die Variable zahlungsart?
Danke für die Hilfe
So den ersten Fehler konnte ich lösen, so das es wunderbar funktioniert.
Beim 2 Problem bin noch nicht wirklich weiter.
Also ausgehend vom Fehlerfall:
Wenn zahlungsart == 3 dann zeige es an wenn nicht dann blende es aus.
Wie kann ich das am besten Lösen ?
Hi,
Ihr habt mich überzeugt.
Dafuer sind wir ja hier :-)
<script type="text/javascript">
function einblenden(select, id) {
if(select==3){
if(document.getElementById(id).style.display == "none") {
document.getElementById(id).style.display = "inline"
} else {
document.getElementById(id).style.display = "none"
}
}
}</script>
>
> Select ist bei der Funktion das Value also bei Einzusermächtigung die ID 3.
>
> Leider habe ich 2 Probleme ich schaffe es nicht beide Werte an die Funktion zu übergeben.
>
> Ich dachte es geht so:
>
> ~~~php
> echo "<select name='zahlungsart' onchange=\"einblenden(this.options[this.selectedIndex].value, 'bankdaten') return false\" >";
>
Und was geht daran nicht?
Welche Fehlermeldung bekommst du, oder welcher Wert wird statt dem erwarteten uebergeben?
Das 2 Problem wieder ausgehend vom Fehlerfall.
Da soll der Ausgeblendete Teil eingeblendet sein wenn der User diese zahlungsart zuvor gewählt hat. Nicht eingeblendet wenn er dies nicht zuvor gewählt hat.Das könnte man doch einfach auch mit JS machen,
Koennte man "auch", aber ist das denn wirklich der "einfachere" Weg?
Du generierst im Fehlerfalle doch sowieso ein "neues" Formular serverseitig.
Also frage doch im PHP-Script ab, welche Zahlungsart ausgewaehlt wurde - und je nachdem, generierst du dann ein style="display:none" in den Container, der die entsprechenden Formularfelder enthaelt [1] hinein, oder nicht. (Das waere der Quick&Dirty-Weg - es ueber eine Klasse zu machen, waere "schoener".)
[1] Bspw. sowas wie ein Fieldset um die Bankdaten-Formularfelder herum sollte ja ggf. vorhanden sein.
also wenn das Formular aufgerufen wird, und Zahlungsart == 3 ist dann seige an else dann halt nicht.
Da stellt ich mir nur die Frage wie komme ich an die Variable zahlungsart?
An den Wert kaemst du (so du es denn mit Javascript loesen wolltest) genauso wie vorher - du fragst ab, was im Selectfeld aktuell ausgewaehlt ist (und du hast es ja mit dem vorbelegt, was der Nutzer vor dem Abschicken des Formulars ausgewaehlt hatte).
Die Javascript-Funktion, die darauf reagiert, kann die gleiche sein, die auf onchange auf dem Selectfeld reagiert - nur dass du hier nicht auf onchange wartest, sondern sie bspw. per onload anstoesst.
MfG ChrisB
Hi
Und was geht daran nicht?
Welche Fehlermeldung bekommst du, oder welcher Wert wird statt dem erwarteten uebergeben?
Hatte mich versehen, die Werte werden einbandfrei übergeben.
Leider habe ich mich versehen was die id von Div angeht, übergeben hatte ich bank_daten aber es sollte sein bankdaten. Firebug ist für mich noch recht neu daher musste ich mich da erstmal zurecht finden
Aber der teil funktioniert wunderbar.
Du generierst im Fehlerfalle doch sowieso ein "neues" Formular serverseitig.
Nein egal welcher zustand ein Formular hat, es wird immer das gleiche Formular wieder angezeigt. Also eine Datei formular.php diese enthält das Formular diese wird includet wenn jemand das Formular ausfüllen möchte und auch wenn er ein Fehler bekommt.
Aber ich glaube du meinst das anders oder?
Also frage doch im PHP-Script ab, welche Zahlungsart ausgewaehlt wurde - und je nachdem, generierst du dann ein style="display:none" in den Container, der die entsprechenden Formularfelder enthaelt [1] hinein, oder nicht. (Das waere der Quick&Dirty-Weg - es ueber eine Klasse zu machen, waere "schoener".)
An den Wert kaemst du (so du es denn mit Javascript loesen wolltest) genauso wie vorher - du fragst ab, was im Selectfeld aktuell ausgewaehlt ist (und du hast es ja mit dem vorbelegt, was der Nutzer vor dem Abschicken des Formulars ausgewaehlt hatte).
Die Javascript-Funktion, die darauf reagiert, kann die gleiche sein, die auf onchange auf dem Selectfeld reagiert - nur dass du hier nicht auf onchange wartest, sondern sie bspw. per onload anstoesst.
Mit Klassen zu arbeiten ist sicher immer schöner möchte aber erstmal den Quick&Dirty-Weg hinbekommen.
Ich habe es versucht mal so zu lösen:
<?php
if (isset($_POST['zahlungsart']) AND $_POST['zahlungsart'] == 3){ ?>
<script type="text/javascript">
onload="einblenden('3', 'bankdaten'); return false"
</script>
<?php }
So brauche ich ja garnicht prüfen was auf selected steht, da ich dieses ja in php weiß. Aber leider Passiert nix noch nicht mal nen Fehler.
Mh aber ich könnte doch auch direckt das Display Atribut ändern ohne die Funktion einblenden zu verwenden ich bin mal ein wenig lesen und testen/Probieren.
Ah mist Sorry ich sollte erst lesen bzw genauer lesen man verwende onload auch im Body Tag dann geht das alles super freu.
Das Ziel habe ich jetz schonmal ereicht.
Vielen vielen Dank!
Wie meinst du das jetzt mit einer Klasse? Eine PHP Klasse ?
Hi,
Wie meinst du das jetzt mit einer Klasse? Eine PHP Klasse ?
Nein, ein class-Attribut im HTML, auf das im CSS entsprechend Bezug genommen wird.
Nehmen wir an, du hast x Felder im Bankdaten-Bereich des Formulars - dann koenntest du natuerlich diese auch x-mal mit display:none versehen bzw. x-mal per JavaScript diese Eigenschaft dynamisch setzen.
Hast du die Felder aber bspw. in einem Fieldset gruppiert (oder notfalls auch ein anderer Container, ein Div, wenn Fieldset optisch nicht "passt"), dann koenntest du dem einfach dynamisch (serverseitig per PHP oder clientseitig per JavaScript) eine Klasse namens "hidden" o.ae. verpassen, und im CSS dann
fieldset.hidden { display:none; }
definieren.
Direkt diesem Container-Element display:none zu verpassen, ginge natuerlich auch - aber per Klasse ist "schoener", und macht die konkrete Formatierung vom PHP-/JavaScript-Code unabhaengiger. Beim Verstecken ist das noch weniger relevant - aber wenn du bspw. auf fehlerhaft ausgefuellte Felder mit einer anderen Formatierung hinweisen wolltest, dann koenntest du natuerlich color:red; gleich im PHP-/JavaScript-Code unterbringen. Aber wenn du dann irgendwann mal nicht mehr rote Textfarbe als Fehlerhinweis verwenden willst, sondern bspw. Fettschrift - dann muesstest du in dem Falle den PHP-/JavaScript-Code anpassen.
Verpasst du den Elementen stattdessen einfach eine Klasse "error" o.ae., dann brauchst du lediglich noch im CSS von
.error { color:red; }
auf
.error { font-weight:bold; }
anspassen ...
MfG ChrisB
Hi
jetzt habe ich verstanden was du meintest.
Danke für deine Ausfürliche Hilfe!
Manu sein Post hatte ich irgendwie die ganze Zeit übersehen, da dieser
Forumaufbau für mich etwas ungewohnt ist.
Sorry Manu!
@Manu
Auch wenn mein Projekt mitlerweile über 400 HTML Datein groß ist, also nur ausgabe keine Logik, gibt es aus meiner sicht keine Daseinsbereichtigung für Template System wie Smarty oder andere.
Eine neue Sprache zu entwickeln um diese dann zu Pasen aber trotzdem Logik in einer HTML Datei zu schreiben mh Naja, da fehlt mir der Sinn.
MVC ist da schon aus meiner sicht der bessere Weg, auch wenn dieses nicht ganz einfach ist dies in PHP um zu sätzen. Aber ansatzweise macht es viel Sinn.
Nur meine Meinung ohne jemanden jetzt angreifen zu wollen.
MfG
Thorsten
Hallo,
nur kurz, da ich grad aufm Sprung bin.
Nur nebenbei: ich benutze Smarty, das macht solche Sachen wie das Vorbelegen in Formularen bspw. einfacher. Die Smarty-Variablen sind hier alle in geschwungenen Klammern und großgeschrieben (der Übersichtlichkeit halber habe ich auf Smartys html_options verzichtet).
Möglicherweise hilft Dir dieser Ansatz etwas :
html:
<form action="#" method="post">
<div class="element">
<select name="payment" onchange="xajax_showtype(this.value);">
<option value="0" {if !$PAYMENT}selected="selected"{/if}>Bitte wählen...</option>
<option value="1" {if $PAYMENT == 1}selected="selected"{/if}>Einzugsermächtigung</option>
<option value="2" {if $PAYMENT == 2}selected="selected"{/if}>Barzahlung</option>
</select>
</div>
<div class="element" id="extra" {if $PAYMENT != 1}style="display:none;"{/if}>
<input type="text" name="username" value="{$USERNAME}" />
</div>
[usw...]
</form>
xajax:
function showtype($iValue) {
$oResponse = new xajaxMyResponse();
$sExtra = ($iValue == 1) ? '' : 'none';
$oResponse->assign('extra','style.display',$sExtra);
return $oResponse;
}
Sieht doch ganz einfach aus, nicht ;)
Bei einem hidden Div mußt Du allerdings davon ausgehen, dass die input-Felder mit übermittelt werden - was ja hier für den Fall eigentlich egal sein dürfte, Du hast ja den Wert aus 'payment', nach dem Du auswertest oder eben nicht...
Gruß,
Manu