QuiBui LE download

Download QuiBui LE Version 1.5.1 (beta)

Samstag, 1. Dezember 2007

Für zwischendurch: hier werkelt QuiBui (#4)

QuiBui wird bei dem großen Bio-Shop KaRo eingesetzt z.B. bei den Rezepten, der Warenkunde, den Kontaktformularen und fast für die komplette Administration.

Für die Pflege der Bestellungen und der Kundendaten kommt dazu DynaFace zur Hilfe. Dabei wird davon die tabellarische Darstellung verwendet.

Auf der Benutzerseite wurde hier das Shopsystem oscommerce dahingehend erweitert, dass der Bestellprozess vollständig mit AJAX umgesetzt wurde. Die Vorteile davon:

  • Kunde verlässt nicht das aktuelle Produkt nach dem Bestellen - er kann einfach weiter einkaufen
  • Anzahl des Produktes im Warenkorb lässt sich am Produkt selbst ändern - Klick zum Warenkorb entfällt
  • Es wird am Produkt die Anzahl aus dem Warenkorb ausgewiesen - erhöhte Übersichtlichkeit

Mittwoch, 31. Oktober 2007

Für zwischendurch: hier werkelt QuiBui (#3)

In Vorbereitung auf das Eintreffen des iPhone auf dem deutschen Markt, wird für ich-habe-geburtstag.de eine spezielle Seite eingerichtet, die mit dem Look & Feel des iPhone aufwartet. Dahinter arbeitet auch hier QuiBui.

Getestet werden kann die Seite auch ohne iPhone: Voraussetzung ist aber der Browser "Safari" von Apple, der ja ebenfalls auf dem iPhone läuft.

Die iPhone-Seite findet sich hier:

http://www.ich-habe-geburtstag.de/iphone

Dienstag, 30. Oktober 2007

Für zwischendurch: hier werkelt QuiBui (#2)

http://www.ich-habe-geburtstag.de

Basiert ganz und gar auf QuiBui: Formulare, Plausibilitäten, News-System, Sicherheit. War auch das erste Projekt, das ich komplett mit QuiBui erstellt habe. Der Grund war Zeitnot - ich wollte dafür nicht länger als ein Wochenende in Anspruch nehmen, was mir auch gelungen ist.

Die jetzt sichtbare Version basiert auf das aktuelle Update.

Freitag, 21. September 2007

QuiBui in Foren

Ich habe im Forum von www.php-resource.de zu einem Problem eines Nutzers eine Antwort gegeben. Sie war so, wie ich gerne eine Antwort gebe, wenn ich sie weiss: einfach zu zielführend.

Es ging um das Erzeugen eines Pulldowns aus den Daten einer MySQL-Abfrage. Und ich schilderte die QuiBui-Funktion QB_TABLE2PULLDOWN, die ja genau das macht...

Wie hätte ich vermuten können, dass es einigen im Forum gar nicht darum geht, eine Lösung für ein Problem zu liefern, sondern nur darum, den Hilfesuchenden mit kleinen "Schubsern" zu einer mehr oder weniger funktionierenden Codierung zu helfen??

Dann fand man es auch noch sehr nett, meinen absichtlich verschleierten QuiBui-Code zu entschleiern und dort teilweise zu posten. Das wurde dann später gekürzt, was ok ist aber nicht von der Art und Weise des Umgangs mit fremden Code ablenken kann.

Ich für mein Teil habe daraus etwas gelernt: wer nach Problem-Lösungen sucht, wird sie nicht in öffentlichen Foren suchen. Dafür sind die meisten einfach zu sehr auf Nutzer geeicht, die JavaScript-Funktionen zwischen "PHP"- Tags einbinden... Diesen dann mit fertigen Funktionen zu kommen ist dort einfach nicht Sinn der Sache. Wie heisst es dort in mehreren Beiträgen so oft: "hier wird dir niemand den fertigen Code machen". Fokus ist also auf selbst lernen gesetzt und immer wieder und immer wieder, Generation für Generation, auf Erfragen und Lösen der selben Probleme...

Mittwoch, 19. September 2007

Lektion 3: Durch MySQL-Liste blättern

Schauen wir uns mal an, wie durch eine lange Liste mit QuiBui geblättert werden kann. Was ich schon vorab sagen kann: es ist wirklich einfach ;)

Gegeben sei eine MySQL-Tabelle, wie z.B. diese:


Tabelle: albums
-----------------------------------------
| jahr | album | verkauft|
-----------------------------------------
| 1981 | Face Value | 19 Mio. |
| 1982 | Hello, I Must Be Going!| 15 Mio. |
| 1985 | No Jacket Required | 32 Mio. |
| 1987 | 12"ers (Remixes) | 1 Mio. |
| 1989 | …But Seriously | 26 Mio. |
| 1989 | Serious Hits… Live! | 22 Mio. |
| 1993 | Both Sides | 10 Mio. |
| 1996 | Dance Into The Light | 5 Mio. |
| 1998 | ...Hits | 15 Mio. |
| 1999 | A Hot Night In Paris | 1 Mio. |
| 1999 | Tarzan-Soundtrack | 2 Mio. |
| 2002 | Testify | 5 Mio. |
| 2003 | Bärenbrüder-Soundtrack | |
| 2004 | Platinum Collection | 1 Mio. |
-----------------------------------------



Nehmen wir an, wir wollen nur je 5 Einträge gleichzeitig anzeigen - weitere sollen durch Blättern erreichbar sein.

Zuerst geben wir die Liste einfach aus. (Hier ausführlich, wie das geht)

foreach(QB_TABLE2ARRAY('albums') as $album) {
echo $album['jahr'] . " " . $album['album'] . "<br>";
}


Jetzt setzen wir im Kopf der PHP-Datei eine QuiBui-Variable fest, die das Blättern steuert:

$_QB_MAX_PER_PAGE gibt an, wie viele Einträge pro Seite angezeigt werden sollen. Wir wollten hier 5 anzeigen. Also:

$_QB_MAX_PER_PAGE = 10;

Jetzt fügen wir an die gewünschte Stelle die Links zum Blättern ein:

echo QB_PAGINATION_LINKS(QB_COUNTTABLE('albums'));

Nun ja, das war's auch schon! Sehen wollen? Quelltext ist auch dabei!

Donnerstag, 13. September 2007

QuiBui LE Download

Seit heute steht QuiBui "LE" zum Download bereit.

Beispiele zum Einsatz von QuiBui LE findet ihr auf der Homepage:

http://www.erich-kachel.de/quibui_app

Donnerstag, 8. März 2007

Für zwischendurch: hier werkelt QuiBui

Mal sehen wollen, wo QuiBui in aller Pracht seine Arbeit verrichtet? Ich nenne erst einmal die "prominenteste" Stelle:


http://www.one-book.de/druckformular.php

Das Besondere hier: Prüfung der Feldeingaben, eindeutige Fehlermeldungen in den Feldern und als Erklärung separat, Blättern zwischen mehreren Formularen - vor und zurück, Versand einer Mail zum Schluss. Alles natürlich mit allen angebotenen Sicherheitsvorkehrungen eingeschaltet. Kein XSS-Defacement, keine SQL-Injections, keine Mailheader-Injections möglich.

Mittwoch, 28. Februar 2007

Lektion 2: MySQL Tabelle auslesen

Widmen wir uns heute einer anderen üblichen Aufgabenstellung aus der PHP-Anwendungsentwicklung: das Auslesen einer MySQL-Tabelle und das Darstellen der Daten.

Beispieltabelle definieren
Damit wir alle wissen, worum es hier geht, möchte ich die Struktur der MySQL-Tabelle definieren.


Tabelle: albums
-----------------------------------------
| jahr | album | verkauft|
-----------------------------------------
| 1981 | Face Value | 19 Mio. |
| 1982 | Hello, I Must Be Going!| 15 Mio. |
| 1985 | No Jacket Required | 32 Mio. |
| 1987 | 12"ers (Remixes) | 1 Mio. |
| 1989 | …But Seriously | 26 Mio. |
| 1989 | Serious Hits… Live! | 22 Mio. |
| 1993 | Both Sides | 10 Mio. |
| 1996 | Dance Into The Light | 5 Mio. |
| 1998 | ...Hits | 15 Mio. |
| 1999 | A Hot Night In Paris | 1 Mio. |
| 1999 | Tarzan-Soundtrack | 2 Mio. |
| 2002 | Testify | 5 Mio. |
| 2003 | Bärenbrüder-Soundtrack | |
| 2004 | Platinum Collection | 1 Mio. |
-----------------------------------------


Nachdem wir eine solche Tabelle erstellt haben (mit phpmyadmin z.B.), ihr den Namen albums gegeben haben und die Daten eingepflegt haben, wollen wir diese in unsere Webseite anzeigen. Um uns nicht mit Design zu beschäftigen, geben wir die Daten ohne Schnickschnack aus.

Unsere Webseite
Die Webseite sieht wie zu Anfang der Lektion 1 aus:

<?php
include_once('../quibui/quibui.php');
?>
<html>
<body>
</body>
</html>

Datenbanktabelle auslesen und anzeigen
Wir brauchen die Funktion

QB_TABLE2ARRAY(p1, p2, p3, p4)

Wir verwenden jetzt nur p1. P1 nimmt den Namen der Tabelle.

QB_TABLE2ARRAY('albums')
Jetzt haben wir den gesamten Inhalt der Tabelle zur Verfügung und können ihn darstellen. Dabei nutzen wir die Datenstruktur des assoziativen Arrays und gehen jeden einzelnen Datensatz durch. Unsere Datei sieht also wie folgt aus:


<?php
include_once('../quibui/quibui.php');
?>
<html>
<body>

<?php

foreach(QB_TABLE2ARRAY('albums') as $album) {
echo $album['jahr'] . " " . $album['album'] . "<br>";
}

?>

</body>
</html>


Fertig
So werden Tabelleninhalte mit QuiBui ausgelesen. Das Ergebnis sieht z.B. so aus:

1981 Face Value
1982 Hello, I Must Be Going!
1985 No Jacket Required
1987 12"ers (Remixes)
1989 ...But Seriously
1989 Serious Hits? Live!
1993 Both Sides
1996 Dance Into The Light
1998 ...Hits
1999 A Hot Night In Paris
1999 Tarzan-Soundtrack
2002 Testify
2003 Bärenbrüder-Soundtrack
2004 Platinum Collection

Donnerstag, 22. Februar 2007

Lektion 1: Hallo NAME

Fangen wir mit einer trivialen Sache an, die unter PHP höchst sicherheitskritisch ist: Eingabe und Ausgabe von Formulardaten.

Was ist hier sicherheitskritisch? Nun, es ist die Stelle, an der die üblichen XSS-Defacements ansetzen. Wie verbreitet diese Falle ist, ist hier schön zu beobachten:

http://baseportal.com/baseportal/phishmarkt/de

Datei anlegen
Aber schauen wir uns erst einmal unsere PHP-Datei an. Sie enthält erst den QuiBui-Aufruf.


<?php
include_once('../quibui/quibui.php');
?>


Wir speichern diese in ein Verzeichnis lektion_1 auf dem Server ab. Wenn diese Datei jetzt aufgerufen wird, passiert... gar nichts.

Ein Formular, zum Testen
Jetzt erstellen wir ein minimalistisches Formular, um die Übertragung und die Ausgabe von Daten durchzuspielen. Meine Datei sieht jetzt so aus:

<?php
include_once('../quibui/quibui.php');
?>
<html>
<body>

<form method="POST" action="">
<input type="text" name="MEINNAME">
<input type="submit" value="Senden">
</form>

</body>
</html>
Falls nicht klar ist, was diese Zeilen machen, sollte von der Verwendung von QuiBui abgesehen werden und mit dem 1 mal 1 angefangen werden: HTML (SELFHTML).

Rufen wir diese Seite jetzt auf und geben in das Feld was ein, dann wandert die Eingabe beim Klicken des Knopfes Senden wieder zu diese Seite zurück, da wir dem Formular keinen action-Parameter mitgegeben haben. Für unsere Zwecke ist das aber sehr schön so, denn wir können gleich im selben Formular die gesendeten Daten empfangen.

POST und GET Daten auslesen
Jetzt kommen die Daten aus dem Formular also wohl an. Nun müssen wir sie nur noch sichtbar und nutzbar machen. Dazu machen wir Bekanntschaft mit einem Allrounder aus den QuiBui-Funktionen:

QB_HTTPVARS2ARRAY(p1, p2)

Diese Funktion sammelt für uns umherfliegende GET und POST-Daten (und einige mehr, doch darüber später) ein und stellt sie uns zur Verfügung. Fragen wir die Funktion parameterlos ab, dann bekommen wir ein assoziatives Array mit allen gesammelten Daten. In unserem Fall möchten wir aber nur den Inhalt des Feldes mit dem Namen MEINNAME haben:

QB_HTTPVARS2ARRAY('MEINNAME');


Diese neue Zeile fügen wir unserer Datei hinzu:


<?php
include_once('../quibui/quibui.php');
echo QB_HTTPVARS2ARRAY('MEINNAME');
?>

<html>
<body>

<form method="POST" action="">
<input type="text" name="MEINNAME">
<input type="submit" value="Senden">
</form>

</body>
</html>
Damit geben wir den Inhalt des Feldes aus. Die Funktion kann den Wert auch anzeigen, wenn dieser über GET übertragen wurde.

Ausgabe sichern
Wir haben zum Anfang gesehen, wie sich ungeschützte Ausgaben missbrauchen lassen. Um das mit unserem Beispiel - und später generell mit allen Ausgaben - nicht zu ermöglichen, verwenden wir die Funktion

QB_SECUREPRINT(p1, p2)

Sodass die Datei zum Schluss so aussieht:


<?php
include_once('../quibui/quibui.php');
echo QB_SECUREPRINT(QB_HTTPVARS2ARRAY('MEINNAME'));
?>

<html>
<body>

<form method="POST" action="">
<input type="text" name="MEINNAME">
<input type="submit" value="Senden">
</form>

</body>
</html>

QuiBui - Installation

QuiBui enthält keine Installationsroutinen. Es kann nach dem Entpacken in ein Verzeichnis und nach Anpassen der Datenbankverbindung (MySQL) einfach mit include eingebunden werden.

Entpacken
Ich empfehle diese Verzeichnisstruktur:

wwwroot
|
- qb
| |
| |- obfuscated
| |
| |- formular.php
| |- functions_inc.php
| |- qb_check_pattern.php
|
|- INSTALLATION.txt
|- mysql_inc.php.example
|- quibui.php.example

Das bedeutet, dass die ZIP-Datei in ein neu angelegtes Verzeichnis qb in das Server-Rootverzeichnis kopiert wird.

Konfigurieren
Es ist die Datei mysql_inc.php.example nach mysql_inc.php zu kopieren und zu editieren:


Die benötigten Daten sind vom Provider zu erfahren. Das sollte man schon machen können, wenn man QuiBui nutzen möchte.


Verwenden
Es sit die Datei quibui.php.example nach quibui.php zu kopieren. Jetzt wird diese und nur diese von der künftigen Anwendung eingebunden:

include_once('/qb/quibui.php');

Obfuscation
QuiBui ist in grossen Teilen "obfusziert", also verschleiert. Praktisch bedeutet es, dass Variablen-, Funktionen- und Konstantennamen neue Namen "von der Stange" bekommen. Dadurch ist es immernoch möglich, den Code zu sichten. Was schwerer gehen sollte, ist dass sich andere was davon aneignen. QuiBui ist nicht Open Source, sondern Freeware.

QuiBui - Vorwort

QuiBui ist eine freundliche Sammlung von PHP-Funktionen, die klassische Aufgaben bei der Anwendungsentwicklung erleichtern.

Schon einmal ein Formular gebaut und dann mit Daten aus einer Datenbank füllen wollen? Sicherlich! Unzählige Versuche finden sich in allen Entwicklerforen und jedes mal ist der Lösungsvorschlag ein anderer. Das Resultat ist fast immer ein unübersichtlicher Salat von PHP-Code und HTML. Der Versuch, Datenbankzugriffe, Design und Sicherheit in eine Datei zu pressen. Und beim nächsten Mal, stehen wir wieder am Anfang...

Ein E-Mailformular fertig erstellt und dann fleissig Spamangriffe geerntet? Sicherlich! Dabei sind es einige Regeln, die es zu beachten gilt um es den Spammern ihre "Arbeit" schon um einiges schwerer bis unmöglich zu machen. Und dazu braucht man keine "habenwollen!"-Kaptchas...

Was ist bei QuiBui anders? Es ist vielleicht nicht die Absicht, damit alle glücklich zu machen. Es ist kein Framework. Es sind einfach nur Funktionen, die ziemlich gezielt genau das machen, was ein PHP-Entwickler braucht, wenn er seine Anwendung konzipiert.