OnlyIntegersFilter gibt 0 zurück

Das Forum soll der Ablage von Lösungen für immer wieder auftauchende Problemstellungen dienen. // This forum contains solutions to problems that frequently occur.
Antworten
Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

OnlyIntegersFilter gibt 0 zurück

Beitrag von dave » 22.09.2011, 12:40:31

Bei meinen Spielereien heute mit der neuen isFilled()-Methode ist mir etwas anderes aufgefallen:

Wenn ich ein leeres Formularfeld absende und dies über durch OnlyIntegersFilter jage, wird eine 0 (Integer Null) zurück gegeben. Aber diese habe ich dort ja gar nicht reingeschrieben. Laut der PHP-Doku zu intval ist dieses Verhalten auch völlig richtig. Wir müssten also vorher noch prüfen, ob wirklich was eingetragen wurde und dann die Prozedur fortsetzen:

Folgende Anpassung schlage ich vor:
Vorher:

Code: Alles auswählen

class OnlyIntegersFilter extends AbstractFormFilter {
    public function filter($input) {
        return intval(preg_replace($this->getFilterExpression('/[^0-9]/i'), '', $input));
    }
} 
Nachher:

Code: Alles auswählen

class OnlyIntegersFilter extends AbstractFormFilter {
    public function filter($input) {
        if($input == null) {
            return null;
        }else{
            return intval(preg_replace($this->getFilterExpression('/[^0-9]/i'), '', $input));
        }
    }

} 
Nun steht nicht zufällig einfach eine 0 im Formularfeld.

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: OnlyIntegersFilter gibt 0 zurück

Beitrag von Megger » 22.09.2011, 12:53:38

Aber der Filter ist doch dafür da, dass man nur Zahlen bekommt und gar nichts ist für mich keine Zahl! Meiner Meinung nach verhält sich der Filter in dieser Hinsicht korrekt, bei einem Validator wäre das etwas anderes, aber so sehe ich kein Problem
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: OnlyIntegersFilter gibt 0 zurück

Beitrag von dave » 22.09.2011, 13:31:20

Ok, kurz zur Erklärung des "Problems".

Ich fülle ein Formular aus und lasse dieses Feld einfach leer, weil es mich nicht interessiert. Falls doch mal eingegeben wird, nutze ich vorsichtshalber den OnlyIntegersFilter darauf. So kann nichts schief gehen.
Jedoch mache ich an einer anderen Stelle einen Fehler und muss diesen Fehler in einem anderen Feld beheben. Nun wird das Formular neu geladen und das fehlerhafte Feld weird mir farblich markiert. Nebenbei fällt mir aber auf, dass in diesem optionalem Feld plötzlich eine 0 drin steht, die ich aber gar nicht eingegeben habe.

Ist hier vielleicht doch meine Denkweise falsch? Aber einen Validator wende ich nicht an, da es optional ist und einen Bonus darstellt. Ich habe dies auch bei mir nicht konkret als Fall, das ist mir nur bei meinem Gebastel zwischendrin aufgefallen und ich habe mich gewundert.

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: OnlyIntegersFilter gibt 0 zurück

Beitrag von Megger » 22.09.2011, 13:43:09

Ich sehe es so, wenn du den Filter anwendest, dann willst du in dem Feld auch nur Zahlen stehen haben, wenn du das Feld allerdings leer abschickst, dann ist das nunmal keine Zahl und das korrigiert der Filter einfach, was ja auch Sinn und Zweck seiner Existenz ist.
Nach Anwendung dieses Filters kannst du dir nämlich sicher sein, dass das entsprechende Feld auch nur Zahlen besitzt und musst nicht erst per isset, empty oder was auch immer prüfen.
Aber einen Validator wende ich nicht an, da es optional ist und einen Bonus darstellt.
Dafür gibt es das 'optional' Attribute, dann wird das Feld nur validiert, wenn etwas eingetragen wurde. Ob das Attribute auch bei Filtern wirkt weiß ich aber momentan nicht
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: OnlyIntegersFilter gibt 0 zurück

Beitrag von dave » 22.09.2011, 14:05:10

Also vom Prinzip her hast du Recht, kein Text ist keine Zahl und somit ist 0 logische Konsequenz.

Einen optionalen Parameter anzuhängen bewirkt keine Änderung, also scheint das nur für Validatoren zu gelten. Eventuell wäre hier ja ebenso eine Anpassung mit einem optionalem Parameter sinnvoll. Aber wie gesagt, eine konkrete Anwendung dafür habe ich nicht. Wir können ja gerne weiter darüber diskutieren.

Ich finde trotzdem die Vorgehensweise, dass aus "nichts" einfach eine 0 gemacht wird, "krass" ;) Hier können sich mal wieder die Geister scheiden ... :roll:

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: OnlyIntegersFilter gibt 0 zurück

Beitrag von Megger » 22.09.2011, 14:10:27

Dafür sind die Filter da, sie verändern die übergebenen Daten!
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: OnlyIntegersFilter gibt 0 zurück

Beitrag von dave » 22.09.2011, 14:26:27

Klar, aber wenn ich "nichts" übergebe muss auch nichts verändert werden :lol:

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: OnlyIntegersFilter gibt 0 zurück

Beitrag von Megger » 22.09.2011, 14:50:38

Doch finde ich schon
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: OnlyIntegersFilter gibt 0 zurück

Beitrag von Screeze » 22.09.2011, 14:51:51

Jein.
Theoretisch kannst du den Input so wie er ist in die Datenbank schreiben, der Filter validiert ja bereits dass es eine Zahl ist und in ein integer Feld geschrieben werden kann.
Oder du kannst die Zahl zu einer Berechnung hernehmen. Wenn du eine leere Eingabe durchlässt, dann musst du die Zahl doch wieder validieren/umwandeln, dann brauchst du den filter gar nicht erst reinsetzen, musst du ja eh nochmal anwenden manuell.

Aber ich verstehe beide Seiten, es gibt schlichtweg mehre Anwendungsfälle die sich so einfach nicht unter einen Hut bringen lassen. Auch das optional Attribut würde ich hier nicht hernehmen.

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: OnlyIntegersFilter gibt 0 zurück

Beitrag von dave » 22.09.2011, 15:00:07

Ok, wir belassen es einfach so, wie es ist.

Wie gesagt, das ist mir nur aufgefallen, benötigen tue ich es so nicht bzw. habe ich keinen Fall, andem es Probleme verursacht. Nur vllt. stolpert ja irgendwann mal jemand darüber. Aber dann kann ja hier nochmal diskutiert werden. Im Moment ist das nicht weiter notwendig, die Energie kann ruhig für andere sachen eingesetzt werden 8-)

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: OnlyIntegersFilter gibt 0 zurück

Beitrag von dr.e. » 22.09.2011, 21:50:24

Tobi's Ausführungen treffen exakt den Kern und die Idee der Filter. Wenn Du, dave, keine Manipulation möchtest, darf der Filter nicht angeheftet werden. Die Frage nach dem "warum" ist aber absolut gerechtfertigt. Ich verschiebe den Thread daher in FAQ.
Viele Grüße,
Christian

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast