Suchen und ersetzen von URL-kodierten Sonderzeichen in MySQL-Datenbankfeldern
- Details
Problembeschreibung
Es kann schon mal durch unsaubere Scripte passieren, dass über GET-Requests in die Datenbank Formularinhalte in Felder eingetragen werden, bei denen die Sonderzeichen url-encodiert sind. So stünde dann dort statt des Leerzeichens %20.
Wenn man seine Tabelleninhalte nun von diesen Dingen befreiten möchte, z.B. per MySQL-Update-Anweisung, dann tritt ein Problem auf: Man will nach %20 suchen. Das geht aber nicht so einfach weil das %-Zeichen in MySQL als Wildcard verwendet wird. Man muss es also escapen. Die übliche Escape-Syntax wie z.B. in PHP durch "\" geht nicht.
Lösung
Das gute an der Lösung ist, man kann jedes beliebige Zeichen in MySQL als Escape-Zeichen definieren - mit dem Parameter ESCAPE.
Ein kompletter Query kann dann z.B. so aussehen:
Weiterlesen: Suchen und ersetzen von URL-kodierten Sonderzeichen in MySQL-Datenbankfeldern
Android USB-PC-Verbindung funktioniert nicht (MTP-Treiber)
Problembeschreibung MTP-USB-Geräte Verbindung nicht möglich
english version of the article
Sie wollen Daten austauschen/synchronisieren zwischen Ihrem Windows-PC und Ihrem Smartphone mit Android und müssen feststellen, dass der Verbindungsaufbau nicht möglich ist, weil der USB-Treiber offensichtlich nicht korrekt installiert wird.
Prinzipiell ist es schon so, Smartphone per USB an den Rechner anschließen und es werden sofort, wenn noch nicht erfolgt, die Gerätetreiber geladen und die Massenspeicher des Smartphones auf dem Rechner geladen, bzw. als Massenspeicher bereitgestellt.
Auf meinem Samsung Galaxy Note GT-N7100 hatte ich konkret den Fall, dass ich bereits mehrfach das Gerät erfolgreich am Rechner anschließen konnte und plötzlich von Heute auf Morgen dies nicht mehr funktionierte. In Foren gab es diverse Hinweise, wie Treiber neu installieren, Kabel tauschen und USB-Buchse reinigen, Handy komplett ausschalten und nach 3 Minuten wieder booten, den USB-Debugmodus aktivieren etc. Keiner dieser Tipps half.
Weiterlesen: Android USB-PC-Verbindung funktioniert nicht (MTP-Treiber)
Korrekte numerische Sortierung von Datensätzen aus komplexen String-Feldern
- Details
Problembeschreibung/Zielstellung
Mitunter kommt es vor, dass man in einer MySQL-Tabelle varchar()-Datenfelder hat in denen Informationen stehen an die man herankommen möchte, z.B. um gezielt eine korrekte numerische Sortierung zu erreichen.
So können z.B. in Artikelnummern oder Matchcodes an irgend einer Stelle eine Information zu einem Produktdurchmesse kodiert sein. Nehme wir mal als Beispiel ein DIN-Normteil. Eine Artikelnummer oder ein Matchcode könnte z.B. so aussehen: DIN9861 0,5 71 D-HSS. An zweiter Stelle sehen wir hier unseren Durchmesser, an 3. Stelle eine Längenangabe.
Das Problem stellt sich jetzt in zwei Stufen da: Zum einen müssen wir die Stellen separieren an denen unsere Dimensionsagaben stehen, dann müssen diese von einem String in einen numerischen Wert umgewandelt werden, damit die darauf basierende Sortierung korrekt numerisch und eben nicht alphanumerisch erfolgt.
Weiterlesen: Korrekte numerische Sortierung von Datensätzen aus komplexen String-Feldern
Spamschutz mit BreezingForms unter Joomla 2.5 ... 3.x
- Details
Zielsetzung
Mit BreezingForms im EasyMode/QuickMode erstellte Formulare (z.B. Kontaktformular) lassen sich mit wenigen einfachen Mitteln gegen Spambots halbwegs schützen. Der Schutz ist nicht hundertprozentig, aber doch immerhin so gut, dass man gut 95% Spam abblockt. Wie viele andere vertrete auch ich die Auffassung, dass das Prinzip der alten einfachen Captcha-Grafiken nicht zuverlässig genug ist, um dafür in Kauf zu nehmen die User mit den komplizierten Gekritzel der Grafiken zu belästigen. Leider gilt durch mittlerweile KI-unterstützte Allgorithmen auch die reCAPTCHA-Grafik von Google nicht mehr als zuverlässig. Weiterhin hat die reCAPTCHA-Technik von Google einen großen Nachteil: Sie steht im Konflikt mit der europäischen Datenschutzgrundverordnung. Der Grund ist einfach folgender. Schon beim Aufruf einer Seite mit einem Formular in dem dieser Spamschutz integriert ist, wird die Grafik und diverse Scripte von Google-Server geladen. So eine extern geladene Ressource hat immer den Effekt, dass beim Laden von diesen Fremdservern an diesen die aktuelle IP-Adresse des Seitennutzer übermittelt werden muss. Da das im Falle des Google-Servers i.d.R. auf amerikanischen Servern passiert, ist hier immer die Frage nicht hundertprozentig beanwortet, was mit diese personenbezogenen Daten in Fragen Speicherung und Analyse passiert - trotz aller Zusicherung von Google.
Es gibt auch weitere gute Technologie wie HoneyPot und Akismet. Leider sind diese immer mit einem Account verbunden und auch hierbei werden Daten zu externen Server übertragen - und dazu mal eben die kompletten Formularinhalte. Vorteil: zumindest werden die Daten erst beim Absenden des Formulars zwecks Prüfung versendet, so dass man vorher eine Chance hatte den Nutzer DSGVO-konform darüber aufzuklären. Aber bei gewerblichen genutzten Websites sind die genannten Accounts auch kostenpflichtig.
Deshalb greife ich in der Umsetzung auf die Kombination von 2 Schutzmechanismen zurück, die sich bewehrt haben.
Diese Anleitung basiert auf den Einsatz von Joomla 1.5.26 bis 3.8.10 und BreezingForms 1.9 im EasyMode oder QuickMode, kann aber sicher auch auf spätere Versionen adäquat angewendet werden.
Als Schutzmethoden kommen kombiniert zum Einsatz:
- der Zeitfensterschutz
- eine einfache Honey-Pot-Lösung
- und ein Bad-Words-Check
Weiterlesen: Spamschutz mit BreezingForms unter Joomla 2.5... 3.x
Reihenfolge in der Joomla Scripte im Header lädt beeinflussen
- Details
Problembeschreibung
Wer selbst Joomla-Erweiterungen programmiert, wird immer mal wieder auch Scripte (css, oder JavaScript) in den Header laden wollen. Das erfolgt üblich über folgende Scriptzeilen:
$document = JFactory::getDocument();
$document->addScript($this->baseurl . "/components/com_meineerweiterung/assets/js/meinscript.js");
Da hierbei auch häufig ein Overriding von aufeinander aufbauenen Scripten stattfindet ist die Reihenfolge in der die Scripte geladen werden entscheidend. Werden Scripte in der Reihenfolge falsch geladen, stellt sich nicht das erwartete Ergebnis ein, oder es kommt zu Konflikten. Ein typisches Beispiel für derartige Konflikte resultieren immer mal wieder aus der Reihenfolge in der Mootools und jQuery-Bibliotheken geladen werden.
Nun hat man manchmal den Eindruck gar nicht nachvollziehen zu können, in welcher Reihenfolge die Script überhaupt von Joomla geladen werden. Ich hatte schon Situationen erlebt, wo nach einem Update einer Komponente im Vergleich zur Vorversion plötzlich Scripte in andere Reihenfolge geladen wurden. Durch Joomla wird die Reihenfolge des Aufrufs im Header in der Weise festgelegt, wie die Erweiterungen, die diese Scripte laden abgearbeitet werden. Auch das kann in jedem Projekt anders sein. Hier sollte man also zur Sicherheit nichts dem Selbstlauf überlassen.
Weiterlesen: Reihenfolge in der Joomla Scripte im Header lädt beeinflussen
Virtuemart 2: Verfügbarkeit von Produkten anzeigen/verwalten
- Details
Zu diesem Sachverhalt hier ein paar gesammelte Erkenntnisse
Hierbei geht es darum den Kunden anzuzeigen, wie schnell ein Produkt gelieferte werden kann. Das hängt üblicherweise vom Bestand ab und wird prinzipiell unterschieden in Produkte die lagerhaltig sind, also sofort verfügbar, und solchen die wenn der Bestand null ist, erst geordert und dann geliefert werden können. Die Lieferzeit im zweiten Fall ist dann i.d.R. abhängig vom liefernden Hersteller. Detailierte Informationen dazu weiter unten.
Weiterlesen: Virtuemart 2: Verfügbarkeit von Produkten anzeigen/verwalten
Akeeba Backup per Cronjob starten
- Details
Problembeschreibung
Wer mit Akeebe-Backup für Joomla arbeitet, wird sicher auch seine Backuperstellung automatisiert nach Zeitplan starten wollen. Hierzu muss das Backup durch ein Ereignis getriggert werden.
Der übliche Weg das Backup zu starten ist es ein Cronjob zu konfigurieren. Leider ist das nicht auf jedem virtuellem Server möglich, abhängig vom Hostingpaket welches man bei seinem Hostingprovider gebucht hat. In früheren Versionen von Akeeba-Backup und JoomlaPack gab es deshalb als Alternative ein Plugin Akeeba Backup Lazy Scheduling. Dieses Plugin war ein Quasi-Ersatz für die besseren Cronjobs und funktioniert in der Form, dass das Plugin immer auch aufgerufen wird, wenn ein User irgendeine Seite des Projektes aufrief und prüfte dann ein konfiguriertes Zeitfenster und die eingestellte Häufigkeit ab, um dann ggf. das Backup zu start. Man kann sich vorstellen, dass man durch diesen Test permanent eine kleine Grundlast mitschleift.
In den neueren Versionen ist das Plugin nicht mehr verfügbar, oder nur noch als Dummi-Plugin um anzuzeigen, dass es nicht mehr genutzt werden kann.
Aber das Einrichten eines Cronjobs ist trotzdem etwas schwierig, vorausgesetzt der Hostingprovider lässt es überhaupt zu. Denn hier müssen die Rechte berücksichtigt werden und auch die Art- und Weise wie Php auf dem Server ausgeführt wird.
Tipps im Zus.hg. mit LESS im Gantry-Template für Joomla
- Details
Wichtig Links zur Gantry-Dokumentation
LESS CSS | Auf dieser Seite steht beschrieben, wie LESS prinzipiell funktioniert, das Compilen, diverse konzeptionelle und syntaktische Prinzipien, wie die Einbindung im Gantry-Template erfolgt usw. |
Adding a Custom Stylesheet | Auch dieser Text beschreibt wie mit Custom-Style die Gantry-Styles überschrieben werden können. Interessant ist hier die Verwendung von Browser-Weichen |
Einbinden einer eigenen CSS-Datei ins Template - ohne LESS
Um eine eigene CSS-Datei im Gantry-Template einzubinden, muss lediglich im Gantry-Template-Verzeichnis und hier im Unterverzeichnis ~/css/ eine Scriptdatei mit dem Name gantry-custom.css abgelegt werden. Der Dateiname ergibt sich aus dem Namen für das Template also gantry plus dem Zusatz custom. Diese Variante erzeugt eine CSS-Datei, die dann so unkomprimiert zusätzlich ins Template geladen wird.
Weiterlesen: Tipps im Zus.hg. mit LESS im Gantry-Template für Joomla
LESS-CSS ohne Compilierung nutzen, während der Entwicklung
- Details
LESS-CSS ohne Compilierung nutzen
Less wurde entwickelt um das Konstrukt von CSS-Scripten schlank und übersichtlich zu halten und durch die Verwendung komprimierter CSS-Dateien die Performance von Projekten zu steigern. Zu diesem Ziel werden die LESS-Dateien kompiliert und gecacht. Während der Entwicklung ist das allerdings mitunter etwas schwierig. Wer im Browser dann seine CSS-Eigenschaften versucht zu analysieren (z.B. per Chrome-Webdeveloper oder FireBug) erhält rückwärts wenig verwertbare Informationen. Die Fehlersuche gestaltet sich dann mitunter etwas schwierig. Für diesen Fall ist es sinnvoll die LESS-Dateien wie bisher wie CSS-Scripte verwenden zu können, unkomprimiert.
Das wiederum ist nicht so einfach, weil die Browser LESS nicht verstehen, so als waren es CSS-Dateien, denn LESS wird erst durch das Kompilieren zu CSS. Mit den Funktionen, Variablen, Verschachtelungen und spezifischen Syntax können Browser nichts anfangen. Deshalb sind zwei Dinge notwendig
- Wir müssen die LESS-Datei direkt laden, so als wäre Sie CSS-Dateien
- Wir müssen daraus im Browser verständliches CSS machen.
Von den LESS-Entwicklern wurde dazu eine Client-seitige Nutzung implementiert und in diesem Text dokumentiert.
Nachfolgend soll kurz beschrieben werden wie die Umsetzung für diesen Fall erfolgen kann
Weiterlesen: LESS-CSS ohne Compilierung nutzen, während der Entwicklung
Submit per Enter vor Formularvalidierung verhindern
- Details
Problembeschreibung
Formular verhalten sich in Browsern i.d.R. so, dass beim Drücken von Enter das Formular abgesendet wird. Das kann mitunter aber nachteilig sein, z.B. dann wenn der Nutzer notwendige Eingaben noch nicht vollständig ausgefüllt hat.
Oder ein anderer denkbarer Fall: In einem Warenkorb-Shop, soll wird mit Verpackungseinheite gearbeitet. Ein Script soll dabei prüfen, ob bei der Eingabe von Wunschstückzahlen diese Verpackungseinheiten eingehalten sind, also dafür sorgen, dass die Menge immer ein Vielfaches der Verpackungseinheit ist. Dazu gibt der Nutzer also die Menge in eine input-Feld ein. Beim Verlassen des Feldes, oder eben auch beim Klicken auf den Warenkorb-Button, erfolgt die Prüfung und ggf. Korrektur der Wunschmenge. Jedoch wird diese an den Warenkorb gebundene Prüfung umgangen wenn nach Eingabe im Feld durch den Nutzer einfach Enter gedrückt wird. Das Formular wird dann üblicherweise abgesendet.
Aufgabenstellung
Unser Ziel besteht nun also darin, das Absenden zu verhindern, wenn Enter gedrückt wird und die Werte nicht unsere Validierungskriterien entspricht. Ein onBlur-Ereignis führt die Wertprüfung im Eingabefeld durch, im Bsp. ist das die Funktion showSelAmountBox(), welche mit einem kleinen Dialog dem Nutzer mgl. Wunschmenge vorschlägt und dann korrekt ins Input-Feld überträgt. Das Absenden erfolgt wie üblich über ein Warenkorb-Icon als input-Tag vom Typ submit (<input type="submit" />).
Weiterlesen: Submit per Enter vor Formularvalidierung verhindern
Joomla 2.5/3.0: Modulinhalte innerhalb eines Beitrages einblenden
- Details
Problembeschreibung / Aufgabenstellung
An einem konkreten Beispiel soll verdeutlicht werden, wie man spezielle Inhaltsschnippsel innerhalb von Joomla-Beiträgen platzieren kann. Ein in der Praxis denkbarer Fall wäre mitten in Joomla Beiträgen einfach Google-Adsense-Anzeigen einzublenden, ohne dieses jedes mal komplett als Scriptschnippsel einfügen zu müssen. Wir wollen also diesen Adsense-JavaScript-Schnippsel einmal ablegen und dann beliebig oft und einfach einbinden können. Das alles soll möglich sein, ausschließlich mit Joomla Board-Mitteln.
Lösung
Im Prinzip ist es ganz einfach, wenn man um die Möglichkeiten weiss, die Joomla uns für solche Zwecken schon liefert. Es ist nicht notwendig nach Komponenten zu suchen mit denen man Adsense-Anzeigen plazieren kann oder dafür gar Geld auszugeben.
Was wir brauchen und Joomla uns auch bereitstellt:
- Ein Plugin, welches uns Module in den Content einbindet. Genau das haben wir und nennt sich unter Joomla Inhalt - Modulpositionen laden, wie immer zu finden in der Liste der Plugins. Dahinter arbeitet das Plugin plugins/content/loadmodule.
- Weiterhin brauchen wir ein Module mit dem wir einfache Inhalte veröffentlichen können. Auch das gibt es. Wir finden das Modul in der Modulliste unter dem Namen Eigene Inhalte (Leeres Modul). D.h. wir haben hier ein Modul welches zunächst einmal nichts macht, es ist leer, eben solange bis wir dort einen Inhalt einpflegen.
Diese beiden Bausteine lösen unser Problem.
Weiterlesen: Joomla 2.5/3.0: Modulinhalte innerhalb eines Beitrages einblenden
Breezing Form: Validierungsscript valuenotempty() auf Leerzeicheneingaben prüfen
- Details
In Breezing Forms kann man auf Formular-Eingabefelder eine Prüfung anwenden, ob diese beim Absendeversuch leer sind. In diesem Fall erfolgt ein Fehlerhinweis und das Absenden des Fomulars wird verhindert.
Leider ist diese Validierung nicht sonderlich vollständig, denn die Einfach Eingabe eines Leerzeichens genügt schon um das Formular trotzdem zu senden. Sicher finden sich immer Wege für den Nutzer eine Validierung zwangsweise zu umgehen, diesen Fall wollen wir aber dennoch ausschließen und das Script nur ein wenig vollständiger machen.
In der Liste der Scripte (Scripte Verwalten) wird das Script valuenotempty gesucht und zum Editieren angeklickt.
Das vohandene Script wird wie folgt ergänzt/ersetzt:
function ff_valuenotempty(element, message) { if (trim(element.value) != '') return ''; if (message=='') message = "Please enter "+element.name+".\n"; ff_validationFocus(element.name); return message; } // ff_valuenotempty function trim(input) { return input .replace(/^\s\s*/, '') // entfernt führende Leerzeichen .replace(/\s\s*$/, '') // entfernt abschließende Leerzeichen // .replace(/([\s]+)/g, '-'); // ersetzt Leerzeichen durch - }
Wir haben uns schnell eine Trim-Funktion gebaut, die alle führenden und abschließenden Leerzeichen vom Eingabestring entfernt und uns zurückgibt was übrig bleibt. Wenn der Rest leer ist, dann ist zuverlässiger leer. Laternativ könnte man auf gleiche Weiser die Prüfung erweitern, wie hier z.B. angedeutet durch Ersetzen von Leerzeichen und '-'.
JCE Profiländerungen lassen sich nicht speichern
- Details
Problem-Beschreibung
Wer in seinem Joomla-Projekten mit dem Joomla Content-Editor arbeitet, statt des voreingestellten Standard-Editors, und diesen auch regelmäßig, wird evtl. auf ein Problem beim Speichern der JCE-Profileinstellungen stoßen. Diese Text beschreibt die Lösung.
Ich persönlich arbeite in fast allen meinen Projekte mit diesem hervorragenden J!-Editor, wg. seines großen Funktionsumfanges und seinen vielfältigen Konfigurationsmöglichkeiten, speziell der Fähigkeit für verschieden Zwecke rechte-/rollenabhängig Editorprofile verwalten zu können. Grob gesagt kann man z.B. dem Frontend-Nutzer einen anderen Funktionsumfang zuweisen als einem Publisher, Author oder dem Admin im Backend.
Zurück zum Problem welches auftreten kann: Mitunter lief der Editor in früheren Version schon im Projekt ganz hervorragend. Plötzlich nach einem Upgrade des Editors stellt man fest, dass die dann vorgenommen Profileinstellungen nicht mehr gespeichert/übernommen werden. Schlimmer noch, vorher mal getroffene Einstellungen werden komplett geleert oder auf Default-Werte zurückgesetzt.
Spontan hatte ich vermutet, dass irgendwelche Schreibrechte geändert wurden, was aber ein Holzweg ist.
Weiterlesen: JCE Profiländerungen lassen sich nicht speichern
- Aktualisierung von Modul-Inhalten per Ajax in Joomla 2.5
- Pathway / Breadcrumbs in VirtueMart 1.1.x
- Mehrsprachigkeit von VM 2 Custom-Fields
- FireFox-Formulare - Fehlverhalten durch automatisches Vorausfüllen
- Internas zu Rabatt-Rechenregeln in VirtueMart 2 - Erweiterung herstellerabhängiger Rabatt
- Die Views-Scripte von VirtueMart 2
- Joomla 1.5.x CSS Dateien nach Modifikationen zwingend aktuell laden
- Mit MySQL einen nächst kleineren Wert finden
- jos_session-Tabelle wird extrem groß
- Rücksprung zur Ausgangsseite nach Warenkorb-Löschen in VirtueMart 1.1.x
- Virtuemart 2: Nutzerfelder ohne Warenkorb-Attribut / Produktvarianten / mit Warenkorb-Attribut / Child-Produkte
- Virtuemart 2: Nutzerfelder mit Bestandskontrolle
- Anpassungen von sh404SEF für PHP5.3
- Unix-Timestamp in MySQL-Tabellen als Datum anzeigen
- Vorausgewählte Multicheckbox-Felder in der VirtueMart-Benutzerregistrierung
- Kategorie-Vorschaubilder in ihren Höhen vereinheitlichen und vertikal zentrieren
- Modulposition eines veröffentlichen Moduls im Template-Script ermitteln
- Verwendung von reply-to als Lösung für Mail-Relay-Server-Problem in VirtueMart 1.x
- Dateianhänge an VirtueMart-Bestellmails
- Floating-Problem bei jQuery.SyncHeight
Seite 6 von 14