Assoziatives Array als HTML Tabelle ausgeben
Sehr häufig wird gefordert ein assoziatives Array als HTML Tabelle auszugeben. Ich nutze hier sehr oft die implode() Funktion, um dabei mit möglichst wenig Quellcode zu dem Gewünschten Ergebnis zu kommen. Da ich meine Lösung wirklich sehr schön und genial einfach finde, wollte ich euch kurz die Funktion präsentieren. Als auszugebendes Array nehmen wir das MySQL-Debugging Array aus meinem vorherigen Artikel MySQL unter PHP debuggen mit einer eigenen MySQL Klasse.
function array_to_table($a){
$t='<table>';
$t.='<tr><th>'.implode('</th><th>', array_keys($a[0])).'</th></tr>';
foreach($a as $row){
$t.= '<tr><td>'.implode('</td><td>', $row).'</td></tr>';
}
return $t.='</table>';
}
// Ausgabe der Tabelle
echo array_to_table($mysqli->queries);
In Zeile 3 werden die Schlüssel des assoziativen Array für die Überschriften der Spalten genutzt. Wir öffnen hier eine Zeile und eine Spalte und fügen dann mit Hilfe der implode() Funktion alle Schlüssel in diese Zeile ein. Die “Glue” für die implode() Funktion ist hierbei ein schließendes Tag für die Spalte und ein weiteres öffnendes. Am Ende der Zeile schließen wir noch die letzte Spalte und die Zeile. Die gleiche elegante Anwendung der implode() Funktion verwenden wir auch bei den einzelnen Spalten mit den Werten. Hier in einer foreach Schleife.
Mit dieser Funktion kann jedes assoziative Array sehr elegant ausgegeben werden. Dabei lässt sich die Funktion trefflich erweitern. So könnte z.B. in einem Parameter ein Array mit Schlüsselnamen übergeben werden, wenn die Schlüssel des Assoziativen Arrays nicht passend für die Tabelle sind. Oder es könnte jeder Zeile eine alternierende “gerade” und “ungerade” Klasse mitgegeben werden. Oder aber man vergibt Klassen um eine der vielen JavaScript Sortierungen auf die Tabelle anwenden zu können.
Wir ihr also sehen könnt ihr eure Fantasie bei der Erweiterbarkeit freien Lauf lassen. Ich vergebe meistens die Klassen für Sortierung einer Tabelle mit der Tablekit Sortierung.
Ich hoffe, dass euch die Funktion bei eurer täglichen Arbeit helfen kann. Ich liebe die implode() Funktion, da man mit ihr sehr elegant PHP Arrays in Strings umwandeln kann. Ich verwende sie auch häufig beim Erstellen von SQL Statements in Verbindung mit dem IN() Operator.
MySQL unter PHP debuggen mit einer eigenen MySQL Klasse
Bei einem meiner Projekte kam es zu ungewöhnlich langen Ladezeiten eines Formulars. Da hier allerdings auch sehr viele Datenbankabfragen ausgeführt werden müssen und dabei auch noch die Werte per COUNT() gezählt werden wunderten mich die Zeiten nicht wirklich.
Nun wollte ich natürlich wissen, welche Abfrage dabei besonders viel Zeit in Anspruch nimmt um dann gezielt optimieren zu können. Ich setze in dem Projekt auf die MySQLi Klasse von PHP. Da ich hierbei die Klasse objektorientiert nutze, war es sehr einfach möglich diese zu erweiterten. Eine Möglichkeit wäre es natürlich gewesen eine eigene Funktion zu schreiben, aber in diesem Fall hätte ich auch alle Skript anpassen müssen, in denen ich eine Query ausführe. Daher habe ich mich dazu entschlossen einfach die query() Funktion von MySQLi zu überschreiben. Hier ein stark vereinfachtes Beispiel, wie so etwas aussehen könnte:
Das Bermudadreieck des Internet Explorer – Oder: Wo zum Teufel ist mein Ordner hin?
Heute bin ich mal wieder auf ein sehr faszinierendes Problem mit dem Internet Explorer gestoßen. Meine erste Vermutung war mal wieder ein Programmierfehler im vielgeliebten IE6, aber der Fehler trat auch im Internet Explorer 7 auf.
Ich nutze in einem Projekt absolute Pfade in allen Dateinamen, Links und Formularen. Nun hatte ich aber im einem Formular dummerweise das Gleichheitszeichen nach dem Short Open Tag in PHP vergessen. Mein Formular sah also in verkürzter Form wie folgt aus:
<form action="<? ABSOLUTER_PFAD ?>form.php"> ... </form>
Zeilen-Duplizierer mit AutoComplete Felder nutzen
ich bekam heute in einem Kommentar die Frage gestellt, ob mein Zeilen-Duplizierer aus dem Beitrag: Einfacher Zeilen-Duplizierer mit Prototype auch auf Feldern funktioniert, die die Scriptaculous Ajax.AutoCompleter Funktion verwenden.
Ich nutze den Duplizierer selbst in einem Formular, das solche Felder enthält. Meine erste Fassung entsprach dabei dem Einzeiler aus dem vorherigen Beitrag. Das Problem dabei ist allerdings, dass die AutoCompleter Funktion beim Erzeugen mit dem Felder verknüpft wird, auf das sie angewendet werden soll. Wenn man nun dieses Feld kopiert wird nicht eine neue Instanz des Ajax.AutoCompleter erzeugt, sondern die Referenz auf das alte Feld mit kopiert. Ein Eintrag im neu erzeugten Feld aktiviert also die AutoCompleter Funktion des vorherigen Feldes.
Backend Localization Plugin funktioniert nun auch mit PHP4
Anfang der Woche bekam ich einen Kommentar zu meinem Backend Localization Plugin mit dem Hinweis, dass es nicht mit PHP4 funktioniert. Da ich schon lange PHP5 nutze und auch versuche meinen Quellcode übersichtlich zu gestalten, habe ich in meinem Plugin einige Funktionen und Eigenschaften genutzt, die es für PHP4 noch nicht gab.
Der Kommentator, der den Fehler gefunden hat, konnte auch selbst am nächsten Tag schon eine Lösung finden, die er auf seinem eigenen Blog sowie als weiteres Kommentar hinterlassen hat. An dieser Stelle nochmals vielen Dank an David.
Ich versuche Fehler, die mir mitgeteilt werden immer innerhalb von wenigen Tagen zu beheben. Dazu bin ich natürlich darauf angewiesen, dass mir diese auch mitgeteilt werden. Bei WordPress kann es sehr oft vorkommen, dass sich zwei Plugins nicht zusammen vertragen. Wenn ihr also mit einem meiner Plugins ein Problem feststellen solltet, dann scheut euch nicht mir das mitzuteilen. Ich werde gerne versuchen das Problem zu beheben.
Arrays und andere komplexe Daten mit PHP in einer MySQL-Datenbank speichern
Viele von euch werden wohl schon einmal vor dem Problem gestanden haben, dass sie ein Array oder ein Objekt in der Datenbank speichern mussten. Hier möchte ich ein paar Vorschläge unterbreiten, wie man das Problem nicht lösen sollte und wie es besser gehen kann.
Der schlechte Weg
Die einfachste und gleichzeitig auch schlechteste Methode wäre es, für jeden Index eines Arrays oder jede Eigenschaft eines Objekts eine neue Spalte zu erzeugen. Bei diesem Ansatz werden unter Umständen viele Zeilen erzeugt, die nicht immer einen Wert enthalten. Das ist zwar nicht so gravierend, aber durch diesen Ansatz erhöht sich auch die Anzahl der Spalten schnell auf eine unübersichtliche Anzahl. Zuletzt ist es hierbei bei jeder Änderung des Arrays oder Objekts notwendig die Datenbanktabelle anzupassen.
PDF-Dokument ohne PDFlib mit PHP erzeugen
Viele von euch werden wohl XAMPP benutzen, um lokal in PHP zu entwickeln und zu testen. In der Windows-Version enthält es auch die PHP-Extension PDFlib, die aber leider auf vielen Hostingpaketen mit Linux als Betriebssystem nicht enthalten ist. Da PDFlib mehrere hundert Euro Lizenzgebühren kostet stellen sich viele die Frage, ob es sinnvolle und kostenlose Alternativen gibt. Glücklicherweise gibt es Alternativen und eine sehr umfangreiche möchte ich euch kurz vorstellen.
Die kostenlose TCPDF Library
Nachdem ich ein paar kostenlose PDF Klassen für PHP getestet habe, hat sich ein klarer Sieger herausgestellt. Die Klasse TCPDF zeichnet sich nicht nur durch seinen großen Funktionsumfang, sondern auch durch seine sehr gute Quellcode-Kommentierung und die gute Dokumentation der Funktionen.
Plesk Cronjob für ein PHP-Skript mit Parametern einrichten
Bei vielen Webhosting Paketen gibt es die Möglichkeit einen Cronjob einzurichten. Leider musste ich nach dem Umstieg von einem 1&1 Managed Homepage Server auf einen 1&1 Linux Root Server feststellen, dass diese Option im Control Center nicht mehr verfügbar war. Auch meine Suche nach dem “Crontab” in Plesk war erst einmal erfolglos, da die Funktion an der beschriebenen Stelle nicht zu finden war. Durch Zufall habe ich sie dann doch gefunden.

Mail Versand per SMTP auf 1&1 Linux Root Server einrichten
Ich bin auf einen neues Problem mit dem Standard-Setup der 1&1 Linux Root Server getoßen. Vor dem Umzug auf den Root Server wurde ein 1&1 Managed Homepage Server genutzt. Dieser hat keinen eigenen Mailserver installiert. Der Root Server hingegen verschickt die Mails direkt an den Empfänger und nicht wie der Managed Server über den 1&1 SMTP Server. Doch wieso ist das ein Problem?
Nun, durch das zunehmende Problem von SPAM werden bei den meisten Mailanbeitern alle Mails von Severn abgelehnt, die nicht als vertrauerswürdiger Mailserver in einer Whitelist eingetragen sind. Der eigene Root-Server ist in diesen Listen allerdings fast nie gelistet. Beim Versuch eine Mail an einen Freemailer wie z.B. GMX zu senden resultiert dann in einer Ablehnung seitens GMX. Diese sehen in der Regel wie folgt aus:
Google Maps Suggest – Adress-Autovervollständigung mit Scriptaculous
Viele nutzen Autovervollständigungen auf ihrer Website. Es ist nicht nur eine sehr beeindruckende Technik, sondern zudem eine sehr nutzerfreundliche. Zusätzlich kann sie dazu dienen, dass in einem Formular möglichst gültige Werte gespeichert werden. Selbstverständlich müssen alle Daten serverseitig erneut überprüft werden.
Ich möchte heute zeigen, wie einfach es mit Scriptaculous möglich ist, eine Autovervollständigung mit Google-Maps-Adressen umzusetzen. Da man per AJAX nicht auf fremde Website einen AJAX-Request durchführen kann, müssen wir ein Skript als Schnittstelle zwischen Google Maps und unserer Website verwenden. Fangen wir also dieses Mal mit der serverseitigen Script an:









