Re: Magic Quotes in PHP6 verschwunden?

Re: Magic Quotes in PHP6 verschwunden?

am 21.12.2007 01:35:46 von Michael Fesser

..oO(Frank Burmeister)

>Ich lese im Internet, das PHP6 auf Magic Quotes "verzichten" soll, das
>heisst es soll per default abgeschaltet sein.

Nicht nur abgeschaltet, sondern komplett raus.

>Weiss jemand warum? Ist das nicht ein kleiner Verlust an Sicherheit?

Nein, im Gegenteil. Magic Quotes verleiten zu schlampiger Programmierung
und einem falschen Gefühl von Sicherheit. Für korrekte und vor allem
sichere Maskierung von Zeichen mit spezieller Bedeutung braucht's auch
spezielle Funktionen für das jeweilige Ziel, z.B. eine Datenbank.

Für MySQL gibt's mysql_real_escape_string(), für andere DBMS gibt's
Vergleichbares (oder man nimmt gleich PDO und Prepared Statements). Im
Gegensatz zu Magic Quotes ziehen diese Funktionen auch Besonderheiten
der jeweiligen Datenbank in Betracht wie z.B. die gerade verwendete
Zeichencodierung etc. Eine generische "Lösung" wie Magic Quotes kann
prinzipiell nicht zuverlässig funktionieren und hat in sauberem Code
daher nichts zu suchen.

Micha

Magic Quotes in PHP6 verschwunden?

am 21.12.2007 02:14:53 von Rainer Hinz

Moin,

kurze Frage:
Ich lese im Internet, das PHP6 auf Magic Quotes "verzichten" soll, das=20
heisst es soll per default abgeschaltet sein.

Weiss jemand warum? Ist das nicht ein kleiner Verlust an Sicherheit?

Danke für Antworten

Gruß
Frank B.

--=20
"Unterwerfung ist die einzige bequeme Antwort auf Autorität"

Re: Magic Quotes in PHP6 verschwunden?

am 21.12.2007 09:18:36 von mmueller12

Michael Fesser schrieb:
> Eine generische "Lösung" wie Magic Quotes kann
> prinzipiell nicht zuverlässig funktionieren und hat in sauberem Code
> daher nichts zu suchen.

Hat auch den Vorteil, dass man die magic_quotes-Einstellung nicht
überprüfen muss in einem Skript, dass auch auf anderen Hostern
funktionieren soll :)

Michael

Re: Magic Quotes in PHP6 verschwunden?

am 21.12.2007 11:59:22 von Ulf Kadner

Frank Burmeister schrieb:

> kurze Frage:
> Ich lese im Internet, das PHP6 auf Magic Quotes "verzichten" soll, das
> heisst es soll per default abgeschaltet sein.
>
> Weiss jemand warum? Ist das nicht ein kleiner Verlust an Sicherheit?

Zu, Problem selbst wurde ja schon was gesagt.

Allerdings finde ich es im Anbetracht Deines Postings erstaunlich was
andere alles so in diesen magic_quotes Verriß hineininterpretieren.

Es wär nett wenn Du mal erklären könntest wie Du darauf kommst, das
magic_quotes deiner Meinung nach mehr Sicherheit bringen.

Ich will Dich nicht diffamieren. Es geht mir lediglich um die
Hintergründe und wo sowas her kommt. Also raus damit. :-)

MfG, Ulf

Re: Magic Quotes in PHP6 verschwunden?

am 21.12.2007 12:21:22 von Johannes Mueller

Ulf Kadner wrote:
> Frank Burmeister schrieb:
>
>> kurze Frage:
>> Ich lese im Internet, das PHP6 auf Magic Quotes "verzichten" soll,
>> das heisst es soll per default abgeschaltet sein.
>>
>> Weiss jemand warum? Ist das nicht ein kleiner Verlust an Sicherheit?
>
> Zu, Problem selbst wurde ja schon was gesagt.
>
> Allerdings finde ich es im Anbetracht Deines Postings erstaunlich was
> andere alles so in diesen magic_quotes Verriß hineininterpretieren.
>
> Es wär nett wenn Du mal erklären könntest wie Du darauf kommst, das
> magic_quotes deiner Meinung nach mehr Sicherheit bringen.
>
> Ich will Dich nicht diffamieren. Es geht mir lediglich um die
> Hintergründe und wo sowas her kommt. Also raus damit. :-)

Im Buch "PHP 5 & MySQL 5" von Michael Kofler heisst es zu Magic-Quotes:

Zitat (S.184): "Aus Formularen übermittelte Daten können ohne Veränderung in
INSERT-Kommandos verwendet werden. Die Kritischen Zeichen [..] sind schon
quotiert."

....naja...

Grüße
Johannes

--
Emails ohne "[nospam]" im Betreff werden kommentarlos gelöscht.

Re: Magic Quotes in PHP6 verschwunden?

am 21.12.2007 13:17:44 von Ulf Kadner

Johannes Mueller schrieb:

> Im Buch "PHP 5 & MySQL 5" von Michael Kofler heisst es zu Magic-Quotes:
>
> Zitat (S.184): "Aus Formularen übermittelte Daten können ohne Veränderung in
> INSERT-Kommandos verwendet werden. Die Kritischen Zeichen [..] sind schon
> quotiert."

Alter Schwede. Soviel Dummschwatz in so nem kurzen Satz.

Wieviel bekommt man denn an Kohle wenn man dem Author ein Buch abnimmt? ;-)

Das erklärt natürlich einiges. Aber es werden ja nicht alle beim
Buchkauf so in die Schei*e greifen.

MfG, Ulf

Re: Magic Quotes in PHP6 verschwunden?

am 21.12.2007 15:55:23 von mmueller12

Ulf Kadner schrieb:
> Wieviel bekommt man denn an Kohle wenn man dem Author ein Buch abnimmt? ;-)
>
> Das erklärt natürlich einiges. Aber es werden ja nicht alle beim
> Buchkauf so in die Schei*e greifen.

Dabei soll "der Kofler", also das Linux-Buch, ziemlich bedeutend sein.

Michael

Re: Magic Quotes in PHP6 verschwunden?

am 21.12.2007 17:49:46 von Hadanite Marasek

> Alter Schwede. Soviel Dummschwatz in so nem kurzen Satz.
>
> Wieviel bekommt man denn an Kohle wenn man dem Author ein Buch abnimmt? ;-)
>
> Das erklärt natürlich einiges. Aber es werden ja nicht alle beim
> Buchkauf so in die Schei*e greifen.

Ach, das ist noch gar nichts - in meinem Buch wird ganz ungezwungen die
Verwendung von Autoglobals oder wie die hiessen propagiert. Und Daten
werden natürlich ganz und gar ungeprüft verwendet. Urrr...

--
Mein Zeugs:
http://www.hadanite-marasek.de/classes.php
http://www.objektivsuche.de/
Ansonsten:
http://www.php-faq.de/q/q-newsgroup-wie-helfen.html

Re: Magic Quotes in PHP6 verschwunden?

am 21.12.2007 18:06:51 von Gregor Kofler

Frank Burmeister meinte:

> Ich will ja nicht meckern. Ich für meinen Teil habe ja die entsprechende
> Applikation gerade bei Formularen, die genau folgendes bei der
> Datenübernahme automatisch auf dem Server macht:
> - addslashes() mit PHP/MySQL/Postgres Funktion

Wieso? Vor dem speichern *_(real)_escape_string(). Dafür wurde die
Funktion gemacht. Im Manual wird auch ausdrücklich dazu geraten, diese
Funktionen anstelle von addslashes() zu verwenden.

> - Prüfen ob leer und ob das sein darf
> ... wenn nicht leer:
> - Prüfen gegen regulären Ausdruck
> - Prüfen ob die maximale Länge eingehalten wurden und bei Bedarf auf die
> Maximallänge kürzt.
> - Prüfen ob die Mindestlänge eingehalten wurde

Machst du das wirklich so? Alle 4 Punkte kann man mit einer RegEx auch
erschlagen (das Kürzen der Maximallänge kann man immer noch beim
unmittelbaren Schreibvorgang machen - wenn überhaupt).

Gruß, Gregor


--
http://www.gregorkofler.at ::: Landschafts- und Reisefotografie
http://www.licht-blick.at ::: Forum für Multivisionsvorträge
http://www.image2d.com ::: Bildagentur für den alpinen Raum

Re: Magic Quotes in PHP6 verschwunden?

am 21.12.2007 18:15:34 von Hadanite Marasek

Frank Burmeister schrieb:
> Hadanite Marasek wrote:
>
>> Ach, das ist noch gar nichts - in meinem Buch wird ganz ungezwungen die
>> Verwendung von Autoglobals oder wie die hiessen propagiert. Und Daten
>> werden natürlich ganz und gar ungeprüft verwendet. Urrr...
>
> Wurde das nicht in den neueren Auflagen korrigiert? (der Begriff hieß
> übrigens register_globals und es ist ganz gut, dass du diesen vergessen
> hast)

Nur der Vollständigkeit halber - ich rede von einem anderen Buch. In
anderen Auflagen habe ich nicht mehr nachgeschaut.

--
Mein Zeugs:
http://www.hadanite-marasek.de/classes.php
http://www.objektivsuche.de/
Ansonsten:
http://www.php-faq.de/q/q-newsgroup-wie-helfen.html

Re: Magic Quotes in PHP6 verschwunden?

am 21.12.2007 18:23:03 von Hadanite Marasek

>> - Prüfen ob leer und ob das sein darf
>> ... wenn nicht leer:
>> - Prüfen gegen regulären Ausdruck
>> - Prüfen ob die maximale Länge eingehalten wurden und bei Bedarf auf
>> die Maximallänge kürzt.
>> - Prüfen ob die Mindestlänge eingehalten wurde
>
> Machst du das wirklich so? Alle 4 Punkte kann man mit einer RegEx auch
> erschlagen (das Kürzen der Maximallänge kann man immer noch beim
> unmittelbaren Schreibvorgang machen - wenn überhaupt).

Ich mach das ähnlich - eine Regex gibt mir nämlich für alle vier Fälle
den gleichen Fehler, das finde ich nicht sonderlich Benutzerfreundlich.
Zudem möchte ich mir jede Prüfung modular aufbauen können
(Maximalprüfung ist bei mir: Empty-Prüfung, Typprüfung, Prüfung gegen
Array (nur ein Element des Arrays ist erlaubt), Prüfung gegen Regex und
Prüfung gegen Callback).

Kürzen vor dem Speichern halte ich für krank, schlimm genug, dass MySQL
das im nicht-Strict-Modus schon so macht. Ungültige Daten werden solange
moniert, bis der Nutzer sich bequemt, etwas Valides einzugeben.

--
Mein Zeugs:
http://www.hadanite-marasek.de/classes.php
http://www.objektivsuche.de/
Ansonsten:
http://www.php-faq.de/q/q-newsgroup-wie-helfen.html

Re: Magic Quotes in PHP6 verschwunden?

am 21.12.2007 18:38:40 von Jonas Werres

Eben das ist das Problem, das solche Einstellungen erzeugen: Die Leute
meinen, sie könnten sie nutzen. dads ist aber falsh.
PHP-addslashes führt im Allgemeinen eben nciht die Quotierung durch, die
für eine Datenbank nötig ist. Schon alleine deswegen nicht, weil das für
vershiedene Datenbanken unterschiedlich ist.
Darüber hinaus ist Code, der sich auf sowas verlässt, nicht
uneingeschrängt auf andere Server übertragbar, weil es deaktiviert sein
könnte.
Wenn man also ein vernünftiges Script schreibt, dann beinhaltet das
immer, magic_quotes_runtime zu deaktivieren und alle GPC-Arrays zu
bereinigen, um Werte auf einen definierten Zustand zu bringen.
Anschließend arbeitet man mit den Werten wie sie sind und escapet mit
den _geeigneten_ Funktionen: htmlentities für Ausgabe in HTML,
mysql_real_escape_string() für mysql-Datenbanken, $pdo->quote() für
PDO-Queries usw.

Re: Magic Quotes in PHP6 verschwunden?

am 21.12.2007 18:53:52 von Rainer Hinz

Ulf Kadner wrote:

> Allerdings finde ich es im Anbetracht Deines Postings erstaunlich was=20
> andere alles so in diesen magic_quotes Verriß hineininterpretieren.
>=20
> Es wär nett wenn Du mal erklären könntest wie Du darauf kommst, d=
as=20
> magic_quotes deiner Meinung nach mehr Sicherheit bringen.

Ob es *die* Sicherheit gibt, das scheint sich ja immer zu relativieren.

Das es etwas Sicherheit bringt, dürfte aber nicht umstritten sein, da=20
es SQL-Injektionen verhindern/erschweren kann.

Was ist aber die Alternative, wenn Magic-Quotes erstmal weg sind?

Zunächst einmal müssen alle Variablen, zumeist Formularvariablen mit =

der Funktion addslashes() (oder den passenden Funktionen für die=20
entsprechenden Datenbanken) bearbeitet werden. Ich weiss nicht, ob=20
allen PHP-Programmierern dieser Aufwand "bewusst" ist. Nun übernimmt=20
Magic-Quotes doch bereits dieses Problem "vollautomatisch". Warum also=20
abschalten? Den einen Punkt, den ich mir denken kann, ist es, dass mit=20
der entsprechenden SQL-Injektion das addslashes() zu knacken ist. Okay.
Der andere Punkt wäre in der Tat, das Magic-Quotes bei einem anderen=20
Server abgeschaltet wäre oder aber man im Falle des "Shared"-Hosting=20
immer von den Launen des Administrators abhängt.

Ich will ja nicht meckern. Ich für meinen Teil habe ja die=20
entsprechende Applikation gerade bei Formularen, die genau folgendes=20
bei der Datenübernahme automatisch auf dem Server macht:
- addslashes() mit PHP/MySQL/Postgres Funktion
- Prüfen ob leer und ob das sein darf
.. wenn nicht leer:
- Prüfen gegen regulären Ausdruck
- Prüfen ob die maximale Länge eingehalten wurden und bei Bedarf auf =

die Maximallänge kürzt.
- Prüfen ob die Mindestlänge eingehalten wurde

Ist nur eine Bedingung nicht erreicht, wird das Formular als fehlerhaft=20
zurückgewiesen und nicht gespeichert.

Ich meine damit einen maximalen Anteil an Sicherheit in meine=20
Formulareingaben zu bringen. Korrigiere mich, wenn ich noch was vergesse.=


Aber, und darum geht mir das Posting eigentlich:
Die Anwendungen, die ich kennen, gehen zu über 90% in die Richtung=20
register_globals ON, allow_url_open ON und "Magic-Quotes? Was das denn?"

Wenn dann noch in den Anwendungen folgendes steht:

wird mir relativ schwarz vor Augen.

Witzigerweise sind diese Anwendungen mit Magic-Quotes immer gegen=20
SQL-Injektionen (versehentlich?) gesichert. Man muss also etwas die=20
Struktur kennen, um mal kurz Code von außen mittels http:// zu laden.
(Oder man probiert kurz aus)

Meines Erachtens würde Magic-Quotes mit Sicherheit das Denken=20
derjeniger anregen, die ihr Tagesgeschäft kennen, jedoch in keinster=20
Weise diejenigen in Wallung versetzen, die sowieso keine Ahnung haben=20
können/wollen/...

Mein Hit war sowieso eine Druckfunktion auf einem Portal, die in einer=20
versteckten "Hidden" Variable, die zuletzt gesehenene Datenausgabe als=20
*komplettes* SQL-Query auf die Seite geladen hatte. Da brauchte man nur=20
ein komplettes Query seiner Wahl eintragen und schon spielte man auf=20
einer Datenbank mit Root-Rechten rum. Unglaublich.

Gruß
Frank B.




--=20
"Unterwerfung ist die einzige bequeme Antwort auf Autorität"

Re: Magic Quotes in PHP6 verschwunden?

am 21.12.2007 19:00:08 von Rainer Hinz

Hadanite Marasek wrote:

> Ach, das ist noch gar nichts - in meinem Buch wird ganz ungezwungen die=

> Verwendung von Autoglobals oder wie die hiessen propagiert. Und Daten
> werden natürlich ganz und gar ungeprüft verwendet. Urrr...

Wurde das nicht in den neueren Auflagen korrigiert? (der Begriff hieß
übrigens register_globals und es ist ganz gut, dass du diesen vergessen=
=20
hast)

Gruß
Frank B.

--=20
"Unterwerfung ist die einzige bequeme Antwort auf Autorität"

Re: Magic Quotes in PHP6 verschwunden?

am 21.12.2007 19:06:18 von Sven Drieling

Frank Burmeister wrote:

Hallo,

> Was ist aber die Alternative, wenn Magic-Quotes erstmal weg sind?

Filter Functions
http://www.php.net/manual/en/ref.filter.php

oder die Tainted mode Vorschläge wie

ftp://ftp.porcupine.org/pub/php/php-5.2.3-taint-20071102.REA DME.html


Die aber auch ähnlich wie Magic-Quotes ihre Grenzen haben.

Allgemein sinnvoll ist das eigene spezifische drauf achten z.B. durch
Benutzung von Prepared Statements.

> Nun übernimmt Magic-Quotes doch bereits dieses Problem "vollautomat=
isch".
> Warum also abschalten?

Weil Magic-Quotes zu unspezifisch und damit zu unsicher sind.

=20
tschuess
[|8:)

Re: Magic Quotes in PHP6 verschwunden?

am 21.12.2007 19:41:50 von Niels Braczek

Johannes Mueller schrieb:

> Zitat (S.184): "Aus Formularen übermittelte Daten können ohne Verä=
nderung in=20
> INSERT-Kommandos verwendet werden. Die Kritischen Zeichen [..] sind sch=
on=20
> quotiert."

Nicht mal die Vokabeln stimmen: Der begriff heißt auf Deutsch nicht
"quotieren" (das wäre "Festlegen einer Quote"), sondern "maskieren".

MfG
Niels

--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------

Re: Magic Quotes in PHP6 verschwunden?

am 21.12.2007 19:41:51 von Rainer Hinz

Gregor Kofler wrote:

>> - Prüfen ob leer und ob das sein darf
>> ... wenn nicht leer:
>> - Prüfen gegen regulären Ausdruck
>> - Prüfen ob die maximale Länge eingehalten wurden und bei Bedarf a=
uf=20
>> die Maximallänge kürzt.
>> - Prüfen ob die Mindestlänge eingehalten wurde
>=20
> Machst du das wirklich so? Alle 4 Punkte kann man mit einer RegEx auch =

> erschlagen (das Kürzen der Maximallänge kann man immer noch beim=20
> unmittelbaren Schreibvorgang machen - wenn überhaupt).

Ja, das kann man tun. Nur wenn der reguläre Ausdruck fehlschlägt,=20
welche Fehlermeldung gibst du dann aus?
Und was ist einfacher zu konfigurieren? Gerade letzteres finde ich=20
bequemer, wenn ich ein Formularfeld wie folgt konfiguriere

empty=3D"false" value=3D"" format=3D"">

Die maximale Länge ergibt sich direkt aus dem Attribut maxlength, wie=20
man es beim Input kennt. Da muss ich nicht noch im regulären Ausdruck=20
rumfrickeln. Und was wichtiger ist, ich habe eine detailierte=20
Fehlermeldung, welche mir ein regulärer Ausdruck nicht bringt. Ich kann=
=20
nunmal dem Anwender nicht als Fehlermeldung präsentieren:
"Der reguläre Ausdruck für Feld XYZ schlug fehl!" oder
"Das Feld XYZ ist entweder zu kurz, zu lang, ist leer oder im falschen=20
Format"

wenn ich statt dessen (automatisch versteht sich) schreiben kann:
"Das Feld XYZ ist leer!"
"Das Feld XYZ muss mind. 5 Zeichen haben!"
"Das Feld XYZ ist im falschen Format!"
"Das Feld XYZ ist zu lang!"

Was wäre sowas mit einem einzigen regulären Ausdruck zu erschlagen, s=
o=20
dass ich als Programmierer eine Entscheidung fällen kann?

BTW: Mit dem *_escape_string() vorm Speichern hast du natürlich recht. =

Wo auch sonst noch, wenn nicht dort.

Gruß
Frank B.

--=20
"Unterwerfung ist die einzige bequeme Antwort auf Autorität"

Re: Magic Quotes in PHP6 verschwunden?

am 21.12.2007 19:43:34 von Rainer Hinz

Hadanite Marasek wrote:
>=20
> Nur der Vollständigkeit halber - ich rede von einem anderen Buch. In
> anderen Auflagen habe ich nicht mehr nachgeschaut.
>=20

Du redest wahrscheinlich vom Kofler PHP/MySQL Buch, oder?

Gruß
Frank B.

--=20
"Unterwerfung ist die einzige bequeme Antwort auf Autorität"

Re: Magic Quotes in PHP6 verschwunden?

am 21.12.2007 19:58:25 von Rainer Hinz

Hadanite Marasek wrote:

> (Maximalprüfung ist bei mir: Empty-Prüfung, Typprüfung, Prüfung=
gegen
> Array (nur ein Element des Arrays ist erlaubt), Prüfung gegen Regex u=
nd
> Prüfung gegen Callback).

Kurze Fragen:
- Typprüfung, warum? Welcher Anwendungsfall könnte sowas gebrauchen?
- Was ist eine Prüfung gegen Callback?

> Kürzen vor dem Speichern halte ich für krank, schlimm genug, dass M=
ySQL
> das im nicht-Strict-Modus schon so macht.=20

Hm. Wenn ein Feld nur 50 Zeichen maximal haben soll, warum soll ich=20
dann vom Client mehr als 50 Zeichen übernehmen? Könnte ja auch der=20
Versuch sein, irgendwas zu versuchen.

> Ungültige Daten werden solange
> moniert, bis der Nutzer sich bequemt, etwas Valides einzugeben.

Stimmt. Am besten zuerst per Javascript und dann nochmal vom Server=20
aus, wenn der Client versucht mit abgeschalteten Javascript zu=20
schummeln. ;-)

Gruß
Frank B.

--=20
"Unterwerfung ist die einzige bequeme Antwort auf Autorität"

Re: Magic Quotes in PHP6 verschwunden?

am 21.12.2007 20:03:44 von Hadanite Marasek

> Du redest wahrscheinlich vom Kofler PHP/MySQL Buch, oder?
>
> Gruß
> Frank B.

Nee, denn das wurde ja ein paar Postings vorher erwähnt. Deswegen sagte
ich ja: anderes Buch.

--
Mein Zeugs:
http://www.hadanite-marasek.de/classes.php
http://www.objektivsuche.de/
Ansonsten:
http://www.php-faq.de/q/q-newsgroup-wie-helfen.html

Re: Magic Quotes in PHP6 verschwunden?

am 21.12.2007 20:10:24 von Hadanite Marasek

> Kurze Fragen:
> - Typprüfung, warum? Welcher Anwendungsfall könnte sowas gebrauchen?

z. B. Alter. Gut, im Formularkontext verwende ich es selten, aber der
Validator existiert auch Standalone und kann deswegen für alles mögliche
verwendet werden.

> - Was ist eine Prüfung gegen Callback?

Ich kann eine Callback-Funktion definieren, die den Prüfling als
Parameter bekommt.

>> Kürzen vor dem Speichern halte ich für krank, schlimm genug, dass MySQL
>> das im nicht-Strict-Modus schon so macht.
>
> Hm. Wenn ein Feld nur 50 Zeichen maximal haben soll, warum soll ich dann
> vom Client mehr als 50 Zeichen übernehmen? Könnte ja auch der Versuch
> sein, irgendwas zu versuchen.

Weil der Client dann gerne per Telefon bei mir aufschlägt und fragt,
warum in der Abfrage Frau Leutheusser-Schnarre rauskommt.

>> Ungültige Daten werden solange
>> moniert, bis der Nutzer sich bequemt, etwas Valides einzugeben.
>
> Stimmt. Am besten zuerst per Javascript und dann nochmal vom Server aus,
> wenn der Client versucht mit abgeschalteten Javascript zu schummeln. ;-)

Naa...mag nich JavaScript...

--
Mein Zeugs:
http://www.hadanite-marasek.de/classes.php
http://www.objektivsuche.de/
Ansonsten:
http://www.php-faq.de/q/q-newsgroup-wie-helfen.html

Re: Magic Quotes in PHP6 verschwunden?

am 21.12.2007 20:31:03 von Hadanite Marasek

Sven Drieling schrieb:
> Frank Burmeister wrote:
>
> Hallo,
>
>> Was ist aber die Alternative, wenn Magic-Quotes erstmal weg sind?
>
> Filter Functions
> http://www.php.net/manual/en/ref.filter.php

Ich hab was schöneres:

$structure = new SemanticStructure();
$structure->addElement("height", new SemanticConstraint());
$structure->setType("int");
$structure->addElement("gender");
$structure->setEnum(array("male", "female"));
$structure->addElement("birthday");
$structure->setConvert(new Callback(array("Date", "fromIsodate")));

$array["height"] = "182";
$array["gender"] = "male";
$array["birthday"] = "2005-06-13";
$extract = $structure->extract($array);

In $extract steht dann:
array(3) {
["height"]=> int(128)
["gender"]=> string(4) "male"
["birthday"]=> object(Date)#21 (3) {
(gekürzt)
}
}

Für jede Abweichung gibt es eine Exception, auch wenn in height z. B.
"182.3" steht (da das nicht verlustfrei zu int umgewandelt werden kann)
--
Mein Zeugs:
http://www.hadanite-marasek.de/classes.php
http://www.objektivsuche.de/
Ansonsten:
http://www.php-faq.de/q/q-newsgroup-wie-helfen.html

Re: Magic Quotes in PHP6 verschwunden?

am 21.12.2007 21:19:43 von Rainer Hinz

Hadanite Marasek wrote:
>> - Was ist eine Prüfung gegen Callback?
>=20
> Ich kann eine Callback-Funktion definieren, die den Prüfling als
> Parameter bekommt.

Hm...keine schlechte Idee. Muss mal meinen Formular-Meister ansprechen,=20
vielleicht bekomme ich noch eine Funktion mehr.

>> Hm. Wenn ein Feld nur 50 Zeichen maximal haben soll, warum soll ich da=
nn
>> vom Client mehr als 50 Zeichen übernehmen? Könnte ja auch der Vers=
uch
>> sein, irgendwas zu versuchen.
>=20
> Weil der Client dann gerne per Telefon bei mir aufschlägt und fragt,
> warum in der Abfrage Frau Leutheusser-Schnarre rauskommt.

Nun, gut. Ist aber ein anderes Problem. Aus der Datenbankstruktur=20
ergibt sich eine maximale Länge für Nachnamen (z.B. 50 Zeichen).=20
Irgendwo wird halt gekürzt.

>> Stimmt. Am besten zuerst per Javascript und dann nochmal vom Server au=
s,
>> wenn der Client versucht mit abgeschalteten Javascript zu schummeln. ;=
-)
>=20
> Naa...mag nich JavaScript...

So schlimm ist es auch nicht, ganz im Gegenteil...

Gruß
Frank B.



--=20
"Unterwerfung ist die einzige bequeme Antwort auf Autorität"

Re: Magic Quotes in PHP6 verschwunden?

am 21.12.2007 21:37:14 von Stefan+Usenet

On Fri, 21 Dec 2007 20:31:03 +0100 Hadanite Marasek wrote:
> In $extract steht dann:
> array(3) {
> ["height"]=> int(128)
> ["gender"]=> string(4) "male"
> ["birthday"]=> object(Date)#21 (3) {
> (gekürzt)
> }
> }

> Für jede Abweichung gibt es eine Exception, auch wenn in height z. B.
> "182.3" steht (da das nicht verlustfrei zu int umgewandelt werden kann)

Einer meiner geheimen Wuensche ist schon seit laengerem eine
Implementierung von etwas aehnlichem in Anlehnung an
, moeglichst vollstaendig und
inklusive insbesondere der diversen Facets aus Punkt 4.3. Bis ich
die Zeit dafuer finde, bin ich aber vermutlich in Rente :-/

Servus,
Stefan

--
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich

Geht nicht!? Das gibt's nicht, jedenfalls nicht bei uns: Stefan.
(Sloganizer)

Re: Magic Quotes in PHP6 verschwunden?

am 21.12.2007 22:35:49 von Hadanite Marasek

> Ähem... tu mir bitte einen Gefallen und erkläre mir mal, ob ich das auch
> schön finden könnte. Ich verstehe nicht, was das darstellen soll.

Naja, die Klasse wandelt den einen Array - der nur strings enthält - in
die gewünschten Typen um, darunter auch ein Objekt, und nimmt
gleichzeitig eine Gültigkeitsprüfung vor.

--
Mein Zeugs:
http://www.hadanite-marasek.de/classes.php
http://www.objektivsuche.de/
Ansonsten:
http://www.php-faq.de/q/q-newsgroup-wie-helfen.html

Re: Magic Quotes in PHP6 verschwunden?

am 21.12.2007 22:53:43 von Rainer Hinz

Hadanite Marasek wrote:

> Ich hab was schöneres:

Ähem... tu mir bitte einen Gefallen und erkläre mir mal, ob ich das=20
auch schön finden könnte. Ich verstehe nicht, was das darstellen soll=


Danke und Gruß

Frank B.
--=20
"Unterwerfung ist die einzige bequeme Antwort auf Autorität"

Re: Magic Quotes in PHP6 verschwunden?

am 21.12.2007 23:59:02 von Johannes Mueller

Ulf Kadner wrote:
> Johannes Mueller schrieb:
>
>> Im Buch "PHP 5 & MySQL 5" von Michael Kofler heisst es zu
>> Magic-Quotes: Zitat (S.184): "Aus Formularen übermittelte Daten können
>> ohne
>> Veränderung in INSERT-Kommandos verwendet werden. Die Kritischen
>> Zeichen [..] sind schon quotiert."
>
> Alter Schwede. Soviel Dummschwatz in so nem kurzen Satz.
>
> Wieviel bekommt man denn an Kohle wenn man dem Author ein Buch
> abnimmt? ;-)
> Das erklärt natürlich einiges. Aber es werden ja nicht alle beim
> Buchkauf so in die Schei*e greifen.

Ich gebe zu an dieser Stelle irrt der Autor. Aber abgesehen davon finde ich
das Buch eigentlich ganz gut. Sehr verständlich geschrieben - mit PHP hat
das Buch zwar wenig am Hut, aber mit MySQL kann man da schon ein bißchen was
mitnehmen.

Grüße
Johannes

--
Emails ohne "[nospam]" im Betreff werden kommentarlos gelöscht.

Re: Magic Quotes in PHP6 verschwunden?

am 22.12.2007 02:09:52 von Hadanite Marasek

> Ähem... tu mir bitte einen Gefallen und erkläre mir mal, ob ich das auch
> schön finden könnte. Ich verstehe nicht, was das darstellen soll.

Um es deutlicher zu machen (vorhin hatte ich weniger Zeit): Die Klasse
dient dazu, eine Struktur zu definieren, die ein Array haben soll. Dann
kann man entweder einen Array gegen diese Definition prüfen oder aus
einem grösseren Array den Teilbereich rausextrahieren, den man definiert
hat, wobei noch evtl. definierte Umwandlungen angewendet werden.

Erfüllt der Array nicht die Struktur, wird eine Exception geworfen.
--
Mein Zeugs:
http://www.hadanite-marasek.de/classes.php
http://www.objektivsuche.de/
Ansonsten:
http://www.php-faq.de/q/q-newsgroup-wie-helfen.html

Re: Magic Quotes in PHP6 verschwunden?

am 22.12.2007 10:32:58 von Gregor Kofler

Frank Burmeister meinte:

> Ja, das kann man tun. Nur wenn der reguläre Ausdruck fehlschlägt, welche
> Fehlermeldung gibst du dann aus?

*Wenn* ich unterschiedliche Fehlermeldungen brauche, dann ja. IdR ist in
einem Feld "Name (max. 64 Zeichen)" oder "Alter (in Jahren)" aber klar,
was rein soll.

> Und was ist einfacher zu konfigurieren? Gerade letzteres finde ich
> bequemer, wenn ich ein Formularfeld wie folgt konfiguriere
>
> > empty="false" value="" format="">
>
> Die maximale Länge ergibt sich direkt aus dem Attribut maxlength, wie
> man es beim Input kennt. Da muss ich nicht noch im regulären Ausdruck
> rumfrickeln.

Maxlength könnte man ja problemlos am Client umgehen. Aber mache ich für
den "normalen" Anwender natürlich auch so.

> Und was wichtiger ist, ich habe eine detailierte
> Fehlermeldung, welche mir ein regulärer Ausdruck nicht bringt. Ich kann
> nunmal dem Anwender nicht als Fehlermeldung präsentieren:
> "Der reguläre Ausdruck für Feld XYZ schlug fehl!" oder
> "Das Feld XYZ ist entweder zu kurz, zu lang, ist leer oder im falschen
> Format"

s.o.

Gruß, Gregor


--
http://www.gregorkofler.at ::: Landschafts- und Reisefotografie
http://www.licht-blick.at ::: Forum für Multivisionsvorträge
http://www.image2d.com ::: Bildagentur für den alpinen Raum

Re: Magic Quotes in PHP6 verschwunden?

am 22.12.2007 14:05:57 von Gregor Kofler

Frank Burmeister meinte:
> Gregor Kofler wrote:
>
>> *Wenn* ich unterschiedliche Fehlermeldungen brauche, dann ja. IdR ist
>> in einem Feld "Name (max. 64 Zeichen)" oder "Alter (in Jahren)" aber
>> klar, was rein soll.
>
> Diese Differenzierung *ob* und *wenn* ist aber inkonsequent. Selbst das
> einfache Problem gefüllt oder falsches Format mit einem regulären
> Ausdruck zu erschlagen und entsprechend eine Meldung herauszubringen,
> ist schwerer, als eine Prüfung mit empty() und danach noch einmal mit
> einem regulären Ausdruck. Deshalb ist nur ein regulärer Ausdruck unpassend.

Dann muss ich es wohl schon sehr lange falsch machen. Aber bei

Felder mit * sind auszufüllen
Name* _____

und bei Nichteingabe ein rot unterlegtes "Name*" hat (hoffentlich) noch
jeder verstanden. Die Überprüfung von Emails auf syntaktische Gültigkeit
und etwaige Doppeleinträge erledige ich klarerweise in mehreren
Schritten (und generiere entsprechend unterschiedliche Fehlermeldungen).

>>> >>> empty="false" value="" format="">

[Erläuterungen dazu]

Wie realisierst du bei deiner Lösung Abhängigkeiten von Formularfeldern,
etwa dass eines gefüllt sein muss, wenn ein anderes einen entsprechenden
Wert aufweisst, oder sich die RegEx ändern muss (etwa bei Postleitzahlen
in Abhängigkeit vom Land)?

Gruß, Gregor


--
http://www.gregorkofler.at ::: Landschafts- und Reisefotografie
http://www.licht-blick.at ::: Forum für Multivisionsvorträge
http://www.image2d.com ::: Bildagentur für den alpinen Raum

Re: Magic Quotes in PHP6 verschwunden?

am 22.12.2007 14:10:07 von Christoph Herrmann

Frank Burmeister schrieb:
> Nun liegt das auf der Hand, dass ich maxlength natürlich in den
> regulären Ausdruck bringen kann, jedoch nichts gewinne. Zudem muss ich

maxlength in Textfelder von Formularen dient nur der
Benutzerfreundlichkeit und bringt in keinster Weise ein Plus an Sicherheit.

Ich weiß nicht, ob das bei dir so gemeint war, aber ich wollte das
nochmal ganz klar sagen für die Anfänger, falls jetzt jemand denkt er
braucht das nicht am Server zu überprüfen. :)

--
Mit freundlichen Grüßen,
Christoph Herrmann

http://dragonprojects.de/

Re: Magic Quotes in PHP6 verschwunden?

am 22.12.2007 14:13:30 von Christoph Herrmann

Frank Burmeister schrieb:
> Und was ist einfacher zu konfigurieren? Gerade letzteres finde ich
> bequemer, wenn ich ein Formularfeld wie folgt konfiguriere
>
> > empty="false" value="" format="">

Das ist sicherlich kein gültiges HTML oder?

--
Mit freundlichen Grüßen,
Christoph Herrmann

http://dragonprojects.de/

Re: Magic Quotes in PHP6 verschwunden?

am 22.12.2007 14:43:18 von Gregor Kofler

Christoph Herrmann meinte:
> Frank Burmeister schrieb:
>> Und was ist einfacher zu konfigurieren? Gerade letzteres finde ich
>> bequemer, wenn ich ein Formularfeld wie folgt konfiguriere
>>
>> >> empty="false" value="" format="">
>
> Das ist sicherlich kein gültiges HTML oder?

XML-Template für Formulare?

Gregor


--
http://www.gregorkofler.at ::: Landschafts- und Reisefotografie
http://www.licht-blick.at ::: Forum für Multivisionsvorträge
http://www.image2d.com ::: Bildagentur für den alpinen Raum

Re: Magic Quotes in PHP6 verschwunden?

am 22.12.2007 14:47:01 von Rainer Hinz

Gregor Kofler wrote:

> *Wenn* ich unterschiedliche Fehlermeldungen brauche, dann ja. IdR ist i=
n=20
> einem Feld "Name (max. 64 Zeichen)" oder "Alter (in Jahren)" aber klar,=
=20
> was rein soll.

Diese Differenzierung *ob* und *wenn* ist aber inkonsequent. Selbst das=20
einfache Problem gefüllt oder falsches Format mit einem regulären=20
Ausdruck zu erschlagen und entsprechend eine Meldung herauszubringen,=20
ist schwerer, als eine Prüfung mit empty() und danach noch einmal mit=20
einem regulären Ausdruck. Deshalb ist nur ein regulärer Ausdruck unpa=
ssend.

>> Und was ist einfacher zu konfigurieren? Gerade letzteres finde ich=20
>> bequemer, wenn ich ein Formularfeld wie folgt konfiguriere
>>
>> >> empty=3D"false" value=3D"" format=3D"">
>>
>> Die maximale Länge ergibt sich direkt aus dem Attribut maxlength, wi=
e=20
>> man es beim Input kennt. Da muss ich nicht noch im regulären Ausdruc=
k=20
>> rumfrickeln.
>=20
> Maxlength könnte man ja problemlos am Client umgehen. Aber mache ich =
für=20
> den "normalen" Anwender natürlich auch so.

Ja, aber hier verstehst du etwas komplett falsch: Die obige Einrichtung=20
erfolgt am Server, das heisst durch den Programmierer. Obiger Ausdruck,=20
wohlgemerkt vereinfacht dargestellt (einige Attribute fehlen),=20
generiert das Formularelement (in diesem Fall )=20
mit den entsprechenden Parametern und prüft bei der Übernahme vom=20
Client die Eingabe mit eben diesen.
Nun liegt das auf der Hand, dass ich maxlength natürlich in den=20
regulären Ausdruck bringen kann, jedoch nichts gewinne. Zudem muss ich =

ja immer noch ein maxlength beim Clienten generieren und woher soll=20
dieser Wert kommen? Soll ich auf dem Server meinen selbst generierten=20
regulären Ausdruck noch parsen?
Es wird hier zweigleisig gefahren, eben weil es einfacher zu handhaben=20
ist. Zudem brauche ich mich nicht um ein *wenn* zu kümmern, da meine=20
Formulareingaben automatisch immer der kompletten Prüfung unterliegen, =

inkl. Select, Radio und Checkboxen, die ja gerne immer vergessen werden.

Gruß
Frank B.
--=20
"Unterwerfung ist die einzige bequeme Antwort auf Autorität"

Re: Magic Quotes in PHP6 verschwunden?

am 22.12.2007 15:07:17 von Christoph Herrmann

Gregor Kofler schrieb:
> XML-Template für Formulare?

Ok, das erklärt es. Kam aus deinem Post nicht ganz heraus und bevor es
jemand übernimmt und sich wundert, warum es nicht funktioniert. :)

--
Mit freundlichen Grüßen,
Christoph Herrmann

http://dragonprojects.de/

Re: Magic Quotes in PHP6 verschwunden?

am 22.12.2007 15:08:17 von Ulf Kadner

Frank Burmeister schrieb:

> Ja, das kann man tun. Nur wenn der reguläre Ausdruck fehlschlägt, welche
> Fehlermeldung gibst du dann aus?

Ungültiges Format für Feld "XYZ".

Was ins Feld einzutragen ist muß natürlich für den Nutzer erkennbar sein
weshalb man da sinniger Weise einen beschreibenden Text angeben sollte.

MfG, Ulf

Re: Magic Quotes in PHP6 verschwunden?

am 22.12.2007 15:12:40 von Gregor Kofler

Frank Burmeister meinte:

[Ausführungen gesnippt]

> Das alles könnte ich jetzt noch so programmieren, dass ich deine
> "Switch"-Bedingung durchleben kann, aber wie gesagt, benötige ich das
> recht selten bis gar nicht.

YMMV - bei einem größeren Projekt wurde ich durch die Abhängigkeiten von
Formularfeldern, Benutzerberechtungen, Status etc. schon ganz narrisch...

Meine Lösung schaut übrigens nicht unähnlich aus, allerdings sind die
Templates nach einem smarty-ähnlichem Schema aufgebaut, und Regeln
werden (je nach Bedarf) mit einer addRule(RegEx)-Methode hinzugefügt.
Fehler können auch explizit noch mit einem setError(blockID_des_fehlers)
gesetzt werden (für Überprüfungen, die ich mit RegExen nicht erledigen
kann).

Gruß, Gregor


--
http://www.gregorkofler.at ::: Landschafts- und Reisefotografie
http://www.licht-blick.at ::: Forum für Multivisionsvorträge
http://www.image2d.com ::: Bildagentur für den alpinen Raum

Re: Magic Quotes in PHP6 verschwunden?

am 22.12.2007 15:56:47 von Rainer Hinz

Gregor Kofler wrote:
> Frank Burmeister meinte:

> Dann muss ich es wohl schon sehr lange falsch machen. Aber bei

Es gibt selten ein eindeutiges Richtig oder Falsch.

> Felder mit * sind auszufüllen
> Name* _____
>=20
> und bei Nichteingabe ein rot unterlegtes "Name*" hat (hoffentlich) noch=
=20
> jeder verstanden.=20

Bestimmt, sonst kriegst du ja keinerlei Eingabe.

>>>>
>>>> empty=3D"false" value=3D"" format=3D"">

>=20
> [Erläuterungen dazu]
>=20
> Wie realisierst du bei deiner Lösung Abhängigkeiten von Formularfel=
dern,=20
> etwa dass eines gefüllt sein muss, wenn ein anderes einen entsprechen=
den=20
> Wert aufweisst, oder sich die RegEx ändern muss (etwa bei Postleitzah=
len=20
> in Abhängigkeit vom Land)?

Abhängigkeiten erfordern leider noch etwas Handarbeit, jedoch benutze=20
ich sowas in der Regel selten. Gute Beispiele sind immer Formularfelder=20
mit Datum von-bis Eingaben. Aber ein Beispiel, wo ich sowas richtig=20
schmerzhaft vermisse, habe ich noch nicht produziert als dass es sich=20
lohnt nach einer "automatisierten" Lösung.

Jedoch habe ich bei den Parametern, die ich einmal für das Formular in =

XML definiere, die Möglichkeit, bei der Übernahme dynamische=20
Anpassungen vorzunehmen.

Beispiel:

Klasse Formular:
$form=3Dnew xmlform("XMLDATEI_MIT_FORMULAR",=20
"TEMPLATE_FUER_DOCTYPE_WENN_NICHT_XHTML1.0TRANSITIONAL");

irgendwo im PHP-Script:
$form->buildform("NAME_DES_FORMULARS"[, FEHLERCODES, UEBERGABEWERTE]);
fertig.

Nehme ich nun mein Formular wieder auf:

$vorname=3D$form->pcheck("firstname"); // id des Formulars
$datum=3D$form->pcheck("date");

Irgendwo am Ende der Arie:
if( !$form->getinputerror()){
// alles klar
} else {
// da lief was schief...
}

Möchte ich nun "date" dynamisch pruefen, etwa weil der Benutzer die=20
Wahl hat ein Datum so TT.MM.JJJJ oder so JJJJ-MM-TT einzugeben, so kann=20
ich obige $datum... Zeile wie folgt definieren:

$datum=3D$form->pcheck("date", array("REGEXP"=3D>"#{NEUER REG AUSDRUCK}#"=
))

Wie ich prinzipiell dort alle Laufparameter noch anpassen kann, wie=20
MAXLENGTH, MINLENGTH usw.usf.

Habe ich ein eindeutiges Formular ohne Schnörkeleien, reicht ein
$formulardata=3D$form->pcheckall();

Und wenn ich nur diese Zeile nutzen möchte und trotzdem viel anpassen=20
will, kann ich obige Zeile wie folgt anpassen:

$formulardata=3D$form->pcheckall(array("date"=3D>array("REGE XP"=3D>"#{NEU=
ER=20
REG AUSDRUCK}#")));

Was allerdings ein wenig unübersichtlich sein kann, je nach Formulargrö=
ße.

Das alles könnte ich jetzt noch so programmieren, dass ich deine=20
"Switch"-Bedingung durchleben kann, aber wie gesagt, benötige ich das=20
recht selten bis gar nicht.

Gruß
Frank B.

--=20
"Unterwerfung ist die einzige bequeme Antwort auf Autorität"

Re: Magic Quotes in PHP6 verschwunden?

am 22.12.2007 16:01:09 von Rainer Hinz

Christoph Herrmann wrote:

>> >> empty=3D"false" value=3D"" format=3D"">
>=20
> Das ist sicherlich kein gültiges HTML oder?
>=20

Nein, aber ein Auszug aus einer gültigen XML-Datei. Ich definiere meine=
=20
Formulare komplett in XML-Dateien und lasse sie mit einer bestimmten=20
Klasse ausgeben und validieren. Der Parameter "maxlength" dient zum=20
Einen dazu, das Maxlength-Attribut auf Client Seite zu setzen und auf=20
dem Server die Eingabe anhand der Länge zu überprüfen und entsprech=
end=20
zu reagieren.
value ist der vorbelegte Wert, der jedoch nur dann eingesetzt wird,=20
wenn im Script nichts anderes gesagt wird, wie z.B. Übergabeparameter=20
bei erneuter Eingabe etc.
Format kann z.B. ein printf-Ausdruck sein, wenn man es brauch.

Viele Attribute fehlen noch, wie z.B. die Beschriftung (mehrsprachig),=20
Javascript-Handler bei Bedarf usw.usf.

Prinzipiell ein sehr mächtige Klasse, die ich schon seit längerem Nut=
ze=20
und nichts vergleichbar (gutes) im Netzwerk bisher gefunden habe (Meine=20
Meinung).

Gruß
Frank B.


--=20
"Unterwerfung ist die einzige bequeme Antwort auf Autorität"

Re: Magic Quotes in PHP6 verschwunden?

am 22.12.2007 16:03:40 von Gregor Kofler

Frank Burmeister meinte:
> Gregor Kofler wrote:
>> Frank Burmeister meinte:
>
>> YMMV - bei einem größeren Projekt wurde ich durch die Abhängigkeiten
>> von Formularfeldern, Benutzerberechtungen, Status etc. schon ganz
>> narrisch...
>
> Kannst du mir denn mal wirklich ein Problemfall schildern, wo ich jetzt
> zum Entwickler meiner Lösung (ich lasse gerne arbeiten!) sagen könnte:
> "Hey, ich hätte da ein Idee für eine Weiterentwicklung?"

Wie? Das Problem? "Wenn es sich um ein Hauptprojekt handelt, aber noch
kein Projektleiter feststeht, muss ein Kalkulator eingesetzt werden.
Allerdings nicht bei Forschungsprojekten, die anhand der Projektnummer
unterschieden werden. Ist bereits ein Datum für das Angebot eingetragen
muss jedoch ein Projektleiter feststehen und..." Oder so irgendwie.

> Nun, da ich Smarty nicht nutze, kann ich da nicht mitreden.

Ich nutze Smarty auch nicht. Nur werden Formularelemente mit Curly
Braces ausgezeichnet.

> Mir wäre
> auch kein so richtiger Anwendungsfall bekannt, wo ich außer
> "Suchen&Ersetzen" mehr in meiner simplen Template Maschine brauche. Aber
> ich weiss ja auch nicht alles, darum...

Mit dieser Lösung kann ich etwa Formulartemplates, die sich nur in
Details (sprich einzelnen Feldern unterscheiden) recyclen, da unbefüllte
Platzhalter einfach gelöscht werden. Es lassen sich auch recht bequem
Schleifen für Listenformulare einbauen - weiss nicht wie gut das bei
deiner Lösung klappt.

> Was ich an meiner Lösung so gut finde, ist es, dass im Programmcode im
> "notwendigsten" Fall für ein Formular beliebiger Größe, gerade mal 5
> Zeilen(A-E) PHP-Code verwendet werden müssen. Der Rest ist
> organisatorisches Normalbeiwerk.
> Ein simples Beispiel, ohne Abhängigkeiten oder dynamischen
> Formatänderungen sieht demnach so aus:
>
Shorttags... das kann jetzt wieder eine Diskussion werden...

> $xmlform=new xmlform("meineformulare.xml"); // A
> $formerror=0;
> $okay=false;
>
> while( !$okay ){
> switch( $step ){

woher kommt step?


> case "buildform":
> $xmlform->buildform("testformular",$formerror,$formfields); //B
> $okay=true;
> break;
> case "checkform":
> $formfields=$xmlform->pcheckall(); // C
> if( $formerror==$xmlform->getinputerror()){ // D
> $step="buildform";
> echo "
Es traten Fehler auf...";
> while($msg=$xmlform->fetchreportmsg()){echo "
$msg";} // E
> break;
> } else {
> echo "
Alles Okay! Weiter zum Speichern";
>
> $okay=true;
> break;
> }
> default:
> $step="buildform";
> } // switch
> } // while
> ?>

Na gut. Dann halte ich dagegen...

[snip]

$this->form = new Form('test.htm');

$this->form->addInput('input1');
$this->form->addDropDown('dropdown1', $topics);
$this->form->addTextarea('textarea1');

[snip]

if($this->form->submitted() {
$this->form->addRule('input1', '!^'.Rex::EMAIL.'$!');
$this->form->addRule('dropdown1', Rex::INT_EXCL_NULL);
$this->form->addRule('textarea1', Rex::NOT_EMPTY_TEXT);

$this->form->validate();

if(!$this->form->getFormErrors()) {

machhin_und_speichere_oder_so();

}

Gregor



--
http://www.gregorkofler.at ::: Landschafts- und Reisefotografie
http://www.licht-blick.at ::: Forum für Multivisionsvorträge
http://www.image2d.com ::: Bildagentur für den alpinen Raum

Re: Magic Quotes in PHP6 verschwunden?

am 22.12.2007 16:43:34 von Rainer Hinz

Gregor Kofler wrote:
> Frank Burmeister meinte:

> YMMV - bei einem größeren Projekt wurde ich durch die Abhängigkei=
ten von=20
> Formularfeldern, Benutzerberechtungen, Status etc. schon ganz narrisch.=
.

Kannst du mir denn mal wirklich ein Problemfall schildern, wo ich jetzt=20
zum Entwickler meiner Lösung (ich lasse gerne arbeiten!) sagen könnte=
:=20
"Hey, ich hätte da ein Idee für eine Weiterentwicklung?"

> Meine Lösung schaut übrigens nicht unähnlich aus, allerdings sind=
die=20
> Templates nach einem smarty-ähnlichem Schema aufgebaut, und Regeln=20
> werden (je nach Bedarf) mit einer addRule(RegEx)-Methode hinzugefügt.=
=20
> Fehler können auch explizit noch mit einem setError(blockID_des_fehle=
rs)=20
> gesetzt werden (für Überprüfungen, die ich mit RegExen nicht erle=
digen=20
> kann).

Nun, da ich Smarty nicht nutze, kann ich da nicht mitreden. Mir wäre=20
auch kein so richtiger Anwendungsfall bekannt, wo ich außer=20
"Suchen&Ersetzen" mehr in meiner simplen Template Maschine brauche.=20
Aber ich weiss ja auch nicht alles, darum...

Was ich an meiner Lösung so gut finde, ist es, dass im Programmcode im =

"notwendigsten" Fall für ein Formular beliebiger Größe, gerade mal =
5=20
Zeilen(A-E) PHP-Code verwendet werden müssen. Der Rest ist=20
organisatorisches Normalbeiwerk.
Ein simples Beispiel, ohne Abhängigkeiten oder dynamischen=20
Formatänderungen sieht demnach so aus:
$xmlform=3Dnew xmlform("meineformulare.xml"); // A
$formerror=3D0;
$okay=3Dfalse;

while( !$okay ){
switch( $step ){
case "buildform":
$xmlform->buildform("testformular",$formerror,$formfields); //B
$okay=3Dtrue;
break;
case "checkform":
$formfields=3D$xmlform->pcheckall(); // C
if( $formerror==$xmlform->getinputerror()){ // D
$step=3D"buildform";
echo "
Es traten Fehler auf...";
while($msg=3D$xmlform->fetchreportmsg()){echo "
$msg";} // E
break;
} else {
echo "
Alles Okay! Weiter zum Speichern";=09

$okay=3Dtrue;
break;
}
default:
$step=3D"buildform";
} // switch
} // while
?>

Einzig das Formular, bzw. die Definition muss noch gemacht werden. Was=20
zudem noch fehlt ist die Einbindung der passenden CSS, bzw. der, die=20
man haben will.

Gruß
Frank B.


--=20
"Unterwerfung ist die einzige bequeme Antwort auf Autorität"

Re: Magic Quotes in PHP6 verschwunden?

am 22.12.2007 20:48:56 von Rainer Hinz

Gregor Kofler wrote:

> Platzhalter einfach gelöscht werden. Es lassen sich auch recht bequem=
=20
> Schleifen für Listenformulare einbauen - weiss nicht wie gut das bei =

> deiner Lösung klappt.

Listenformulare mache ich in der Regel "per Hand". Benötige ich=20
grundsätzlich nie und wenn, geht das auch so.

>> >=20
> Shorttags... das kann jetzt wieder eine Diskussion werden...

Habe ich noch nie mitbekommen... Neuer Thread? ;-)

>> $xmlform=3Dnew xmlform("meineformulare.xml"); // A
>> $formerror=3D0;
>> $okay=3Dfalse;
>>
>> while( !$okay ){
>> switch( $step ){
>=20
> woher kommt step?

Wo außen. So ist in der Regel das action Feldes des Formulares in der=20
Regel ungefähr so besetzt: action=3D"index.php?step=3Dcheckform"

Natürlich wird $step mittels $_POST/$_GET/$_REQUEST geholt je nachdem.
Aber zur Zeit gehen fast alle Formulare Richtung XAJaX, dass heisst ein=20
Neuladen der Seite wird nicht mehr gemacht, alles mittels Javascript an=20
ein Skript gesendet. Das gut ist, dass meine genutzte Klasse das zu 98%=20
unterstützt. Die 2%, die fehlen, sind für Dateiuploads.

> Na gut. Dann halte ich dagegen...
>=20
> [snip]
>=20
> $this->form =3D new Form('test.htm');
> =20
> $this->form->addInput('input1');
> $this->form->addDropDown('dropdown1', $topics);
> $this->form->addTextarea('textarea1');
>=20
> [snip]
>=20
> if($this->form->submitted() {
> $this->form->addRule('input1', '!^'.Rex::EMAIL.'$!');
> $this->form->addRule('dropdown1', Rex::INT_EXCL_NULL);
> $this->form->addRule('textarea1', Rex::NOT_EMPTY_TEXT);
> =20
> $this->form->validate();
>=20
> if(!$this->form->getFormErrors()) {
>=20
> machhin_und_speichere_oder_so();
>=20
> }

Okay, ich sage mal ich habe anhand der Zeilen gewonnen, denn bei meiner=20
Lösung ist es der obigen Lösung egal, wie viele Elemente nun vorhande=
n=20
sind. Das macht den Code ungemein übersichtlicher und kürzer.
Die XML-Datei mit den Formularen ist manchmal recht groß, jedoch habe=20
ich auch Mammutformulare über 3 bis 10 Registerlaschen, die es zu=20
behandeln gilt. Auch da enttäuscht mich meine Formularklasse nicht.
Und das tollste ist es, dass ich die Formulare in jeden Doctype=20
integrieren kann, ohne eine Änderung vorzunehmen.

Gruß
Frank B.
--=20
"Unterwerfung ist die einzige bequeme Antwort auf Autorität"