cApiClientCollection: WHERE mit Leerzeichen

Gesperrt
tono
Beiträge: 574
Registriert: Mo 25. Apr 2005, 20:51
Wohnort: Frankfurt am Main
Kontaktdaten:

cApiClientCollection: WHERE mit Leerzeichen

Beitrag von tono »

Ich habe ein Problem mit cApiClientCollection: Wenn ich versuche über

Code: Alles auswählen

$clientCollection->setWhere("name","Clientname mit Leerzeichen");
$clientCollection->query();
ein cApiClient-Objekt zu bekommen schlägt dies fehl.
Durch urlencode in den InFiltern von cApiClient wird aus den Leerzeichen im Mandantennamen ein '+'. Diesen Ausdruck kann MySQL natürlich nicht finden, weil die Namen in der Tabelle con_Clients nicht urlencoded abgelegt sind.

Ich weiß jetzt nicht weiter:
- Ist das ein Bug, wenn nein wie kann ich ihn umgehen?
- $_arrInFilters vor dem Query ändern? Wenn ja mit welcher Anweisung?

Code: Alles auswählen

$capiclientcollection->_itemClassInstance->setFilters(array('htmlspecialchars', 'addslashes'),array('stripslashes','htmldecode'));
oder

Code: Alles auswählen

$capiclientcollection->_driver->_oItemClassInstance->setFilters(array('htmlspecialchars', 'addslashes'),array('stripslashes','htmldecode'));
oder beides?
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Ich bin mir nicht sicher, ob es nicht eine bessere Idee wäre, die Speicherung in contenido/includes/include.client_edit.php zu überarbeiten.

Das dürfte dann zwar auf einige Stellen Einfluss haben, vielleicht hält sich das aber auch in Grenzen (und bringt Contenido weiter... :wink: ).

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
tono
Beiträge: 574
Registriert: Mo 25. Apr 2005, 20:51
Wohnort: Frankfurt am Main
Kontaktdaten:

Beitrag von tono »

Meinst Du also die Speicherung der Werte sollte urlcodiert sein (bzw. werden)? Dann bräuchte man ja auch fürs setup eine update-Routine, die die DB konvertiert.

Vielleicht tritt so ein Fehler noch bei anderen tabellen auf, das müsste man mal prüfen.

Dann noch zum Abschlus die Frage, obs Contenido nicht noch weiter bringen würde, wenn man gleich alles in utf8 ablegen würde.

P.S. Wenn sich jemals jemand unter dem nic "man" im Forum anmeldet hat der einen Haufen zu tun. :wink:
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

tono hat geschrieben:Meinst Du also die Speicherung der Werte sollte urlcodiert sein (bzw. werden)? Dann bräuchte man ja auch fürs setup eine update-Routine, die die DB konvertiert.
Ja u.a., aber das wäre nur für den Mandanten schnell gemacht.
Vielleicht tritt so ein Fehler noch bei anderen tabellen auf, das müsste man mal prüfen.
a) Lass' Dich nicht aufhalten, dass zu prüfen.
b) Es wird nicht so häufig vorkommen - nur die Bereiche, die noch nicht aktualisiert wurden.
Dann noch zum Abschlus die Frage, obs Contenido nicht noch weiter bringen würde, wenn man gleich alles in utf8 ablegen würde.
Ja, nein, vielleicht. Sagen wir mal, es ist ein sehr komplexes Thema (z.B. können noch immer nicht alle PHP-Funktionen mit utf8 umgehen [PHP4...+] und bei mySQL gibt es lustige Effekte) und mein Bemühen liegt im Moment darin, diesen ganzen Urschleim aus dem System zu kriegen (es gibt wirklich noch ganz, ganz gruselige Konstrukte).

Wenn man z.B. alles auf die genericdb umgestellt und diese so optimiert hat, dass sie 90% der Anforderungen abbilden kann, wäre das klasse (ohne jetzt mal das genericdb-System grundsätzlich in Frage stellen zu wollen).

Aber wenn sich da jemand mit auseinandersetzt, warum nicht. Ist eine Heidenarbeit...
P.S. Wenn sich jemals jemand unter dem nic "man" im Forum anmeldet hat der einen Haufen zu tun. :wink:
?

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
tono
Beiträge: 574
Registriert: Mo 25. Apr 2005, 20:51
Wohnort: Frankfurt am Main
Kontaktdaten:

Beitrag von tono »

Ok, ich hab mir das jetzt mal angesehen und folgendes festgestellt:

Der gleiche Fehler liegt auch bei den Klassen cApiClientLanguage und cApiLanguage auf. Ich bin jetzt auch überzeugt davon, dass es sich um einen Fehler in der Klasse handelt, und dass es nicht geplant ist die Werte urlencoded abzulegen.

Alle cApi-Klassen rufen im Construktor die Funktion $this->setFilters() auf, um die Ein- und Ausgabefilter festzulegen. Sie legen entweder nichts oder addslashes/stripslashes fest. 5 Klassen tun das nicht:
cApiClient, cApiClientLanguage, cApiLanguage, cApiModuleHistory, cApiModuleTranslation. Deshalb werden bei diesen Klassen die in Item definierten Standardwerte verwendet:
array ('urlencode', 'htmlspecialchars', 'addslashes') für Input
array ('stripslashes', 'htmldecode', 'urldecode') für Output.

Bei cApiModuleHistory, cApiModuleTranslation ist das kein Problem, da der Zugriff scheinbar nur über die cApi erfolgt funktioniert alles.

Bei cApiClientLanguage ist das nur eine unschönheit, da die Tabelle nur numerische Spalten enthält.

Bleiben cApiClient und cApiLanguage bei denen Handlungsbedraf besteht.

Ich meine man sollte in class.client.php in cApiClient::cApiClient die Zeile

Code: Alles auswählen

$this->setFilters(array(), array());
einfügen.

Analog bei cApiClientLanguage und cApiLanguage.

Bei cApiModuleHistory, cApiModuleTranslation sollte

Code: Alles auswählen

$this->setFilters(array ('urlencode', 'htmlspecialchars', 'addslashes'), array ('stripslashes', 'htmldecode', 'urldecode'));
eingefügt werden. Dann ist es klar und sofort erkennbar.
tono
Beiträge: 574
Registriert: Mo 25. Apr 2005, 20:51
Wohnort: Frankfurt am Main
Kontaktdaten:

Beitrag von tono »

Ich hab extra ne schicke Tabelle gemacht, und jetzt vergessen die anzuhängen:

Code: Alles auswählen

Klasse                          Tabelle                                In-Filter              Out-Filter
cApiAction                      $cfg['tab']['actions']                 array("addslashes")    array("stripslashes")
cApiArea                        $cfg['tab']['area']                    array("addslashes")    array("stripslashes")
cApiArticle                     $cfg["tab"]["art"]                     array()                array()
cApiArticleLanguage             $cfg["tab"]["art_lang"]                array()                array()
cApiCategory                    $cfg["tab"]["cat"]                     array()                array()
cApiCategoryArticle             $cfg["tab"]["cat_art"]                 array()                array()
cApiCategoryLanguage            $cfg["tab"]["cat_lang"]                array()                array()
cApiClient                      $cfg['tab']['clients']                
cApiClientLanguage              $cfg["tab"]["clients_lang"]                
cApiContainer                   $cfg["tab"]["container"]               array()                array()
cApiContainerConfiguration      $cfg["tab"]["container_conf"]          array()                array()
cApiFile                                                               array("addslashes")    array("stripslashes")
cApiFrameFile                                                          array("addslashes")    array("stripslashes")
cApiLanguage                    $cfg["tab"]["lang"]                
cApiLayout                      $cfg["tab"]["lay"]                     array()                array()
cApiModule                      $cfg["tab"]["mod"]                     array()                array()
cApiModuleHistory               $cfg["tab"]["mod_history"]                
cApiModuleTranslation           $cfg["tab"]["mod_translations"]                
cApiTemplate                    $cfg["tab"]["tpl"]                     array()                array()
cApiTemplateConfiguration       $cfg["tab"]["tpl_conf"]                array()                array()
cApiTree                        $cfg["tab"]["cat_tree"]                array()                array()
cApiUser                        $cfg["tab"]["phplib_auth_user_md5"]    array()                array()

emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

verschoben...
*** make your own tools (wishlist :: thx)
Gesperrt