Änderungen einer Form überwachen

Aufgabenstellung: Ich möchte eine <form> mit allen ihren Elementen überwachen, ob der Benutzer eine Änderung vorgenommen hat. Wenn dem so ist und er die Seite verlässt / neu lädt, ohne die Form abgeschickt zu haben, soll ein Hinweis erscheinen, der ihn darauf aufmerksam macht und fragt, ob er die Seite wirklich verlassen möchte.

Das HTML-Gerüst

Mal alles hingezimmert, was wir so an Formularelementen kennen:

<!DOCTYPE html>
<html>
<head>
	<script src="http://code.jquery.com/jquery-1.5.js"></script>
	<script>
	//Code folgt dann hier
	</script>
</head>
<body>
	<form>
		<select name="select-single" id="select-single">
			<option>Single1</option>
			<option>Single2</option>
		</select>
		<select name="select-multiple" id="select-multiple" multiple="multiple">
			<option selected="selected">Multiple1</option>
			<option>Multiple2</option>
			<option selected="selected">Multiple3</option>
		</select>
		<input type="checkbox" name="check" value="check1" id="check1" />
		<input type="checkbox" name="check" value="check2" checked="checked" id="check2" />
		<input type="radio" name="radio" value="radio1" checked="checked" id="radio1" />
		<input type="radio" name="radio" value="radio2" id="radio2" />
		<input type="text" name="text" value="default text" id="text" />
		<textarea name="textarea" id="textarea">foobar</textarea>
	</form>
</body>
</html>

Da wären also ein Select, ein Select mit Mehrfachauswahl, ein Textfeld, eine Textarea, zwei Radiobuttons und zwei Checkboxen.… Den ganzen Post lesen

Veröffentlicht unter Javascript, webdev | 10 Kommentare

Best-of-the-Web 6

Hier die nächste Runde netter Sachen aus dem Netz. Diesmal weniger Artikel und mehr „Goodies“.

Den ganzen Post lesen
Veröffentlicht unter Best of the Web | 1 Kommentar

Javascript: selbstausführende, anonyme Funktionen

Ziel des Artikels: Den Sinn folgenden Konstrukts verstehen

(function(window, document, undefined) {
    //some fancy code
})(this, document);

Mag auf den ersten Blick für den nicht täglich mit Javascript schaffenden Menschen beängistend aussehen. Aber der Reihe nach. Eine ähnliche Konstruktion kommt übrigens in jQuery zum Tragen (siehe source).

Anonym?

Erstmal ist die Funktion anonym, also ohne Namen. Einfach aus dem Grund, weil sie keinen Namen braucht, da sie sich ja selbst aufruft. Man könnte ihr übrigens einen Namen geben, funktionieren würde es trotzdem. Vereinfacht sieht das dann z.B. so aus:

(function nichtMehrAnonym() {
    //some fancy code
})();

Vorteil: Wenn wir vorhaben, die Funktion aus sich selbst heraus nochmal aufzurufen, ist das so bequemer möglich (Rekursion).… Den ganzen Post lesen

Veröffentlicht unter Javascript, webdev | 6 Kommentare

Nette Metapher zum Thema ‚Testen‘

Nach der sträflichen Vernachlässigung des Blogs bedingt durch die fiese Klausurphase sind jetzt Semesterferien und die Liste des „Verbloggenswerten“ ist beträchtlich angewachsen – demnächst also wieder mehr Futter. Losgehen solls mit einem netten Spruch eines meiner Profs, der bei Bosch mal Softwarearchitekt war. Bezieht sich übrigens auf das Thema Softwaretests:

Stress ist, wenn man das Fahrrad so schnell schieben muss, dass man nicht aufsteigen kann.

Denkt mal drüber nach ;).… Den ganzen Post lesen

Veröffentlicht unter Software Engineering | 4 Kommentare

Needle/Haystack Übersicht

Ich schreibe bald eine Klausur (so richtig auf Papier). Und da sind keine Handbücher oder Funktionsreferenzen erlaubt. Das befinde ich jetzt erstmal für großen Schwachsinn, weil es total an der Realität vorbeigeht. So. Nun habe ich mal eine kleine Übersicht erstellt, wie die Needle/Haystack-Reihenfolge bei den meistgenutzten Funktionen ist. Durch die Hilfe der IDE ist man ja nicht gezwungen, sich das merken zu müssen. Naja, beim stöbern im PHP Handbuch ist mir nun aufgefallen, dass mein Gefühl der total willkürlichen Reihenfolge gar nicht zutreffend war ;-). Wenn man sich mal ein paar PHP-Basher anhört, ist das ja auch das erste Argument.… Den ganzen Post lesen

Veröffentlicht unter php, Quicktips, webdev | 8 Kommentare

Best-of-the-Web 5

Und wieder gibts ein paar besonders lesenswerte Webfundstücke, die mir die letzten paar Tage über den Weg gelaufen sind.

Den ganzen Post lesen
Veröffentlicht unter Best of the Web, webdev | Hinterlasse einen Kommentar

MySQL Storage Engine Vergleich – Warum MyISAM?

Neuerdings ist InnoDB die Standard-Engine von MySQL, was ich echt vernünftig finde. Ich finde es erstaunlich, wie sich MyISAM so lange halten konnte und würde gern verstehen, warum. Meiner Meinung nach zeichnet die Verbreitung von MyISAM ein trauriges Bild für Webanwendungen im Allgemeinen. Foreign Keys sind ein Segen! Deshalb die gewagte Aussage: Webanwendungen werden oft als wilder Hack hingeschustert, weswegen auch auf Datenbankseite keine vernünftige Integrität gebraucht wird.

Anders kann ich mir jedenfalls nicht erklären, wie es MyISAM zu solch einer hohen Verbreitung geschafft hat. Nachfolgend führe ich nochmal eine kleine (von mir kommentierte) Gegenüberstellung auf, die die wichtigsten Unterscheidungsmerkmale umfasst:

MyISAM

  • Die Daten-Speicherung in little endian soll für eine Maschinenunabhängigkeit / Betriebssystemunabhängigkeit sorgen – Ich weiß nicht, in wiefern das im Webumfeld praxisrelevant ist (LAMP als Standard-Stack).
Den ganzen Post lesen
Veröffentlicht unter Datenbanken, webdev | 7 Kommentare

PHP WTF #4

…oder warum man überall wo möglich 3 Gleichheitszeichen verwenden sollte ;).

<?php
$var1 = 0;
$var2 = 'foobar';

var_dump($var1 == false); //true
var_dump($var1 == $var2); //true
var_dump($var2 == true); //true

Womit dann schlussendlich true == false gilt. qed… Den ganzen Post lesen

Veröffentlicht unter php, PHP-WTF, webdev | 7 Kommentare

Rechenungenauigkeit mit Javascript – Warum?

Schonmal in Javascript über ungenaue Berechnungen aufgeregt?

<script>
alert(0.2 + 0.4);
</script>

Ergebnis?

Das Problem ist mit parseFloat ja schnell behoben, aber darum gehts mir hier garnicht. Warum kriegt Javascript kein sauberes Ergebnis zustande, wohingegen bei 0.2 + 0.3 glatt 0.5 rauskommt? Javascript rechnet intern binär. Und Zahlen, die im Zehnersystem wunderbar aufgehen, können im Dualsystem unter Umständen periodisch sein. So auch die 0.6. Schauen wir uns mal die Berechnung an:

  1. Vor dem Komma hat unser Ergebnis logischerweise eine 0
  2. Die Zahl wird mit 2 multipliziert (0.6 * 2 = 1.2)
  3. Der „Vorkommaanteil“ von oben ist die erste Stelle der gesuchten Binärzahl, also 1.
Den ganzen Post lesen
Veröffentlicht unter Javascript, webdev | 3 Kommentare

Datenbank-Transaktionen von akademischer Seite: Behind the Scenes

Disclaimer

An diejenigen mit ordentlichen Vorkenntnissen auf dem Gebiet der Transaktionen: Bitte nicht Abschrecken lassen. Es geht nach der kurzgehaltenen Einführung noch ordentlich in die Tiefe.

Was sind Transaktionen

Nach Definition ist eine Transaktion eine logische Arbeitseinheit, die entweder ganz oder garnicht durchgeführt wird. Bei einem Fehler wird die Datenbank also in den Zustand vor Ausführung der Transaktion versetzt, als ob nie etwas geschehen wäre.

Beispiel: Wo könnte man Transaktionen mehr benötigen als auf einem Gebiet, auf dem Fehler richtig weh tun? Die Bankenwelt! Man stelle sich folgendes ultrasimples Datenmodell vor:

CREATE TABLE  `konto` (
`kontonr` INT NOT NULL PRIMARY KEY ,
`betrag` INT NOT NULL DEFAULT  '0',
`kundenid` INT NOT NULL
) ENGINE = INNODB;

CREATE TABLE  `ueberweisung` (
`ueberweisungsid` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`from_kontonr` INT NOT NULL ,
`to_kontonr` INT NOT NULL ,
`betrag` INT NOT NULL
) ENGINE = INNODB;

Man beachte InnoDB als Engine, da MyISAM keine Transaktionen unterstützt.… Den ganzen Post lesen

Veröffentlicht unter php, Datenbanken, Security, webdev | 9 Kommentare