php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 31.08.2007, 16:14  
Erfahrener Benutzer
 
Registriert seit: 27.08.2003
Beiträge: 449
PHP-Kenntnisse:
Fortgeschritten
GSJLink
Standard Eigene Form Klasse

Hallo,

ich bin gerade dabei, mir eine kleine Klasse zu schreiben, mit der ich relativ einfach ein Formular erstellen kann und die Daten dann entsprechend in eine mySQL Datenbank übergebe. Leider fehlt mir da ein gewisser Ansatz. Hier erstmal meine beiden Dateien:

lib.inc.php

PHP-Code:
 
class addForm {

    var 
$form;

    function 
openform($action$method "post"$name "form"$class="class1") {
        
$this->form $this->form."<form method=\"".$method."\" action=\"".$action."\" name=\"".$name."\" style=\"display:inline;\">\n\t<table class=\"".$class."\">\n";        
    }
    function 
closeform() {
        
$this->form $this->form."\t</table>\n</form>\n";    
    }
    function 
echoform() {
        echo 
$this->form;
    }
    function 
addinput($screenname$name$value=""$maxlength="255") {
        
$this->form $this->form."\t\t<tr>\n\t\t\t<td>".$screenname."</td>\n\t\t\t<td><input type=\"text\" name=\"".$name."\" value=\"".$value."\" maxlength=\"".$maxlength."\" /></td>\n\t\t</tr>\n";
    }
    function 
addspace() {
        
$this->form $this->form."\t\t<tr>\n\t\t\t<td colspan=\"2\"></td>\n\t\t</tr>";
    }
    function 
addsubmit($value$name "submit") {
        
$this->form $this->form."\t\t<tr>\n\t\t\t<td></td>\n\t\t\t<td><input type=\"submit\" name=\"".$name."\" value=\"".$value."\" /></td>\n\t\t</tr>\n";    
    }

}

?> 
index.php

PHP-Code:
 
require_once("lib.inc.php");

$form = new addForm;
$form->openform("index.php");
$form->addinput("Feld 1""input1");
$form->addinput("Feld 2""input2""Das ist Input2!");
$form->addspace();
$form->addsubmit("Absenden");
$form->closeform();
$form->echoform();

?> 
Ich weiß, dass es für dieses Problem zahlreiche fertige Klassen gibt. Allerdings bleibt da der Lerneffekt aus, auf den ich aus bin

Könnt ihr mir helfen?


mfg
Link
GSJLink ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 31.08.2007, 17:01  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Wenn du sagst dir fehlt ein gewisser Ansatz dann schau doch einfach wie es in den fertigen Klassen gemacht wurde. Der Lerneffekt ist doch der gleiche ob du es nun von hier aus übernimmst oder aus den fertigen Klassen.
cycap ist offline   Mit Zitat antworten
Alt 31.08.2007, 17:02  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Wodrauf willste hinaus?

Also du solltest vlt. erstmal noch etwas einbauen dass die Werte nach bestimmten regeln überprüft. Zahlen z.b.

Und dann eben noch die Eingabe speichern.
Flor1an ist offline   Mit Zitat antworten
Alt 31.08.2007, 17:39  
Erfahrener Benutzer
 
Registriert seit: 27.08.2003
Beiträge: 449
PHP-Kenntnisse:
Fortgeschritten
GSJLink
Standard

Ok,

ich hab das ganze jetzt mal etwas umgebaut. Funktioniert soweit auch. Muss durch mich nur noch etwas erweitert werden.

Jetzt würde ich aber gerne noch eure Meinung zu der Form hören. Also im Bezug auf die Struktur. Gibt es da noch Optimierungsmöglichkeiten oder kann man das erst sagen, wenn die Klasse ihren vollen Funktionsumfang hat?

lib.inc.php

PHP-Code:
class addForm {

    var 
$form;
    var 
$checkform;
    var 
$errors;
    var 
$error_count;
    
    function 
checkform() {    
        
$this->checkform true;
        
$this->error_count 0;    
        
$this->errors = array();
    }
    
    function 
openform($action$method "post"$name "form"$class="class1") {
        
$this->form $this->form."<form method=\"".$method."\" action=\"".$action."\" name=\"".$name."\" style=\"display:inline;\">\n\t<table class=\"".$class."\">\n";        
    }
    
    function 
closeform() {
        
$this->form $this->form."\t</table>\n</form>\n";    
    }
    
    function 
echoform() {
        if(
$this->checkform == true) {    
            if(
count($this->errors) > 0) {
                foreach(
$this->errors as $error) {
                    echo 
$error."
\n"
;
                }
                echo 
"<hr />\n";
                echo 
$this->form;
            }else{
                echo 
'Daten gespeichert!';        
            }
        }else{
            echo 
$this->form;
        }
    }
    
    function 
addinput($screenname$name$maxlength="255") {
        if(
$this->checkform == true) {
            if(
$_POST[$name] == "") {
                
$this->errors[$this->error_count] = "Bitte Feld ".$screenname." ausfüllen!";
                
$this->error_count++;
            }
            
$this->form $this->form."\t\t<tr>\n\t\t\t<td>".$screenname."</td>\n\t\t\t<td><input type=\"text\" name=\"".$name."\" value=\"".$_POST[$name]."\" maxlength=\"".$maxlength."\" /></td>\n\t\t</tr>\n";
        }else{
            
$this->form $this->form."\t\t<tr>\n\t\t\t<td>".$screenname."</td>\n\t\t\t<td><input type=\"text\" name=\"".$name."\" value=\"\" maxlength=\"".$maxlength."\" /></td>\n\t\t</tr>\n";
        }
        
    }
    
    function 
addspace() {
        
$this->form $this->form."\t\t<tr>\n\t\t\t<td colspan=\"2\"></td>\n\t\t</tr>\n";
    }
    
    function 
addsubmit($value$name "submit") {
        
$this->form $this->form."\t\t<tr>\n\t\t\t<td></td>\n\t\t\t<td><input type=\"submit\" name=\"".$name."\" value=\"".$value."\" /></td>\n\t\t</tr>\n";    
    }

}
?> 
index.php

PHP-Code:
require_once("lib.inc.php");

$form = new addForm;
if(isset(
$_REQUEST['submit'])) {
echo 
"[b]Submit[/b]

\n"
;
$form->checkform();
}
$form->openform("index.php");
$form->addinput("Feld 1""input1");
$form->addinput("Feld 2""input2");
$form->addspace();
$form->addsubmit("Absenden");
$form->closeform();
$form->echoform();

?> 

mfg
Link
GSJLink ist offline   Mit Zitat antworten
Alt 31.08.2007, 22:36  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo GSJLink,

da parallel zu dieser Diskussion eine im Anfänger-Forum läuft, hier nochmal kurz das Fazit dazu: eine Form-Klasse sollte für alle Elemente (ausser natürlich Start und Ende des Formulars) bereits Value-Presetting und Validierung unterstützen, denn sonst ist der generierte Overhead für die Katz! Ansonsten halte ch es für gefährlich, dass die Methoden, die ein Formular-Element unterstützen, die Ausgabe selbst erledigen, da man so nicht garantieren kann, dass die Ausgabe konstrolliert getätigt werden kann.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 01.09.2007, 01:11  
Erfahrener Benutzer
 
Registriert seit: 17.01.2006
Beiträge: 468
Slava
Standard

Wie süß
Ok, ich sende der Link 2-te mal für heute
http://pear.php.net/packages.php?catpid=10&catname=HTML
__________________
Slava
http://bituniverse.com
Slava ist offline   Mit Zitat antworten
Alt 01.09.2007, 12:45  
Erfahrener Benutzer
 
Registriert seit: 27.08.2003
Beiträge: 449
PHP-Kenntnisse:
Fortgeschritten
GSJLink
Standard

Zitat:
Zitat von dr.e.
Hallo GSJLink,

da parallel zu dieser Diskussion eine im Anfänger-Forum läuft, hier nochmal kurz das Fazit dazu: eine Form-Klasse sollte für alle Elemente (ausser natürlich Start und Ende des Formulars) bereits Value-Presetting und Validierung unterstützen, denn sonst ist der generierte Overhead für die Katz! Ansonsten halte ch es für gefährlich, dass die Methoden, die ein Formular-Element unterstützen, die Ausgabe selbst erledigen, da man so nicht garantieren kann, dass die Ausgabe konstrolliert getätigt werden kann.
Gut, es ist nur so, dass ich hinterher die Klasse noch soweit ausbauen möchte, dass man zwischen Erstellen und Editieren unterscheidet. Wie ich das genau anstelle weiß ich jetzt noch nicht. Die von dir angesprochene Validierung für z.B. input Felder ist eine gute Idee, die ich noch einbauen werde (also ob man in das Input Feld nur zahlen eintragen darf, oder max x Zeichen, oder noch einfacher nach diesem [xyz] Schema, um z.B. auch auf E-Mailadressen kontrollieren zu können).

Bei deinem letzten Satz verstehe ich noch nicht so ganz, wie du das meinst.


mfg
Link
GSJLink ist offline   Mit Zitat antworten
Alt 01.09.2007, 14:22  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo GSJLink,

Zitat:
Gut, es ist nur so, dass ich hinterher die Klasse noch soweit ausbauen möchte, dass man zwischen Erstellen und Editieren unterscheidet.
Das ist meiner Ansicht nach nicht nötig. Du solltest dich hier allein auf das Generieren von HTML beschränken und die Ausgabe durch eine weitere Komponente steuern lassen (Provider-Logik). Beim Erstellen eines Formular-Feldes kannst du diesem ja einen Provider mitgeben, der dir die aktuellen Daten aus dem REQUEST ausliest und an Hand dieser Information Validierung und Presetting durchführt. Diesen Provider kannst du in deinem Controller (wie nehmen an du implementierst als Fortgeschrittener nach diesem Pattern) die für einen Editier-Vorgang notwenige Erstbefüllung des Formulars aus der Datenbank mitgeben. Für alle weiteren POSTs des Formulars sind diese dann ja nicht mehr notwenig, weil im REQUEST enthalten. Damit musst du im Controller zwar dazwischen unterscheiden, deine Komponente jedoch ist von derartiger Logik befreit, was sie nur aufblähen würden.


Zitat:
Bei deinem letzten Satz verstehe ich noch nicht so ganz, wie du das meinst.
Auch hier nehme ich wieder an, dass du nach MVC implementierst. Das impliziert doch, dass du Templates füllen können möchtest, was mit deiner bisherigen Implementierung nicht möglich ist, weil du den HTML-Code direkt mit "echo" ausgibst. Statt dessen würde ich besser ein "return" verwenden, dann kann man deine Klasse auch für das Erzeugen eines Formulars innerhalb eines Templates verwenden. Würdest du das nicht ändern, verwendest aber eine Template-Engine, stünde dein Formular überall dort, wo du es nicht haben wolltest...
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 01.09.2007, 14:30  
Erfahrener Benutzer
 
Registriert seit: 27.08.2003
Beiträge: 449
PHP-Kenntnisse:
Fortgeschritten
GSJLink
Standard

Zitat:
Zitat von dr.e.
Hallo GSJLink,

Zitat:
Gut, es ist nur so, dass ich hinterher die Klasse noch soweit ausbauen möchte, dass man zwischen Erstellen und Editieren unterscheidet.
Das ist meiner Ansicht nach nicht nötig. Du solltest dich hier allein auf das Generieren von HTML beschränken und die Ausgabe durch eine weitere Komponente steuern lassen (Provider-Logik). Beim Erstellen eines Formular-Feldes kannst du diesem ja einen Provider mitgeben, der dir die aktuellen Daten aus dem REQUEST ausliest und an Hand dieser Information Validierung und Presetting durchführt. Diesen Provider kannst du in deinem Controller (wie nehmen an du implementierst als Fortgeschrittener nach diesem Pattern) die für einen Editier-Vorgang notwenige Erstbefüllung des Formulars aus der Datenbank mitgeben. Für alle weiteren POSTs des Formulars sind diese dann ja nicht mehr notwenig, weil im REQUEST enthalten. Damit musst du im Controller zwar dazwischen unterscheiden, deine Komponente jedoch ist von derartiger Logik befreit, was sie nur aufblähen würden.
Ok das leuchtet mir ein. Du meinst also, das ich beim Editiervorgang ja nur am Anfang das Formular mit den Daten des zu editierenden Objekts befüllen muss. Der Rest ist ja dann quasi derselbe. Ich muss dem Formular nur mitgeben, das er den Datensatz editieren soll und nicht einen neuen erstellen soll. Das ist aber kein Problem.

Zitat:
Zitat von dr.e.
Zitat:
Bei deinem letzten Satz verstehe ich noch nicht so ganz, wie du das meinst.
Auch hier nehme ich wieder an, dass du nach MVC implementierst. Das impliziert doch, dass du Templates füllen können möchtest, was mit deiner bisherigen Implementierung nicht möglich ist, weil du den HTML-Code direkt mit "echo" ausgibst. Statt dessen würde ich besser ein "return" verwenden, dann kann man deine Klasse auch für das Erzeugen eines Formulars innerhalb eines Templates verwenden. Würdest du das nicht ändern, verwendest aber eine Template-Engine, stünde dein Formular überall dort, wo du es nicht haben wolltest...
Hm nein, ein Template direkt möchte ich hier nicht verwenden. Die Anpassung wie CSS reicht mir völlig. (Ich erweitere die Funktionen dann noch mit einem $class Parameter, mitdem ich das Element dann einer CSS Klasse verknüpfen kann).


mfg
Link
GSJLink ist offline   Mit Zitat antworten
Alt 01.09.2007, 15:40  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo GSJLink,

Zitat:
Das ist aber kein Problem.
OK.


Zitat:
Hm nein, ein Template direkt möchte ich hier nicht verwenden. Die Anpassung wie CSS reicht mir völlig. (Ich erweitere die Funktionen dann noch mit einem $class Parameter, mitdem ich das Element dann einer CSS Klasse verknüpfen kann).
Du willst mir also sagen, dass du in deinen Applikationen keine Templates verwendest? Falls nein, nehme ich dir diese Aussage ab, falls nein, wirst du damit trotzdem Probleme haben. Die Formatierung per CSS (class, style) solltest du natürlich vorsehen, sonst wird dir das nicht generiert.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Variable aus Klasse herausbekommen GSJLink PHP Tipps 2008 7 16.02.2008 22:25
HTML Klasse ecomeback PHP Tipps 2008 6 31.08.2007 22:32
String-Parser Klasse - was muss rein? Matze PHP Tipps 2007 2 08.04.2007 22:14
MySQL - Klasse: Wie da mysql_close benutzen Igäl PHP Tipps 2006 5 01.10.2006 23:09
mehr als eine Klasse einbinden Alpha Centauri PHP-Fortgeschrittene 4 13.04.2006 20:56
Instanz einer Klasse in SessionVariable PHP-Fortgeschrittene 2 21.02.2006 00:18
Klasenname einer nicht instanziierten Klasse DerDesian PHP Tipps 2007 9 30.11.2005 13:13
Instanz einer Klasse in einer anderen Klasse verwenden Buhmann PHP-Fortgeschrittene 7 28.10.2005 23:12
[Erledigt] Führerschein für Klasse A+B.. Preis OK??? Off-Topic Diskussionen 20 13.07.2005 18:44
Rückgabewert auf einer Klasse anders als in der Klasse micbur PHP Tipps 2005-2 6 10.06.2005 15:06
[Erledigt] Problem mit Übergabe einer Klasse in PHP4 PHP-Fortgeschrittene 10 08.01.2005 21:00
Klasse holt sich die Klasse PHP-Fortgeschrittene 9 07.10.2004 11:53
[Erledigt] Brauche Hilfe bei meiner ersten Klasse PHP-Fortgeschrittene 9 24.09.2004 17:09
Klassenobjet in anderer Klasse benutzen inu PHP Tipps 2004 6 19.09.2004 10:58
Klasse ändern UniQ PHP Tipps 2004 5 24.08.2004 14:46

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php form class, php form klasse, form method=\action\ datenbank, php eigene formular klasse, eigen form klasse, formular klasse php, form klasse, eigene html klasse, php5 $form post, php 5 class formular, form class php, table form php class, php eigene lib.inc.php, php5 form class, form class mehrere, php formular class function, html form eigene klasse, formklasse, forms klassen code, php5 form vars an klasse

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:30 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.