Bookmarks

Yahoo Gmail Google Facebook Delicious Twitter Reddit Stumpleupon Myspace Digg

Search queries

w2ksp4.exe, WwwxxXdbf, procmail "FROM_MAILER" patch, Use of assignment to $[ is deprecated at /usr/local/sbin/apxs line 86. , wwwxxx vim, mysql closing table and opening table, 800c5000, setgid operation not permitted, pciehp: acpi_pciehprm on IBM, WWWXXX.DBF

Links

XODOX
Impressum

#1: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-21 01:35:46 by 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

Report this message

#2: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-21 02:14:53 by 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=FCr Antworten

Gru=DF
Frank B.

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

Report this message

#3: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-21 09:18:36 by 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

Report this message

#4: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-21 11:59:22 by 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

Report this message

#5: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-21 12:21:22 by 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.

Report this message

#6: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-21 13:17:44 by 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

Report this message

#7: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-21 15:55:23 by 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

Report this message

#8: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-21 17:49:46 by 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

Report this message

#9: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-21 18:06:51 by 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

Report this message

#10: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-21 18:15:34 by 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

Report this message

#11: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-21 18:23:03 by 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

Report this message

#12: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-21 18:38:40 by 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.

Report this message

#13: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-21 18:53:52 by Rainer Hinz

Ulf Kadner wrote:

> Allerdings finde ich es im Anbetracht Deines Postings erstaunlich was=20
> andere alles so in diesen magic_quotes Verri=DF hineininterpretieren.
>=20
> Es w=E4r nett wenn Du mal erkl=E4ren k=F6nntest 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=FCrfte aber nicht umstritten sein, da=20
es SQL-Injektionen verhindern/erschweren kann.

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

Zun=E4chst einmal m=FCssen alle Variablen, zumeist Formularvariablen mit =

der Funktion addslashes() (oder den passenden Funktionen f=FCr die=20
entsprechenden Datenbanken) bearbeitet werden. Ich weiss nicht, ob=20
allen PHP-Programmierern dieser Aufwand "bewusst" ist. Nun =FCbernimmt=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=E4re in der Tat, das Magic-Quotes bei einem anderen=20
Server abgeschaltet w=E4re oder aber man im Falle des "Shared"-Hosting=20
immer von den Launen des Administrators abh=E4ngt.

Ich will ja nicht meckern. Ich f=FCr meinen Teil habe ja die=20
entsprechende Applikation gerade bei Formularen, die genau folgendes=20
bei der Daten=FCbernahme automatisch auf dem Server macht:
- addslashes() mit PHP/MySQL/Postgres Funktion
- Pr=FCfen ob leer und ob das sein darf
=2E.. wenn nicht leer:
- Pr=FCfen gegen regul=E4ren Ausdruck
- Pr=FCfen ob die maximale L=E4nge eingehalten wurden und bei Bedarf auf =

die Maximall=E4nge k=FCrzt.
- Pr=FCfen ob die Mindestl=E4nge eingehalten wurde

Ist nur eine Bedingung nicht erreicht, wird das Formular als fehlerhaft=20
zur=FCckgewiesen 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 =FCber 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:
<?include($MODULE);?>
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=DFen mittels http:// zu laden.
(Oder man probiert kurz aus)

Meines Erachtens w=FCrde Magic-Quotes mit Sicherheit das Denken=20
derjeniger anregen, die ihr Tagesgesch=E4ft kennen, jedoch in keinster=20
Weise diejenigen in Wallung versetzen, die sowieso keine Ahnung haben=20
k=F6nnen/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=DF
Frank B.




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

Report this message

#14: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-21 19:00:08 by 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=FCrlich ganz und gar ungepr=FCft verwendet. Urrr...

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

Gru=DF
Frank B.

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

Report this message

#15: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-21 19:06:18 by 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=E4ge wie

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


Die aber auch =E4hnlich wie Magic-Quotes ihre Grenzen haben.

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

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

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

=20
tschuess
[|8:)

Report this message

#16: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-21 19:41:50 by Niels Braczek

Johannes Mueller schrieb:

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

Nicht mal die Vokabeln stimmen: Der begriff hei=DFt auf Deutsch nicht
"quotieren" (das w=E4re "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 =
|
------------------------------------------------------------ ------

Report this message

#17: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-21 19:41:51 by Rainer Hinz

Gregor Kofler wrote:

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

> erschlagen (das K=FCrzen der Maximall=E4nge kann man immer noch beim=20
> unmittelbaren Schreibvorgang machen - wenn =FCberhaupt).

Ja, das kann man tun. Nur wenn der regul=E4re Ausdruck fehlschl=E4gt,=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

<item type=3D"text" size=3D"10" maxlength=3D"30" regexp=3D"#^\d*$#"=20
empty=3D"false" value=3D"" format=3D""></item>

Die maximale L=E4nge ergibt sich direkt aus dem Attribut maxlength, wie=20
man es beim Input kennt. Da muss ich nicht noch im regul=E4ren Ausdruck=20
rumfrickeln. Und was wichtiger ist, ich habe eine detailierte=20
Fehlermeldung, welche mir ein regul=E4rer Ausdruck nicht bringt. Ich kann=
=20
nunmal dem Anwender nicht als Fehlermeldung pr=E4sentieren:
"Der regul=E4re Ausdruck f=FCr 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=E4re sowas mit einem einzigen regul=E4ren Ausdruck zu erschlagen, s=
o=20
dass ich als Programmierer eine Entscheidung f=E4llen kann?

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

Wo auch sonst noch, wenn nicht dort.

Gru=DF
Frank B.

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

Report this message

#18: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-21 19:43:34 by Rainer Hinz

Hadanite Marasek wrote:
>=20
> Nur der Vollst=E4ndigkeit 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=DF
Frank B.

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

Report this message

#19: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-21 19:58:25 by Rainer Hinz

Hadanite Marasek wrote:

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

Kurze Fragen:
- Typpr=FCfung, warum? Welcher Anwendungsfall k=F6nnte sowas gebrauchen?
- Was ist eine Pr=FCfung gegen Callback?

> K=FCrzen vor dem Speichern halte ich f=FCr 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 =FCbernehmen? K=F6nnte ja auch der=20
Versuch sein, irgendwas zu versuchen.

> Ung=FCltige 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=DF
Frank B.

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

Report this message

#20: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-21 20:03:44 by 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

Report this message

#21: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-21 20:10:24 by 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

Report this message

#22: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-21 20:31:03 by 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

Report this message

#23: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-21 21:19:43 by Rainer Hinz

Hadanite Marasek wrote:
>> - Was ist eine Pr=FCfung gegen Callback?
>=20
> Ich kann eine Callback-Funktion definieren, die den Pr=FCfling 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 =FCbernehmen? K=F6nnte ja auch der Vers=
uch
>> sein, irgendwas zu versuchen.
>=20
> Weil der Client dann gerne per Telefon bei mir aufschl=E4gt 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=E4nge f=FCr Nachnamen (z.B. 50 Zeichen).=20
Irgendwo wird halt gek=FCrzt.

>> 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=DF
Frank B.



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

Report this message

#24: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-21 21:37:14 by 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
<http://www.w3.org/TR/xmlschema-2/>, 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)

Report this message

#25: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-21 22:35:49 by 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

Report this message

#26: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-21 22:53:43 by Rainer Hinz

Hadanite Marasek wrote:

> Ich hab was sch=F6neres:

=C4hem... tu mir bitte einen Gefallen und erkl=E4re mir mal, ob ich das=20
auch sch=F6n finden k=F6nnte. Ich verstehe nicht, was das darstellen soll=
=2E

Danke und Gru=DF

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

Report this message

#27: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-21 23:59:02 by 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.

Report this message

#28: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-22 02:09:52 by 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

Report this message

#29: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-22 10:32:58 by 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
>
> <item type="text" size="10" maxlength="30" regexp="#^\d*$#"
> empty="false" value="" format=""></item>
>
> 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

Report this message

#30: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-22 14:05:57 by 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).

>>> <item type="text" size="10" maxlength="30" regexp="#^\d*$#"
>>> empty="false" value="" format=""></item>

[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

Report this message

#31: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-22 14:10:07 by 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/

Report this message

#32: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-22 14:13:30 by Christoph Herrmann

Frank Burmeister schrieb:
> Und was ist einfacher zu konfigurieren? Gerade letzteres finde ich
> bequemer, wenn ich ein Formularfeld wie folgt konfiguriere
>
> <item type="text" size="10" maxlength="30" regexp="#^\d*$#"
> empty="false" value="" format=""></item>

Das ist sicherlich kein gültiges HTML oder?

--
Mit freundlichen Grüßen,
Christoph Herrmann

http://dragonprojects.de/

Report this message

#33: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-22 14:43:18 by 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
>>
>> <item type="text" size="10" maxlength="30" regexp="#^\d*$#"
>> empty="false" value="" format=""></item>
>
> 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

Report this message

#34: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-22 14:47:01 by 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=FCllt oder falsches Format mit einem regul=E4ren=20
Ausdruck zu erschlagen und entsprechend eine Meldung herauszubringen,=20
ist schwerer, als eine Pr=FCfung mit empty() und danach noch einmal mit=20
einem regul=E4ren Ausdruck. Deshalb ist nur ein regul=E4rer Ausdruck unpa=
ssend.

>> Und was ist einfacher zu konfigurieren? Gerade letzteres finde ich=20
>> bequemer, wenn ich ein Formularfeld wie folgt konfiguriere
>>
>> <item type=3D"text" size=3D"10" maxlength=3D"30" regexp=3D"#^\d*$#"=20
>> empty=3D"false" value=3D"" format=3D""></item>
>>
>> Die maximale L=E4nge ergibt sich direkt aus dem Attribut maxlength, wi=
e=20
>> man es beim Input kennt. Da muss ich nicht noch im regul=E4ren Ausdruc=
k=20
>> rumfrickeln.
>=20
> Maxlength k=F6nnte man ja problemlos am Client umgehen. Aber mache ich =
f=FCr=20
> den "normalen" Anwender nat=FCrlich 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 <input type=3D"text"...>)=20
mit den entsprechenden Parametern und pr=FCft bei der =DCbernahme vom=20
Client die Eingabe mit eben diesen.
Nun liegt das auf der Hand, dass ich maxlength nat=FCrlich in den=20
regul=E4ren 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=E4ren 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=FCmmern, da meine=20
Formulareingaben automatisch immer der kompletten Pr=FCfung unterliegen, =

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

Gru=DF
Frank B.
--=20
"Unterwerfung ist die einzige bequeme Antwort auf Autorit=E4t"

Report this message

#35: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-22 15:07:17 by 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/

Report this message

#36: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-22 15:08:17 by 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

Report this message

#37: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-22 15:12:40 by 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

Report this message

#38: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-22 15:56:47 by 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=FCllen
> Name* _____
>=20
> und bei Nichteingabe ein rot unterlegtes "Name*" hat (hoffentlich) noch=
=20
> jeder verstanden.=20

Bestimmt, sonst kriegst du ja keinerlei Eingabe.

>>>> <item type=3D"text" size=3D"10" maxlength=3D"30" regexp=3D"#^\d*$#" =

>>>> empty=3D"false" value=3D"" format=3D""></item>
>=20
> [Erl=E4uterungen dazu]
>=20
> Wie realisierst du bei deiner L=F6sung Abh=E4ngigkeiten von Formularfel=
dern,=20
> etwa dass eines gef=FCllt sein muss, wenn ein anderes einen entsprechen=
den=20
> Wert aufweisst, oder sich die RegEx =E4ndern muss (etwa bei Postleitzah=
len=20
> in Abh=E4ngigkeit vom Land)?

Abh=E4ngigkeiten 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=F6sung.

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

XML definiere, die M=F6glichkeit, bei der =DCbernahme 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=F6chte 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=F6rkeleien, reicht ein
$formulardata=3D$form->pcheckall();

Und wenn ich nur diese Zeile nutzen m=F6chte 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=FCbersichtlich sein kann, je nach Formulargr=F6=
=DFe.

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

Gru=DF
Frank B.

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

Report this message

#39: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-22 16:01:09 by Rainer Hinz

Christoph Herrmann wrote:

>> <item type=3D"text" size=3D"10" maxlength=3D"30" regexp=3D"#^\d*$#"=20
>> empty=3D"false" value=3D"" format=3D""></item>
>=20
> Das ist sicherlich kein g=FCltiges HTML oder?
>=20

Nein, aber ein Auszug aus einer g=FCltigen 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=E4nge zu =FCberpr=FCfen 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. =DCbergabeparameter=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=E4chtige Klasse, die ich schon seit l=E4ngerem Nut=
ze=20
und nichts vergleichbar (gutes) im Netzwerk bisher gefunden habe (Meine=20
Meinung).

Gru=DF
Frank B.


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

Report this message

#40: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-22 16:03:40 by 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 "<br/> Es traten Fehler auf...";
> while($msg=$xmlform->fetchreportmsg()){echo "<br/> $msg";} // E
> break;
> } else {
> echo "<br/> 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

Report this message

#41: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-22 16:43:34 by Rainer Hinz

Gregor Kofler wrote:
> Frank Burmeister meinte:

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

Kannst du mir denn mal wirklich ein Problemfall schildern, wo ich jetzt=20
zum Entwickler meiner L=F6sung (ich lasse gerne arbeiten!) sagen k=F6nnte=
:=20
"Hey, ich h=E4tte da ein Idee f=FCr eine Weiterentwicklung?"

> Meine L=F6sung schaut =FCbrigens nicht un=E4hnlich aus, allerdings sind=
die=20
> Templates nach einem smarty-=E4hnlichem Schema aufgebaut, und Regeln=20
> werden (je nach Bedarf) mit einer addRule(RegEx)-Methode hinzugef=FCgt.=
=20
> Fehler k=F6nnen auch explizit noch mit einem setError(blockID_des_fehle=
rs)=20
> gesetzt werden (f=FCr =DCberpr=FCfungen, die ich mit RegExen nicht erle=
digen=20
> kann).

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

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

"notwendigsten" Fall f=FCr ein Formular beliebiger Größe, gerade mal =
5=20
Zeilen(A-E) PHP-Code verwendet werden m=FCssen. Der Rest ist=20
organisatorisches Normalbeiwerk.
Ein simples Beispiel, ohne Abh=E4ngigkeiten oder dynamischen=20
Format=E4nderungen 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 "<br/> Es traten Fehler auf...";
while($msg=3D$xmlform->fetchreportmsg()){echo "<br/> $msg";} // E
break;
} else {
echo "<br/> 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=DF
Frank B.


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

Report this message

#42: Re: Magic Quotes in PHP6 verschwunden?

Posted on 2007-12-22 20:48:56 by Rainer Hinz

Gregor Kofler wrote:

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

> deiner L=F6sung klappt.

Listenformulare mache ich in der Regel "per Hand". Ben=F6tige ich=20
grunds=E4tzlich 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=DFen. So ist in der Regel das action Feldes des Formulares in der=20
Regel ungef=E4hr so besetzt: action=3D"index.php?step=3Dcheckform"

Nat=FCrlich 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=FCtzt. Die 2%, die fehlen, sind f=FCr 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=F6sung ist es der obigen L=F6sung egal, wie viele Elemente nun vorhande=
n=20
sind. Das macht den Code ungemein =FCbersichtlicher und k=FCrzer.
Die XML-Datei mit den Formularen ist manchmal recht gro=DF, jedoch habe=20
ich auch Mammutformulare =FCber 3 bis 10 Registerlaschen, die es zu=20
behandeln gilt. Auch da entt=E4uscht mich meine Formularklasse nicht.
Und das tollste ist es, dass ich die Formulare in jeden Doctype=20
integrieren kann, ohne eine =C4nderung vorzunehmen.

Gru=DF
Frank B.
--=20
"Unterwerfung ist die einzige bequeme Antwort auf Autorit=E4t"

Report this message