<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>/home/antu &#187; HTML</title>
	<atom:link href="http://www.antusblog.de/tag/html/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.antusblog.de</link>
	<description>Linux, Programmierung und andere Dinge die mich interessieren</description>
	<lastBuildDate>Mon, 26 Oct 2009 06:00:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>CSS: DIV-Element mit 100% Höhe</title>
		<link>http://www.antusblog.de/2009/10/22/css-div-element-mit-100-hohe/</link>
		<comments>http://www.antusblog.de/2009/10/22/css-div-element-mit-100-hohe/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 06:00:32 +0000</pubDate>
		<dc:creator>Antu</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[100% Höhe]]></category>
		<category><![CDATA[DIV]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Webgestaltung]]></category>

		<guid isPermaLink="false">http://www.antusblog.de/?p=2229</guid>
		<description><![CDATA[Manchmal ist es gewollt, dass ein HTML-Element (meistens ein DIV) 100% der Höhe des Browser-Fensters einnehmen soll. Mit einem einfachen height:100%; ist es aber nicht getan. Wie man ein DIV-Element erstellt, dass 100% der Höhe des Browser-Fensters hat aber bei längerem Inhalt mitwächst, und was dabei zu beachten ist, erkläre ich in diesem Artikel. Der [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.antusblog.de/?p=2229"><img class="alignright size-full wp-image-2230" title="100% Hoehe" src="http://www.antusblog.de/wp-content/uploads/2009/10/100.Prozent.Hoehe.png" alt="100% Hoehe" width="150" height="150" /></a>Manchmal ist es gewollt, dass ein HTML-Element (meistens ein DIV) 100% der Höhe des Browser-Fensters einnehmen soll. Mit einem einfachen <code>height:100%;</code> ist es aber nicht getan. Wie man ein DIV-Element erstellt, dass 100% der Höhe des Browser-Fensters hat aber bei längerem Inhalt mitwächst, und was dabei zu beachten ist, erkläre ich in diesem Artikel.</p>
<p><span id="more-2229"></span></p>
<h2>Der Aufbau: HTML</h2>
<p>Der HTML-Quelltext hierzu ist einfach, es wird ein DIV-Element erstellt, welches alle weiteren Inhalte umfasst. Dieses bekommt eine Klasse, oder besser eine ID zugewiesen, damit es leichter per CSS gestaltet werden kann.</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;">    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;wrapper&quot;</span>&gt;</span>
            [...]
        <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">body</span>&gt;</span></pre></div></div>

<h2>HTML und BODY</h2>
<p>Damit, dem DIV nun einfach eine Höhe von 100% zuzuweisen, ist es noch nicht getan. Die 100% beziehen sich ja auf die Größe des Eltern-Elements, dem <code>BODY</code>, dieser braucht also auch eine Höhe von 100%. Das <code>HTML</code>-Element bekommt ebenfalls eine Höhe von 100%, schließlich ist es ja das Eltern-Element von <code>BODY</code>.</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">html<span style="color: #00AA00;">,</span> body <span style="color: #00AA00;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">height</span><span style="color: #00AA00;">:</span><span style="color: #933;">100%</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>Viele Browser geben dem <code>HTML</code> oder dem <code>BODY</code>-Element standardmäßig noch einen kleinen Innenabstand, so dass die Inhalte nicht direkt am Rand kleben. In diesem Fall ist das aber unerwünscht, denn einerseits soll das DIV-Element ja die ganze Höhe ausfüllen (ohne andersfarbige Ränder), und andererseits gäbe es sonst Scrollbalken (100% + 5px Innenabstand oben = mehr als 100% -> Scrollbalken).</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">html<span style="color: #00AA00;">,</span> body <span style="color: #00AA00;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span><span style="color: #cc66cc;">0</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">padding</span><span style="color: #00AA00;">:</span><span style="color: #cc66cc;">0</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">height</span><span style="color: #00AA00;">:</span><span style="color: #933;">100%</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<h2>DIV-Element auf 100% der Höhe von BODY</h2>
<p>Jetzt wo das BODY- und das HTML-Element auf 100% Höhe sind, muss nur noch das DIV-Element auf 100% Höhe gebracht werden:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #cc00cc;">#wrapper</span> <span style="color: #00AA00;">&#123;</span>
    <span style="color: #808080; font-style: italic;">/* Für moderne Browser */</span>
    <span style="color: #000000; font-weight: bold;">min-height</span><span style="color: #00AA00;">:</span><span style="color: #933;">100%</span><span style="color: #00AA00;">;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">/* Für den Internet Explorer 6 */</span>
    <span style="color: #000000; font-weight: bold;">height</span><span style="color: #00AA00;">:</span><span style="color: #993333;">auto</span> !important<span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">height</span><span style="color: #00AA00;">:</span><span style="color: #933;">100%</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>Das Element soll eine Mindesthöhe von 100% haben, bei längeren Inhalten soll es sich von selbst vergrößern. Eine Mindesthöhe kann mit der CSS-Eigenschaft <code>min-height</code> angegeben werden, würde man hier <code>height</code> verwenden, würden moderne Browser nicht zulassen, dass das DIV-Element mit längeren Inhalten mitwächst, es wäre immer genau 100% hoch. Der Internet Explorer 6 hingegen versteht die <code>height</code>-Eigenschaft als Mindesthöhe, <code>min-height</code> kennt der IE 6 nicht.
<p>Hier kann man sich die Tatsache zu Nutze machen, das der IE 6 <a href="http://www.kk-works.de/2005/10/12/ie-vorurteile/">!important</a> etwas anders interpretiert als andere Browser. Zuerst legt man fest, dass die Höhe des Elements sich dem Inhalt anpassen soll (<code>auto</code>), und das diese Angabe alle anderen Angaben zur Höhe überschreibt (<code>!important</code>). Dann wird dem Element eine Höhe von 100% zugewiesen, was der IE 6 als Mindesthöhe interpretiert. Da der IE 6 das <code>!important</code> in diesem Fall ignoriert, verwendet er die zweite Angabe, und stellt eine Mindesthöhe von 100% ein. Alle anderen Browser beachten das <code>!important</code>, und ignorieren die zweite <code>height</code>-Angabe.</p>
<p>In Aktion sieht das dann so aus: <a href="/demos/12-seite-mit-100-prozent-hoehe/Beispiel.html">Beispiel</a></p>
<h2>Eine Fußzeile?</h2>
<p>Wie erstellt man jetzt eine Fußzeile? Dazu wird ein DIV-Element mit der ID <em>footer</em> erstellt, dieses wird mit CSS wie folgt gestaltet:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #cc00cc;">#footer</span> <span style="color: #00AA00;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">position</span><span style="color: #00AA00;">:</span><span style="color: #993333;">absolute</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">bottom</span><span style="color: #00AA00;">:</span><span style="color: #cc66cc;">0</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span><span style="color: #933;">100%</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">height</span><span style="color: #00AA00;">:</span><span style="color: #933;">2em</span>
 <span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>Mittels <code>position:absolute;</code> wird festgelegt, dass das Element relativ zum nächsthöheren positionierten Element ausgerichtet wird. Mit <code>bottom:0;</code> bestimmt man, dass das Fußzeilen-Element ganz am unteren Rand vom <code>wrapper</code>-Element positioniert wird.</p>
<p>Nun muss dem <code>wrapper</code>-Element allerdings noch eine relative Positionierung zugewiesen werden, damit das Fußzeilen-Element sich darauf beziehen kann.</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #cc00cc;">#wrapper</span> <span style="color: #00AA00;">&#123;</span>
    <span style="color: #808080; font-style: italic;">/* Für moderne Browser */</span>
    <span style="color: #000000; font-weight: bold;">min-height</span><span style="color: #00AA00;">:</span><span style="color: #933;">100%</span><span style="color: #00AA00;">;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">/* Für den Internet Explorer */</span>
    <span style="color: #000000; font-weight: bold;">height</span><span style="color: #00AA00;">:</span><span style="color: #993333;">auto</span> !important<span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">height</span><span style="color: #00AA00;">:</span><span style="color: #933;">100%</span><span style="color: #00AA00;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">position</span><span style="color: #00AA00;">:</span><span style="color: #993333;">relative</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>Der Inhalt selbst bekommt auch ein eigenes DIV-Element, welches einen Innenabstand so hoch wie die Fußzeile bekommt, so dass die Inhalte nicht unter der Fußzeile angezeigt werden.</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;">    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;wrapper&quot;</span>&gt;</span>
            <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;content&quot;</span>&gt;</span>
                [Inhalte]
            <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
            <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;footer&quot;</span>&gt;</span>
                [Inhalte der Fußzeile]
            <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">body</span>&gt;</span></pre></div></div>

<p>Das CSS für das <code>content</code>-DIV sieht so aus:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #cc00cc;">#content</span> <span style="color: #00AA00;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">padding-bottom</span><span style="color: #00AA00;">:</span><span style="color: #933;">2em</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>Fertig sieht das dann so aus: <a href="/demos/12-seite-mit-100-prozent-hoehe/Beispiel2.html">Beispiel</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.antusblog.de/2009/10/22/css-div-element-mit-100-hohe/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Formulare: Datei-Element umgestalten</title>
		<link>http://www.antusblog.de/2009/07/04/formulare-datei-element-umgestalten/</link>
		<comments>http://www.antusblog.de/2009/07/04/formulare-datei-element-umgestalten/#comments</comments>
		<pubDate>Sat, 04 Jul 2009 11:23:33 +0000</pubDate>
		<dc:creator>Antu</dc:creator>
				<category><![CDATA[Java Script]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Datei]]></category>
		<category><![CDATA[Formular]]></category>
		<category><![CDATA[hochladen]]></category>
		<category><![CDATA[HTML]]></category>

		<guid isPermaLink="false">http://www.antusblog.de/?p=1687</guid>
		<description><![CDATA[Das Formularelement zum Auswählen einer Datei lässt sich nicht mittels CSS umgestalten, der Browser verwendet für dieses Element immer das Standardaussehen, so wie es vom Betriebssystem vorgegeben ist. Bei der Gestaltung von Formularen ist das natürlich ärgerlich, da das Element meistens nicht zum Aussehen der anderen Formularelemente passt. Shaun Inman beschreibt in seinem Artikel Styling [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.antusblog.de/wp-content/uploads/2009/07/Dateiformular.umgestalten.png"><img class="aligncenter size-full wp-image-1691" title="Ein Dateiformular, welches nicht die Standardoberfläche des Betriebssystems verwendet." src="http://www.antusblog.de/wp-content/uploads/2009/07/Dateiformular.umgestalten.png" alt="Ein Dateiformular, welches nicht die Standardoberfläche des Betriebssystems verwendet." width="500" height="150" /></a>Das Formularelement zum Auswählen einer Datei lässt sich nicht mittels CSS umgestalten, der Browser verwendet für dieses Element immer das Standardaussehen, so wie es vom Betriebssystem vorgegeben ist. Bei der Gestaltung von Formularen ist das natürlich ärgerlich, da das Element meistens nicht zum Aussehen der anderen Formularelemente passt.</p>
<p>Shaun Inman beschreibt in seinem Artikel <a href="http://www.shauninman.com/archive/2007/09/10/styling_file_inputs_with_css_and_the_dom">Styling File Inputs with CSS and the DOM</a> eine Methode diesem Element mittels Java Script und CSS trotzdem ein anderes Aussehen zu verpassen. Wie seine Methode funktioniert, und wie man sie noch verbessern/erweitern kann, erkläre ich in diesem Artikel.</p>
<p><span id="more-1687"></span></p>
<h2>Funktionsweise seiner Methode</h2>
<p>Man erstellt ein Element, welches die Schaltfläche darstellen soll. Dieses Element kann man mit CSS gestalten, ihm beispielsweise mittels der <code>background</code>-Eigenschaft ein Hintergrundbild zuweisen. Innerhalb dieses Elements befindet sich dann das <code>input</code>-Element.</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">label</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;durchsuchen&quot;</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;file&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;datei&quot;</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;datei&quot;</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">label</span>&gt;</span></pre></div></div>

<p>Dieses wird allerdings mittels <code>opacity</code> zu 100% transparent gemacht, so dass man es nicht sieht. Wenn man auf die sichtbare Schaltfläche klickt (also die, die man beliebig mit CSS formatieren kann), klickt man in Wirklichkeit auf die Durchsuchen-Schaltfläche des Eingabeelementes.</p>
<p><a href="http://www.antusblog.de/wp-content/uploads/2009/07/Verstecktes.Eingabefeld.png"><img class="alignright size-full wp-image-1694" title="Verstecktes Eingabefeld" src="http://www.antusblog.de/wp-content/uploads/2009/07/Verstecktes.Eingabefeld.png" alt="Verstecktes Eingabefeld" width="150" height="150" /></a>Die Durchsuchen-Schaltfläche ist allerdings von Betriebssystem zu Betriebssystem verschieden groß. Wenn die Schaltfläche die man selbst gestaltet hat größer ist, könnte es passieren, das man darauf klickt und nichts passiert. Deswegen muss dafür gesorgt werden, das die echte Durchsuchen-Schaltfläche immer unter der Maus ist, wenn die Maus über der &#8220;gefälschten&#8221; Schaltfläche ist. Hier kommt dann Java Script ins Spiel, sobald die Maus über der Schaltfläche ist, wird das <code>input</code>-Element so bewegt, das die Durchsuchen-Schaltfläche unter der Maus ist.</p>
<p>Diese Methode hat allerdings einen Nachteil: Es ist zwar möglich, neben der Schaltfläche noch ein Eingabefeld hinzuzufügen, welches den Dateinamen/Pfad der ausgewählten Datei anzeigt, es ist aber nicht möglich dieses Eingabeelement zu verändern, bzw. anschließend den Wert des <code>input</code>-Elements anzupassen/zu verändern. Das geht bei Dateielementen aus Sicherheitsgründen nicht, denn sonst könnte ein böswilliger Programmierer ja ein verstecktes Dateielement erstellen, welches ohne das der Benutzer davon etwas mitbekommt Dateien von seinem Recher hochlädt.</p>
<p><strong>Vorteile:</strong></p>
<ul>
<li>Dateielemente können an das Aussehen der Webseite/der anderen Formularelemente angepasst werden.</li>
<li>Wenn der Browser des Benutzers kein Java Script unterstützt, sieht der Benutzer einfach das normale Dateielement.</li>
</ul>
<p><strong>Nachteile:</strong></p>
<ul>
<li>Etwas umständlich.</li>
<li>Der Benutzer kann den Pfad zur Datei nicht mehr direkt im Eingabefeld eingeben, er muss die Durchsuchen-Schaltfläche benutzen.</li>
</ul>
<p>Ich habe auch wieder eine Demo-Seite eingerichtet: <a href="/demos/6-durchsuchen-schaltflaeche/umgestalten.html">Demo</a>.</p>
<h2>Benutzung</h2>
<p>Zuerst wird das Skript im <code>head</code>-Bereich eingebunden, dann muss/will man noch die Schaltfläche mit CSS gestalten, außerdem muss das Dateielement sich innerhalb des umgestalteten Elementes befinden. Ein Aufruf von <code>SI.Files.stylizeAll()</code> wendet das Skript dann an.</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;?xml <span style="color: #000066;">version</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;1.0&quot;</span> ?&gt;</span>
<span style="color: #00bbdd;">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;</span>
<span style="color: #00bbdd;">    &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">html</span> xmlns<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://www.w3.org/1999/xhtml&quot;</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">head</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">meta</span> <span style="color: #000066;">http-equiv</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Content-Type&quot;</span> <span style="color: #000066;">content</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/html; charset=UTF-8&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">title</span>&gt;</span>Dateielement umgestalten<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">title</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">style</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/css&quot;</span>&gt;</span>         
            .SI-FILES-STYLIZED label.durchsuchen {
                /* Hier kann die Schaltflaeche gestaltet werden. */
                width:140px;
                height:30px;
                background: url('durchsuchen.png') 0 0 no-repeat;
                display:inline-block;
                overflow:hidden;
                cursor:pointer;
            }
&nbsp;
            .SI-FILES-STYLIZED label.durchsuchen input.datei {
                position:relative;
                height:100%;
                width:auto;
                opacity:0;
                -moz-opacity:0;
                filter:alpha(opacity=0); 
            }
        <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">style</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;si.files.js&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">head</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">form</span> <span style="color: #000066;">action</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;...&quot;</span> <span style="color: #000066;">enctype</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;multipart/form-data&quot;</span> <span style="color: #000066;">method</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;post&quot;</span>&gt;</span>
            <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">label</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;durchsuchen&quot;</span>&gt;</span>
                <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;file&quot;</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;datei&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;datei&quot;</span>&gt;</span>
            <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">label</span>&gt;</span>
            <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;submit&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Hochladen&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
            <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span>&gt;</span>
                SI.Files.stylizeAll();
            <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">form</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">html</span>&gt;</span></pre></div></div>

<p>Das Skript weist dem <code>html</code>-Element die Klasse <code>SI-FILES-STYLIZED</code> zu. Der erste CSS-Selektor des Beispiels ist für die sichtbare Schaltfläche, hier kann diese umgestaltet werden. Der zweite Selektor sorgt dafür das das <code>input</code>-Element nicht sichtbar ist. Anstatt eines <code>label</code>-Elements kann natürlich auch irgendein anderes Element verwendet werden, die Klassennamen sind auch austauschbar. </p>
<h3>Internet Explorer 7</h3>
<p>Der Internet Explorer 7 macht leider ein paar Probleme, das Fenster zum Auswählen einer Datei öffnet sich, egal wo man klickt, nachdem man mit der Maus einmal über dem input-Element war. Glücklicherweise hat jemand namens jxtps eine Lösung für dieses Problem gefunden (siehe Kommentar 29 zum Artikel von Shaun Inman). Um das Problem im IE 7 zu beheben, müssen 3 Zeilen Quelltext nach Zeile 55 der si.files.js hinzugefügt werden.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>51
52
53
54
55
56
57
58
59
60
61
62
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> x <span style="color: #339933;">=</span> e.<span style="color: #660066;">pageX</span> <span style="color: #339933;">-</span> ox<span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> y <span style="color: #339933;">=</span> e.<span style="color: #660066;">pageY</span> <span style="color: #339933;">-</span> oy<span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> w <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">file</span>.<span style="color: #660066;">offsetWidth</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> h <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">file</span>.<span style="color: #660066;">offsetHeight</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">// Fix for IE7+, otherwise the control can get dragged outside despite overflow: hidden;</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>x <span style="color: #339933;">&lt;</span> <span style="color: #CC0000;">0</span> <span style="color: #339933;">||</span> y <span style="color: #339933;">&lt;</span> <span style="color: #CC0000;">0</span> <span style="color: #339933;">||</span> x <span style="color: #339933;">&gt;</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">offsetWidth</span> <span style="color: #339933;">||</span> y <span style="color: #339933;">&gt;</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">offsetHeight</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
	x <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> y <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> h <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> w <span style="color: #339933;">=</span> <span style="color: #CC0000;">30</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">file</span>.<span style="color: #660066;">style</span>.<span style="color: #660066;">top</span>	<span style="color: #339933;">=</span> y <span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span>h <span style="color: #339933;">/</span> <span style="color: #CC0000;">2</span><span style="color: #009900;">&#41;</span>  <span style="color: #339933;">+</span> <span style="color: #3366CC;">'px'</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">file</span>.<span style="color: #660066;">style</span>.<span style="color: #660066;">left</span>	<span style="color: #339933;">=</span> x <span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span>w <span style="color: #339933;">-</span> <span style="color: #CC0000;">30</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">'px'</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<h3>Die ausgewählte Datei anzeigen</h3>
<p>Aus Gründen der Benutzerfreundlichkeit sollte der Benutzer den Namen der ausgewählten Datei auch sehen können. Das geht ganz einfach: Man erstellt ein Element, in welches bei jeder Veränderung am <code>input</code>-Element der Wert von selbigem kopiert wird. Das kann ein Texteingabefeld sein, oder beispielsweise ein <code>span</code>-Element, ich bevorzuge letzteres, denn da der Dateiname eh nicht manuell geändert werden kann ist ein Texteingabefeld für den Benutzer ziemlich  verwirrend.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">&lt;div id=&quot;d&quot;&gt;
&lt;!-- Hier wird das Text-Element mittels JS eingefuegt --&gt;
    &lt;label class=&quot;durchsuchen&quot; id=&quot;durchsuchen&quot;&gt;
        &lt;input type=&quot;file&quot; class=&quot;datei&quot; id=&quot;datei&quot; name=&quot;datei&quot;&gt;
    &lt;/label&gt;
&lt;/div&gt;
<span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;</span>
    SI.<span style="color: #660066;">Files</span>.<span style="color: #660066;">stylizeAll</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>SI.<span style="color: #660066;">Files</span>.<span style="color: #660066;">able</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003366; font-weight: bold;">var</span> anzeige <span style="color: #339933;">=</span> document.<span style="color: #660066;">createElement</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'span'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        anzeige.<span style="color: #660066;">innerHTML</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'Keine Datei ausgewählt.'</span><span style="color: #339933;">;</span>
        anzeige.<span style="color: #660066;">id</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'anzeige'</span><span style="color: #339933;">;</span>
&nbsp;
        document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'d'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">insertBefore</span><span style="color: #009900;">&#40;</span>anzeige<span style="color: #339933;">,</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'durchsuchen'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'datei'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">onchange</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003366; font-weight: bold;">var</span> datei <span style="color: #339933;">=</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'datei'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">value</span><span style="color: #339933;">;</span>
            document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'anzeige'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">innerHTML</span> <span style="color: #339933;">=</span> datei<span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></div></div>

<p>Das Element wird per Java Script erstellt, da Benutzer ohne JavaScript sonst trotzdem neben dem Dateielement noch &#8220;Keine Datei ausgewählt&#8221; stehen hätten. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.antusblog.de/2009/07/04/formulare-datei-element-umgestalten/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Absenden, Zurücksetzen und Verlassen von Formularen</title>
		<link>http://www.antusblog.de/2009/06/15/absenden-zurucksetzen-und-verlassen-von-formularen/</link>
		<comments>http://www.antusblog.de/2009/06/15/absenden-zurucksetzen-und-verlassen-von-formularen/#comments</comments>
		<pubDate>Mon, 15 Jun 2009 20:48:58 +0000</pubDate>
		<dc:creator>Antu</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[Java Script]]></category>
		<category><![CDATA[Absenden]]></category>
		<category><![CDATA[Formular]]></category>
		<category><![CDATA[Schließen]]></category>
		<category><![CDATA[Verlassen]]></category>
		<category><![CDATA[Zurücksetzen]]></category>

		<guid isPermaLink="false">http://www.antusblog.de/?p=1510</guid>
		<description><![CDATA[Manchmal verklickt man sich, oder man überliest in Eile einen Hinweis. Da kann es schon mal passieren, das man ausversehen auf die Zurücksetzen-Schaltfläche anstatt auf die direkt daneben liegende Absenden-Schaltfläche klickt. Oder man schließt versehentlich das falsche Fenster, und alle im Formular eingegebenen Daten müssen noch einmal eingegeben werden. Gerade bei längeren Forenbeiträgen, oder Blog-Artikeln [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.antusblog.de/wp-content/uploads/2009/06/Formular.schliessen.png"><img src="http://www.antusblog.de/wp-content/uploads/2009/06/Formular.schliessen.png" alt="Abfrage vor dem Schließen eines Formulars/einer Seite" title="Abfrage vor dem Schließen eines Formulars/einer Seite" width="380" height="150" class="aligncenter size-full wp-image-1549" /></a>Manchmal verklickt man sich, oder man überliest in Eile einen Hinweis. Da kann es schon mal passieren, das man ausversehen auf die Zurücksetzen-Schaltfläche anstatt auf die direkt daneben liegende Absenden-Schaltfläche klickt. Oder man schließt versehentlich das falsche Fenster, und alle im Formular eingegebenen Daten müssen noch einmal eingegeben werden. Gerade bei längeren Forenbeiträgen, oder Blog-Artikeln ist das sehr ärgerlich. </p>
<p>Ein paar einfache Java Script-Funktionen schaffen da Abhilfe. Vor dem Absenden oder Zurücksetzen eines Formulars kann der Benutzer noch einmal gefragt werden ob er das wirklich tun will. Auch vor dem Verlassen/Schließen der Seite lässt sich eine solche Abfrage erstellen. Außerdem erkläre ich, wie man eine Schaltfläche erst nach einer bestimmten Zeit aktivieren kann.</p>
<p><span id="more-1510"></span></p>
<h2>Zurücksetzen der Formularfelder</h2>
<p>Um dem Benutzer die Möglichkeit zu geben, die Formularfelder wieder auf den Anfangswert zurückzusetzen bzw. sie wieder zu leeren genügt ein <code>input</code>-Element vom Typ <code>reset</code>.</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;reset&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Zur&amp;uuml;cksetzen&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span></pre></div></div>

<p>Mit Java Script ist es allerdings auch möglich, beim Zurücksetzen des Formulars noch weitere Aktionen auszuführen oder das Zurücksetzen besser zu steuern. So ist es beispielsweise möglich nur bestimmte Felder zurückzusetzen oder den Benutzer zu fragen ob er die Daten wirklich zurücksetzen möchte. Dazu trägt man im <code>onreset</code>-Ereignis des <code>form</code>-Elementes die Funktion ein, die beim Zurücksetzen des Formulars ausgeführt werden soll.</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">form</span> <span style="color: #000066;">action</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;...&quot;</span> <span style="color: #000066;">onreset</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;return wirklichZuruecksetzen();&quot;</span>&gt;</span></pre></div></div>

<p>Es ist auch möglich die Funktion einen Wert zurückgeben zu lassen, mit dem man steuern kann ob das Formular auch wirklich zurückgesetzt wird. Gibt die aufgerufene Funktion <code>false</code> zurück wird das Formular nicht zurückgesetzt, bei <code>true</code> wird es zurückgesetzt.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> wirklichZuruecksetzen<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066;">confirm</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'Alle Eingaben loeschen?'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #006600; font-style: italic;">// Anstatt dessen koennte man hier auch nur bestimmte Felder zuruecksetzen und</span>
	<span style="color: #006600; font-style: italic;">// false zurueckgeben.</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h2>Abfrage vor dem Absenden</h2>
<p>Um eine Abfrage vor dem Absenden zu erstellen, trägt man einfach eine Funktion beim <code>onsubmit</code>-Ereignis des <code>form</code>-Elements ein, auch hier entscheidet wieder der Rückgabewert darüber ob das Formular abgesendet wird.</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">form</span> <span style="color: #000066;">action</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;...&quot;</span> <span style="color: #000066;">onsubmit</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;return confirm('Daten abschicken?');&quot;</span>&gt;</span></pre></div></div>

<p>Der Vorteil dieser Methode ist, das sie schnell und einfach programmiert ist, der Nachteil das sie nur funktioniert, wenn der Benutzer Java Script aktiviert hat bzw. sein Browser Java Script unterstützt. Bei wichtigen Formularen (beispielsweise einer Bestellung) ist es empfehlenswert, die Daten erst an eine Zwischenseite zu senden, welche noch einmal alle Eingaben auflistet und auf der noch einmal das Absenden bestätigt werden muss. </p>
<p>Im <code>onsubmit</code>-Ereignis lässt sich übrigens nicht nur eine Abfrage einbauen. Man könnte beispielsweise auch überprüfen ob alle Felder (richtig) ausgefüllt sind, und den Benutzer auf eventuelle Fehler hinweisen/auffordern diese zu korrigieren.</p>
<h2>Verlassen/Schließen des Formulars: Abfrage bzw. Funktion ausführen</h2>
<p>Man kann den Benutzer vor dem Verlassen der aktuellen Seite zu fragen ob er die Seite wirklich verlassen möchte. Dazu kann das <a href="https://developer.mozilla.org/en/DOM/window.onbeforeunload"><code>onbeforeunload</code></a>-Ereignis verwendet werden, welches heutzutage von den meisten Browsern unterstützt wird, obwohl es nicht zum Standard gehört.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">/* Fragt den Benutzer, ob er die Seite wirklich verlassen moechte.
 */</span>
window.<span style="color: #660066;">onbeforeunload</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #006600; font-style: italic;">// Hier koennte man noch abfragen ob bereits Eingaben getaetigt wurden,</span>
	<span style="color: #006600; font-style: italic;">// wenn nicht, braucht man in den meisten Faellen wohl auch keine Nachricht</span>
	<span style="color: #006600; font-style: italic;">// anzeigen.</span>
	<span style="color: #003366; font-weight: bold;">var</span> nachricht <span style="color: #339933;">=</span> <span style="color: #3366CC;">'Sie haben das Formular noch nicht abgesendet, möchten Sie das Fenster trotzdem schließen?'</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #003366; font-weight: bold;">var</span> e <span style="color: #339933;">=</span> e <span style="color: #339933;">||</span> window.<span style="color: #660066;">event</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		e.<span style="color: #660066;">returnValue</span> <span style="color: #339933;">=</span> nachricht<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000066; font-weight: bold;">return</span> nachricht<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
window.<span style="color: #000066;">onload</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #006600; font-style: italic;">// Keine Meldung ausgeben, wenn der Benutzer die Seite ueber die</span>
	<span style="color: #006600; font-style: italic;">// Absenden-Schaltflaeche verlaesst.</span>
	<span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> document.<span style="color: #660066;">forms</span>.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
		document.<span style="color: #660066;">forms</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">onsubmit</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> window.<span style="color: #660066;">onbeforeunload</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">''</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Die dem <code>onbeforeunload</code>-Ereignis zugewiesene Funktion sorgt dafür das der Benutzer beim Schließen des Fensters bzw. beim Verlassen der Seite gefragt wird ob er die Seite wirklich schließen möchte. Damit das geschieht, muss die Nachricht, die angezeigt werden soll in das <code>returnValue</code>-Element von dem Ereignis geschrieben, und als Rückgabewert zurückgegeben werden. Bleibt <code>returnValue</code> leer bzw. wird nichts zurückgegeben, erscheint auch keine Nachricht.</p>
<h2>Absenden-Schaltfläche erst nach Ablauf einer bestimmten Zeit freigeben</h2>
<p><a href="http://www.antusblog.de/wp-content/uploads/2009/06/Abschicken.erst.nach.einer.bestimmten.Zeit.png"><img src="http://www.antusblog.de/wp-content/uploads/2009/06/Abschicken.erst.nach.einer.bestimmten.Zeit.png" alt="Die Abschicken-Schaltfläche ist ausgegraut und zeigt an, dass das Formular erst in 17 Sekunden abgeschickt werden kann." title="Die Abschicken-Schaltfläche ist ausgegraut und zeigt an, dass das Formular erst in 17 Sekunden abgeschickt werden kann." width="140" height="80" class="alignright size-full wp-image-1541" /></a>Es ist möglich die Absenden-Schaltfläche erst nach Ablauf einer bestimmten Zeit zu aktivieren, so dass der Benutzer sie vorher nicht anklicken kann. Das ist beispielsweise in einem Forum sinnvoll, wo der Benutzer nur alle 60 Sekunden einen Beitrag schreiben kann. Der Browser des Benutzers stellt die Schaltfläche ausgegraut da, und zeigt auf der Schaltfläche an wie lange es noch dauert bis das Formular abgesendet werden kann. Die Zeit muss selbstverständlich auch serverseitig überprüft werden, diese Funktion ist nur dazu gedacht, es dem Benutzer einfacher zu machen, zu erkennen wann er auf die Absenden-Schaltfläche klicken kann. Durch das Deaktivieren von Java Script kann die Funktion &#8220;umgangen&#8221; werden, sie stellt also keinen Sicherheitsmechanismus dar!</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">/* Sorgt dafuer, das eine Schaltflaeche erst nach Ablauf einer bestimmten Zeit
 * klickbar wird, kann aber leicht &quot;umgangen&quot; werden.
 */</span>
<span style="color: #003366; font-weight: bold;">function</span> AbsendenENA<span style="color: #009900;">&#40;</span>sf<span style="color: #339933;">,</span> zeit<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> self <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">;</span>
	<span style="color: #003366; font-weight: bold;">var</span> intervall <span style="color: #339933;">=</span> window.<span style="color: #660066;">setInterval</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> self.<span style="color: #660066;">aktualisieren</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">1000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	sf.<span style="color: #660066;">disabled</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
	<span style="color: #003366; font-weight: bold;">var</span> sftext <span style="color: #339933;">=</span> sf.<span style="color: #660066;">value</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">aktualisieren</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>zeit <span style="color: #339933;">&gt;</span> <span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			sf.<span style="color: #660066;">value</span> <span style="color: #339933;">=</span> sftext <span style="color: #339933;">+</span> <span style="color: #3366CC;">'('</span> <span style="color: #339933;">+</span> zeit <span style="color: #339933;">+</span> <span style="color: #3366CC;">')'</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
			sf.<span style="color: #660066;">value</span> <span style="color: #339933;">=</span> sftext<span style="color: #339933;">;</span>
			sf.<span style="color: #660066;">disabled</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
			window.<span style="color: #660066;">clearInterval</span><span style="color: #009900;">&#40;</span>intervall<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		zeit<span style="color: #339933;">--;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">aktualisieren</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
window.<span style="color: #000066;">onload</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #006600; font-style: italic;">// Absenden-Schaltflaeche erst nach einer bestimmten Zeit benutzbar machen</span>
	<span style="color: #003366; font-weight: bold;">new</span> AbsendenENA<span style="color: #009900;">&#40;</span>document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'abschicken'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">20</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Im Beispiel wird eine neue Instanz des AbsendenENA-Objekts erstellt, der erste Parameter ist das Schaltflächen-Objekt (mit der ID <em>abschicken</em>), der zweite die Zeit bis zum Aktivieren, in Sekunden. Die Klasse kann theoretisch an jeder Stelle benutzt werden, im Beispiel wird sie beim <code>onload</code>-Ereignis aufgerufen.</p>
<p>Ich rate dazu, die Funktion nur an Stellen zu verwenden, an denen es dem Benutzer aus technischen (oder auch anderen) Gründen eh nicht möglich wäre das Formular vor Ablauf der Zeit abzuschicken, beispielsweise weil ein Spamschutz das Abschicken serverseitig eh nur alle X Sekunden zulässt. Man kann den Benutzer mit einer solchen Funktion nicht dazu zwingen sich irgendwelche Forenregeln, AGBs, oder sonstwas durchzulesen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.antusblog.de/2009/06/15/absenden-zurucksetzen-und-verlassen-von-formularen/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Dateien hochladen in PHP</title>
		<link>http://www.antusblog.de/2009/06/10/dateien-hochladen-php/</link>
		<comments>http://www.antusblog.de/2009/06/10/dateien-hochladen-php/#comments</comments>
		<pubDate>Wed, 10 Jun 2009 19:17:27 +0000</pubDate>
		<dc:creator>Antu</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Datei]]></category>
		<category><![CDATA[Dateiendung]]></category>
		<category><![CDATA[Formular]]></category>
		<category><![CDATA[hochladen]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[move_uploaded_file]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Validierung]]></category>

		<guid isPermaLink="false">http://www.antusblog.de/?p=1462</guid>
		<description><![CDATA[Es gibt viele Projekte bei denen man dem Benutzer die Möglichkeit geben möchte selbst Dateien auf den Server hochzuladen, beispielsweise bei Bilderhostern, oder Foren, bei denen der Benutzer die Möglichkeit hat Dateien an einen Beitrag anzuhängen. Sowas lässt sich mit PHP problemlos realisieren. In diesem Artikel beschreibe ich, wie man ein Formular zum Hochladen von [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.antusblog.de/wp-content/uploads/2009/06/dateienhochladenformular.png"><img class="aligncenter size-full wp-image-1464" title="Ein Formular zum Auswählen einer Datei" src="http://www.antusblog.de/wp-content/uploads/2009/06/dateienhochladenformular.png" alt="Ein Formular zum Auswählen einer Datei" width="500" height="150" /></a></p>
<p>Es gibt viele Projekte bei denen man dem Benutzer die Möglichkeit geben möchte selbst Dateien auf den Server hochzuladen, beispielsweise bei Bilderhostern, oder Foren, bei denen der Benutzer die Möglichkeit hat Dateien an einen Beitrag anzuhängen. Sowas lässt sich mit PHP problemlos realisieren.</p>
<p>In diesem Artikel beschreibe ich, wie man ein Formular zum <strong>Hochladen von Dateien</strong> erstellt und wie man die Dateien serverseitig mit PHP behandelt. Außerdem erkläre ich wie <strong>mehrere Dateien auf einmal</strong> hochgeladen werden können.</p>
<p><span id="more-1462"></span></p>
<h2>Das Dateiformular</h2>
<p>Zuerst einmal wird ein Formular benötigt, in dem der Benutzer eine Datei auswählen kann. Ein <code>input</code>-Element vom Typ <code>file</code> erstellt ein Eingabefeld und eine Durchsuchen-Schaltfläche, mittels derer der Benutzer eine Datei auswählen kann. Das versteckte <code>input</code>-Element mit dem Namen <code>MAX_FILE_SIZE</code> ist ein Hinweis für den Browser des Benutzers, <code>value</code> gibt in Bytes an, wie groß eine hochgeladene Datei maximal sein darf. Die Größe der Datei muss natürlich serverseitig noch einmal überprüft werden, da manche Browser die Angabe evtl. nicht beachten, und weil sie leicht umgangen werden kann. PHP überprüft zwar selbst, ob die Datei größer als MAX_FILE_SIZE ist, aber da diese Angabe leicht manipuliert werden kann, bietet diese Überprüfung keine Sicherheit.</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">form</span> <span style="color: #000066;">action</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;uploaded.php&quot;</span> <span style="color: #000066;">enctype</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;multipart/form-data&quot;</span> <span style="color: #000066;">method</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;post&quot;</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">fieldset</span>&gt;</span>
		<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">legend</span>&gt;</span>Datei hochladen<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">legend</span>&gt;</span>
		<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">label</span> <span style="color: #000066;">for</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;file&quot;</span>&gt;</span>Bitte eine Datei ausw<span style="color: #ddbb00;">&amp;auml;</span>hlen.<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">label</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">br</span> <span style="color: #66cc66;">/</span>&gt;</span>
		<span style="color: #808080; font-style: italic;">&lt;!-- Hinweis fuer den Browser des Benutzers, maximale Dateigroesse --&gt;</span>
		<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;hidden&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;MAX_FILE_SIZE&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;100000&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
		<span style="color: #808080; font-style: italic;">&lt;!-- Eingabefeld+Durchsuchen-Schaltflaeche --&gt;</span>
		<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;file&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;file&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;beispieldatei&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
		<span style="color: #808080; font-style: italic;">&lt;!-- Schaltflaeche zum Absenden der Datei --&gt;</span>
		<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;submit&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Hochladen&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">fieldset</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">form</span>&gt;</span></pre></div></div>

<p>Die <code>action</code>-Eigenschaft des form-Elements gibt an, an welche Adresse/Datei die Daten übertragen werden sollen. Mit <code>method</code> wird angegeben, wie die Daten übertragen werden sollen, beim POST-Verfahren sendet der Browser eine spezielle POST-Anfrage mit den Daten an den Server. Die Eigenschaft <code><a href="http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4">enctype</a></code> gibt die Kodierung der übertragenen Daten an, hier muss man <code>multipart/form-data</code> verwenden.</p>
<h2>Die hochgeladene Datei verarbeiten</h2>
<p>Wenn der Benutzer das Formular absendet wird die unter <code>action</code> angegebene Seite aufgerufen, dabei wird die Datei vom Browser an den Server gesendet. Die Datei wird vom Server in einem temporären Verzeichnis gespeichert. Im PHP-Skript muss diese nun verarbeitet und an ihren Bestimmungsort verschoben werden.<br />
PHP sammelt die wichtigsten Informationen über die Datei im autoglobalen Feld <code>$_FILES</code>. Für jede hochgeladene Datei wird ein Element mit dem gleichen Namen wie das input-Element des Formulars (im Beispiel: beispieldatei) in diesem Feld angelegt. Auch dieses Element ist wieder ein Feld, mit folgenden Elementen:</p>
<table>
<thead>
<tr>
<th>Element</th>
<th>Inhalt</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>Der Name der Datei auf dem Rechner des Benutzers</td>
</tr>
<tr>
<td>type</td>
<td>MIME-Typ der Datei, z.B. &#8220;image/png&#8221;</td>
</tr>
<tr>
<td>tmp_name</td>
<td>Der Pfad und Name, unter der die Datei gespeichert wurde (im temporären Verzeichnis), beispielsweise &#8220;/tmp/phpKnTtNy&#8221;.</td>
</tr>
<tr>
<td>error</td>
<td>Der Fehlercode, mittels diesem kann überprüft werden ob beim Hochladen ein Fehler aufgetreten ist.</td>
</tr>
<tr>
<td>size</td>
<td>Die Größe der Datei, in Bytes.</td>
</tr>
</tbody>
</table>
<p><strong></strong><div id="attachment_1522" class="wp-caption alignright" style="width: 230px"><a href="http://www.antusblog.de/wp-content/uploads/2009/06/FILES.Feld.Inhalt.png"><img src="http://www.antusblog.de/wp-content/uploads/2009/06/FILES.Feld.Inhalt.png" alt="Beispiel: So könnte der Inhalt von $_FILES nach dem erfolgreichen hochladen einer Datei aussehen." title="Beispiel: So könnte der Inhalt von $_FILES nach dem erfolgreichen hochladen einer Datei aussehen." width="220" height="233" class="size-full wp-image-1522" /></a><p class="wp-caption-text">Beispiel: So könnte der Inhalt von $_FILES nach dem erfolgreichen hochladen einer Datei aussehen.</p></div>Anhand dieser Daten kann die Datei erstmal validiert werden, so können Dateien die zu groß oder zu klein sind, den falschen Dateityp/Endung haben, aussortiert werden. Dateien mit der Endung .php sollten auf jeden Fall aussortiert bzw. wenigstens umbenannt werden, sonst können nämlich PHP-Dateien hochgeladen werden die auch vom PHP-Interpreter ausgeführt werden würden! </p>
<h3>Verschieben der Datei</h3>
<p>Um die Datei nun weiter zu bearbeiten bzw. sie zu speichern, muss sie vom temporären Verzeichnis in das gewünschte Zielverzeichnis verschoben werden. Nach der Ausführung des Skripts wird die Datei gelöscht, falls sie sich noch im temporären Verzeichnis befindet. Um eine Datei nicht zu speichern, genügt es also, sie einfach nicht aus dem temporären Verzeichnis rauszuholen.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$zielverzeichnis</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'./hochgeladen/'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$_FILES</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'beispieldatei'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'error'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">!=</span> UPLOAD_ERR_OK<span style="color: #009900;">&#41;</span>
	<span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Ein Fehler ist aufgetreten.'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">move_uploaded_file</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_FILES</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'beispieldatei'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'tmp_name'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> 
                       <span style="color: #000088;">$zielverzeichnis</span> <span style="color: #339933;">.</span> <span style="color: #990000;">basename</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_FILES</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'beispieldatei'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'name'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Datei wurde hochgeladen!&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Ein Fehler ist aufgetreten!&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Zuerst wird die error-Variable überprüft, wenn ein Fehler aufgetreten ist, bricht das Skript ab. Anschließend wird die Datei mittels <a href="http://de2.php.net/manual/de/function.move-uploaded-file.php"><code>move_uploaded_file($datei, $ziel)</code></a> in das Zielverzeichnis verschoben. Die Funktion überprüft ob es sich bei der übergebenen Datei um eine hochgeladene Datei handelt, ist das nicht der Fall, wird sie nicht verschoben und es wird <code>false</code> zurückgegeben. Konnte die Datei aus irgendeinem Grund nicht verschoben werden, wird ebenfalls <code>false</code> zurückgegeben, sowie eine Warnung ausgegeben. Die Zieldatei wird überschrieben, wenn sie bereits existiert.</p>
<h4>Wozu der basename-Aufruf?</h4>
<p>Das Beispielskript speichert die Datei unter dem selben Namen, den sie auch auf dem Rechner des Benutzers hat. Die <a href="http://de2.php.net/manual/de/function.basename.php"><code>basename($pfad)</code></a>-Funktion extrahiert den Dateinamen einer Datei aus einer Pfadangabe.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">echo</span> <span style="color: #990000;">basename</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;/etc/passwd&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// Ausgabe: passwd</span></pre></div></div>

<p>Durch den <code>basename</code>-Aufruf wird sichergestellt, das es sich bei dem Dateinamen wirklich um einen Dateinamen und nicht um einen Pfad handelt. Ohne diese Überprüfung könnten böswillige Benutzer möglicherweise dafür sorgen das ihre Dateien in anderen Verzeichnissen als im Zielverzeichnis landen (Sicherheitslücke!).</p>
<h3>Die Datei validieren</h3>
<p>Um zu verhindern, das Benutzer Dateien hochladen, die dem Server oder anderen Benutzern schaden könnten , oder aus anderen Gründen unerwünscht sind, empfiehlt es sich eine hochgeladene Datei erst zu überprüfen, bevor sie verschoben wird.</p>
<ul>
<li>Die <strong>Dateigröße</strong>. Je nachdem wie die hochgeladenen Dateien verwendet werden, sollte man überprüfen, das der Benutzer keine unsinnig großen (oder kleinen) Dateien hochlädt. Der Speicherplatz auf dem Server ist schließlich begrenzt. Die Variable <code>$_FILES[...]['size']</code> kann hierzu verwendet werden.</li>
<li>Die <strong>Dateiendung</strong> bzw. der <strong>MIME-Typ</strong>. Oft sind nur bestimmte Arten von Dateien erwünscht, beispielsweise Bilder bei einem Bilderhoster. Unpassende Dateitypen können aussortiert werden. Dateien mit der Endung <code>.php</code> bzw. <code>.php3</code>/<code>.php4</code>/<code>.php5</code>/usw. sollten ebenfalls aussortiert werden, bzw. die Dateiendung sollte geändert werden (beispielsweise zu .phps), ansonsten können die Benutzer ausführbare PHP-Dateien hochladen, was in den meisten Fällen unerwünscht sein dürfte (Sicherheitslücke). Hierzu können die Variablen <code>$_FILES[...]['type']</code> (MIME-Typ) und <code>$_FILES[...]['name']</code> (Dateiname) verwendet werden. Mit folgender Funktion lässt sich die Dateiendung aus dem Dateinamen ermitteln:

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> endungErmitteln<span style="color: #009900;">&#40;</span><span style="color: #000088;">$dateiname</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">false</span> <span style="color: #339933;">!==</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$punkt</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strrpos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$dateiname</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'.'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">strlen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$dateiname</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #000088;">$punkt</span><span style="color: #009900;">&#41;</span>
			<span style="color: #b1b100;">return</span> <span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$dateiname</span><span style="color: #339933;">,</span> <span style="color: #000088;">$punkt</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #666666; font-style: italic;">// Keine Dateiendung</span>
	<span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Es ist noch zu beachten, das es Dateien ohne Endung gibt, und das Dateiendungen in allen möglichen Formen von Groß- und Kleinschreibung vorkommen können (Bsp. Bild.JpEg).</li>
<li>Der <strong>Dateiname</strong>. Der Name der Datei kann auf nicht erwünschte Zeichen überprüft werden, außerdem könnte man überprüfen ob der Dateiname nicht zu lang ist.</li>
<li><strong>Viren</strong> und andere <strong>Schädlinge</strong>. Ein Benutzer könnte (un-)absichtlich eine Datei hochladen die einen Virus bzw. einen Wurm o.Ä. enthält. Es gibt Erweiterungen für PHP, die es einem ermöglichen eine Datei auf solche Schadprogramme zu überprüfen.
<p style="padding-left:30px;"><a href="http://www.howtoforge.de/howto/wie-man-hoch-geladene-dateien-automatisch-auf-viren-uberpruft-mit-php-clamavlib">Wie man hochgeladene Dateien automatisch auf Viren überprüft mit php-clamavlib</a></p>
</li>
</ul>
<h3>Mögliche Fehler</h3>
<p>Beim Hochladen von Dateien können auch Fehler auftreten, deshalb enthält das <code>$_FILES</code>-Feld im Dateielement auch ein Element namens <code>error</code>, welches angibt ob ein Fehler aufgetreten ist, bzw. um welchen Fehler es sich handelt.</p>
<h4>Mögliche Fehlercodes in $_FILES[...]['error']</h4>
<p>Mit folgenden Fehlercodes kann der <code>error</code>-Wert verglichen werden, um herauszufinden, was für ein Fehler aufgetreten ist.</p>
<table>
<thead>
<tr>
<th>Zahl</th>
<th>Fehlercode</th>
<th>Bedeutung</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td>UPLOAD_ERR_OK</td>
<td>Kein Fehler, die Datei wurde erfolgreich hochgeladen.</td>
</tr>
<tr>
<td>1</td>
<td>UPLOAD_ERR_INI_SIZE</td>
<td>Die Datei ist größer als <a href="http://de2.php.net/manual/en/ini.core.php#ini.upload-max-filesize">upload_max_filesize</a>, einer Option in der Konfigurationsdatei von PHP.</td>
</tr>
<tr>
<td>2</td>
<td>UPLOAD_ERR_FORM_SIZE</td>
<td>Die Datei ist größer, als im Formular mittels MAX_FILE_SIZE angegeben.</td>
</tr>
<tr>
<td>3</td>
<td>UPLOAD_ERR_PARTIAL</td>
<td>Die Datei wurde nur teilweise hochgeladen.</td>
</tr>
<tr>
<td>4</td>
<td>UPLOAD_ERR_NO_FILE</td>
<td>Es wurde keine Datei hochgeladen.</td>
</tr>
<tr>
<td>6</td>
<td>UPLOAD_ERR_NO_TMP_DIR</td>
<td>Es gibt kein temporäres Verzeichnis, unter dem die Datei abgelegt werden könnte. <em>Erst ab PHP 5.0.3</em></td>
</tr>
<tr>
<td>7</td>
<td>UPLOAD_ERR_CANT_WRITE</td>
<td>Die Datei konnte nicht erstellt werden, bzw. konnte nicht auf das Speichermedium (Festplatte) geschrieben werden. <em>Erst ab PHP 5.1.0</em></td>
</tr>
<tr>
<td>8</td>
<td>UPLOAD_ERR_EXTENSION</td>
<td>Der Hochladevorgang wurde durch eine PHP-Erweiterung gestoppt. <em>Erst ab PHP 5.2.0</em></td>
</tr>
</tbody>
</table>
<p>Die Überprüfung auf Fehler könnte beispielsweise so aussehen:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$fehlercode</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_FILES</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'beispieldatei'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'error'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$fehlercode</span> <span style="color: #339933;">!=</span> UPLOAD_ERR_OK<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;h2&gt;Beim Hochladen ist ein Fehler aufgetreten!&lt;/h2&gt;'</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">switch</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fehlercode</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">case</span> UPLOAD_ERR_INI_SIZE<span style="color: #339933;">:</span>
		<span style="color: #b1b100;">case</span> UPLOAD_ERR_FORM_SIZE<span style="color: #339933;">:</span> 
			<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Die Datei ist zu gro&amp;szlig;.'</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">case</span> UPLOAD_ERR_PARTIAL<span style="color: #339933;">:</span>
			<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Die Datei wurde nur teilweise hochgeladen.'</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">case</span> UPLOAD_ERR_NO_FILE<span style="color: #339933;">:</span>
			<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Es wurde keine Datei hochgeladen.'</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">default</span><span style="color: #339933;">:</span>
			<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Ein interner Fehler ist aufgetreten.'</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Eine E-Mail wurde an den Administrator geschickt.'</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Bitte versuchen Sie es zu einem späteren Zeitpunkt nochmal.'</span><span style="color: #339933;">;</span>
			<span style="color: #666666; font-style: italic;">// E-Mail mit dem Fehlercode an den Admin schicken [...] ;-)</span>
			<span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h4>Optionen in der php.ini</h4>
<p>Die Option <code><a href="http://de2.php.net/manual/en/ini.core.php#ini.upload-max-filesize">upload_max_filesize</a></code> gibt an, wie groß die Dateien die hochgeladen werden, zusammen maximal sein dürfen. Es wird also beim Hochladen mehrerer Dateien nicht überprüft wie groß die einzelnen Dateien sind, sondern wie groß sie alle zusammen sind. Die Option <code><a href="http://de2.php.net/manual/en/ini.core.php#ini.post-max-size">post_max_size</code></a> muss ebenfalls beachtet werden, da die Dateien über das POST-Verfahren hochgeladen werden, limitiert auch diese Option die Gesamtgröße der Dateien die hochgeladen werden. Es empfiehlt sich den Wert dieser Option etwas höher einzustellen, da noch andere Formulardaten übertragen werden. </p>
<p>Außerdem gibt es noch die Option <code><a href="http://de2.php.net/manual/en/ini.core.php#ini.file-uploads">file_uploads</a></code>, ist diese auf off eingestellt, ist es gar nicht möglich, Dateien hochzuladen.</p>
<p>Zusätzlich muss auch die <code><a href="http://de2.php.net/manual/de/info.configuration.php#ini.max-input-time">max_input_time</a></code> beachtet werden, welche angibt wie lange PHP für das Auswerten von POST/GET/REQUEST-Daten brauchen darf. Da das Hochladen von Dateien durchaus lange dauern kann, beispielsweise wenn die Datei sehr groß ist, oder wenn der Benutzer eine langsame Verbindung hat (ISDN, langsame DSL-Verbindungen).</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">; Ist das Hochladen von Dateien erlaubt?
file_uploads = On 
; Maximale Gesamtgroesse der Dateien die hochgeladen werden
; K = Kilobyte, M = Megabyte, G = Gigabyte.
upload_max_filesize = 100M 
; Maximale Groesse mittels des POST-Verfahrens uebermittelter Daten
post_max_size = 102M 
; Wie lange darf PHP fuer die Auswertung von uebermittelten Daten brauchen?
max_input_time = 3600 ; 1 Stunde</pre></div></div>

<p>Wenn die Dateien noch weiter verarbeitet werden, also beispielsweise Vorschaubilder erstellt werden o.Ä. muss eventuell auch noch die <code><a href="http://de2.php.net/manual/de/info.configuration.php#ini.max-execution-time">max_execution_time</a></code> beachtet werden. Diese gibt an, wie lange PHP-Skripte rechnen dürfen bzw. wie viel Prozessorzeit sie verbrauchen dürfen bevor sie beendet werden. Die Zeit die für Systemaufrufe, Datenbankabfragen o.Ä. aufgewendet wird, fließt nicht in die Berechnung mit ein, sondern nur die Zeit in der das PHP-Skript selbst ausgeführt wird.</p>
<h2>Mehrere Dateien auf einmal hochladen</h2>
<p>Es ist auch problemlos möglich, mehrere Dateien auf einmal hochzuladen. Dazu fügt man im Formular einfach weitere <code>input</code>-Elemente vom Typ <code>file</code> hinzu. Eine kleine Besonderheit gibt es allerdings zu beachten: Wenn man den Elementen einfach unterschiedliche Namen gibt, werden für jedes Element auch Elemente im <code>$_FILES</code>-Feld erstellt. Wenn man alle Elemente gleich benennt, muss hinter dem Namen <code>[]</code> stehen, das sieht dann z.B. so aus:</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;file&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;file&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;datei[]&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;file&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;file&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;datei[]&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span></pre></div></div>

<p>In diesem Fall würde PHP nur ein Element im <code>$_FILES</code>-Feld erstellen, die Unterelemente davon (name, size, type, etc.) hätten dann aber mehrere Werte/Elemente.<br />
<a href="http://www.antusblog.de/wp-content/uploads/2009/06/inhaltvonfiles.png"><img src="http://www.antusblog.de/wp-content/uploads/2009/06/inhaltvonfiles.png" alt="Inhalt von $_FILES" title="Inhalt von $_FILES" width="512" height="532" class="aligncenter size-full wp-image-1502" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.antusblog.de/2009/06/10/dateien-hochladen-php/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Elemente ein- und ausblenden</title>
		<link>http://www.antusblog.de/2009/04/28/elemente-ein-und-ausblenden/</link>
		<comments>http://www.antusblog.de/2009/04/28/elemente-ein-und-ausblenden/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 18:27:15 +0000</pubDate>
		<dc:creator>Antu</dc:creator>
				<category><![CDATA[Java Script]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Bildergalerie]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Effekte]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Transparente Elemente]]></category>

		<guid isPermaLink="false">http://antusblog.de/?p=561</guid>
		<description><![CDATA[Wie man HTML-Elemente mittels CSS transparent machen kann habe ich ja bereits in diesem Artikel beschrieben. In diesem Artikel erkläre ich wie man mit JavaScript Elemente ein- und ausblenden kann. Solche Effekte eigenen sich sehr gut zum Beispiel für Bildergalerien, Fehlermeldungen oder dynamisch nachgeladene Inhalte. Per JavaScript CSS-Eigenschaften verändern Jedes erlaubte Attribut eines HTML-Elements stellt [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://antusblog.de/wp-content/uploads/2009/04/bild.png"><img src="http://antusblog.de/wp-content/uploads/2009/04/bild-150x150.png" alt="Bildergalerie" title="Bildergalerie" width="150" height="150" class="alignright size-thumbnail wp-image-960" /></a>Wie man HTML-Elemente mittels CSS transparent machen kann habe ich ja bereits in <a href="http://antusblog.de/2009/03/19/transparente-farben-und-elemente-mit-css/" target="_blank">diesem Artikel</a> beschrieben. In diesem Artikel erkläre ich wie man mit JavaScript Elemente ein- und ausblenden kann. Solche Effekte eigenen sich sehr gut zum Beispiel für Bildergalerien, Fehlermeldungen oder dynamisch nachgeladene Inhalte.<br />
<span id="more-561"></span></p>
<h2>Per JavaScript CSS-Eigenschaften verändern</h2>
<p>Jedes erlaubte Attribut eines HTML-Elements stellt auch eine DOM-Eigenschaft dieses Elements dar. Der Zugriff auf die CSS-Eigenschaften eines Elements ist also über die Eigenschaft <code>style</code> möglich. Die einzelnen CSS-Eigenschaften sind wiederum Eigenschaften von <code>style</code>.</p>
<p>Ein Beispiel:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">// Text im HTML-Element mit der ID beschreibung rot färben</span>
document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'beschreibung'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">style</span>.<span style="color: #660066;">color</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'red'</span><span style="color: #339933;">;</span></pre></div></div>

<p>Dabei muss man beachten das Eigenschaften die einen Bindestrich enthalten etwas anders geschrieben werden. Bei solchen Eigenschaften wird anstelle des Bindestrichs einfach der nächste Buchstabe großgeschrieben.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">// text-decoration:line-through;</span>
document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'beschreibung'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">style</span>.<span style="color: #660066;">textDecoration</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'line-through'</span><span style="color: #339933;">;</span></pre></div></div>

<h2>Deckkraft mit JavaScript ändern</h2>
<p>Um die Deckkraft eines Elements mit JavaScript zu verändern muss man einfach über die <code>style</code>-Eigenschaft den entsprechenden CSS-Eigenschaften neue Werte zuweisen. <code>MozOpacity</code> für Mozilla, <code>KhtmlOpacity</code> für Webkit, <code>filter</code> für den Internet Explorer und <code>opacity</code> für neuere Browser. Folgende Funktion tut genau das. Der erste Parameter ist die ID des HTML-Elements dessen Deckkraft geändert werden soll und der zweite Parameter ist ein Wert von 0 (komplett durchsichtig) bis 100 (voll sichtbar).</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> aendereDeckkraft<span style="color: #009900;">&#40;</span>id<span style="color: #339933;">,</span> transparenz<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> style <span style="color: #339933;">=</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span>id<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">style</span><span style="color: #339933;">;</span>
	style.<span style="color: #660066;">filter</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;alpha(opacity=&quot;</span> <span style="color: #339933;">+</span> transparenz <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;)&quot;</span><span style="color: #339933;">;</span>
	transparenz <span style="color: #339933;">/=</span> <span style="color: #CC0000;">100</span><span style="color: #339933;">;</span>
	style.<span style="color: #660066;">opacity</span> <span style="color: #339933;">=</span> transparenz<span style="color: #339933;">;</span>
	style.<span style="color: #660066;">MozOpacity</span> <span style="color: #339933;">=</span> transparenz<span style="color: #339933;">;</span>
	style.<span style="color: #660066;">KhtmlOpacity</span> <span style="color: #339933;">=</span> transparenz<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><code>Filter</code> erwartet einen Wert von 0-100, die anderen 3 Eigenschaften erwarten einen Wert zwischen 0 und 1. Deswegen wird der Wert der Variable <code>transparenz</code> durch 100 geteilt nachdem <code>filter</code> der neue Wert zugewiesen wurde.</p>
<h2>Etwas langsamer</h2>
<p>Es sieht natürlich viel besser aus wenn sich die Deckkraft nicht schlagartig ändert sondern langsam von einem Zustand in den anderen übergeht. Dazu verringert bzw. erhöht man einfach in kurzen Zeitabständen immer wieder die Deckkraft bis der gewünschte Wert erreicht ist. Dafür eignet sich die Funktion <a href="http://de.selfhtml.org/javascript/objekte/window.htm#set_timeout" target="_blank">setTimeout</a> recht gut.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> aendereSichtbarkeit<span style="color: #009900;">&#40;</span>id<span style="color: #339933;">,</span> anfang<span style="color: #339933;">,</span> ende<span style="color: #339933;">,</span> zeit<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> schritte <span style="color: #339933;">=</span> Math.<span style="color: #660066;">abs</span><span style="color: #009900;">&#40;</span>anfang <span style="color: #339933;">-</span> ende<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>schritte <span style="color: #339933;">==</span> <span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #000066; font-weight: bold;">return</span><span style="color: #339933;">;</span>
	<span style="color: #003366; font-weight: bold;">var</span> geschwindigkeit <span style="color: #339933;">=</span> Math.<span style="color: #660066;">round</span><span style="color: #009900;">&#40;</span>zeit <span style="color: #339933;">/</span> schritte<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;=</span> schritte<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>anfang <span style="color: #339933;">&gt;</span> ende<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #003366; font-weight: bold;">var</span> neu <span style="color: #339933;">=</span> anfang <span style="color: #339933;">-</span> i<span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
		<span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span> <span style="color: #003366; font-weight: bold;">var</span> neu <span style="color: #339933;">=</span> anfang <span style="color: #339933;">+</span> i<span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
		setTimeout<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;aendereDeckkraft('&quot;</span> <span style="color: #339933;">+</span> id <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;', &quot;</span> <span style="color: #339933;">+</span> neu <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;)&quot;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">*</span> geschwindigkeit<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Der erste Parameter der Funktion gibt wieder die ID des HTML-Elements an, Parameter 2 und 3 den Start- und Endwert für die Deckkraft und der vierte Parameter legt fest wie lange es dauern soll die Deckkraft zu ändern (in Millisekunden).</p>
<h2>Verblassen, Sichtbar machen, Sichtbarkeit wechseln</h2>
<p>Um ein Element verblassen zu lassen kann diese Funktion verwendet werden.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> verblassen<span style="color: #009900;">&#40;</span>id<span style="color: #339933;">,</span> zeit<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> aktuell <span style="color: #339933;">=</span> aktuelleSichtbarkeit<span style="color: #009900;">&#40;</span>id<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	aendereSichtbarkeit<span style="color: #009900;">&#40;</span>id<span style="color: #339933;">,</span> aktuell<span style="color: #339933;">,</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> zeit<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Die Funktion um ein Element wieder sichtbar zu machen ist ähnlich.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> sichtbarMachen<span style="color: #009900;">&#40;</span>id<span style="color: #339933;">,</span> zeit<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> aktuell <span style="color: #339933;">=</span> aktuelleSichtbarkeit<span style="color: #009900;">&#40;</span>id<span style="color: #339933;">,</span> <span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	aendereSichtbarkeit<span style="color: #009900;">&#40;</span>id<span style="color: #339933;">,</span> aktuell<span style="color: #339933;">,</span> <span style="color: #CC0000;">100</span><span style="color: #339933;">,</span> zeit<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Wenn man die Deckkraft wechseln möchte (nicht voll sichtbare Elemente werden zu 100% sichtbar, sichtbare werden unsichtbar), kann man diese Funktion benutzen:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> wechseln<span style="color: #009900;">&#40;</span>id<span style="color: #339933;">,</span> zeit<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> aktuell <span style="color: #339933;">=</span> aktuelleSichtbarkeit<span style="color: #009900;">&#40;</span>id<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>aktuell <span style="color: #339933;">==</span> <span style="color: #CC0000;">100</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		aendereSichtbarkeit<span style="color: #009900;">&#40;</span>id<span style="color: #339933;">,</span> <span style="color: #CC0000;">100</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> zeit<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
		aendereSichtbarkeit<span style="color: #009900;">&#40;</span>id<span style="color: #339933;">,</span> aktuell<span style="color: #339933;">,</span> <span style="color: #CC0000;">100</span><span style="color: #339933;">,</span> zeit<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h3>Die aktuelle Deckkraft eines Elements herausfinden</h3>
<p>Will man herausfinden welche Deckkraft ein Element hat, kann diese Funktion benutzt werden.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> aktuelleSichtbarkeit<span style="color: #009900;">&#40;</span>id<span style="color: #339933;">,</span> vorgabe<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> vorgabe <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>vorgabe <span style="color: #339933;">==</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">?</span> <span style="color: #CC0000;">100</span> <span style="color: #339933;">:</span> vorgabe<span style="color: #339933;">;</span>
	<span style="color: #003366; font-weight: bold;">var</span> aktuell <span style="color: #339933;">=</span> parseFloat<span style="color: #009900;">&#40;</span>document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span>id<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">style</span>.<span style="color: #660066;">opacity</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>isNaN<span style="color: #009900;">&#40;</span>aktuell<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> aktuell <span style="color: #339933;">=</span> vorgabe <span style="color: #339933;">/</span> <span style="color: #CC0000;">100</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
&nbsp;
	aktuell <span style="color: #339933;">=</span> aktuell <span style="color: #339933;">*</span> <span style="color: #CC0000;">100</span><span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">return</span> aktuell<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Die Funktion überprüft allerdings nur die CSS-Eigenschaft opacity, wenn die Deckkraft vorher mit <code>aendereDeckkraft</code> geändert wurde funktioniert das immer, da die Funktion diese Eigenschaft verändert. Es gibt aber noch andere Möglichkeiten Elemente transparent/unsichtbar zu machen (<code>visibility</code>, oder proprietäre Eigenschaften wie <code>-moz-opacity</code>). Man sollte die Funktion also nur benutzen um die Deckkraft von Elementen abzufragen die mit den hier beschriebenen Funktionen geändert wurde. Wenn <code>opacity</code> keinen Wert hat wird, falls angegeben, der Wert des Parameters <code>vorgabe</code> zurückgegeben, ansonsten wird eine Deckkraft von 100% angenommen.</p>
<h2>Beispielseite</h2>
<p>Ich habe wieder eine Beispielseite eingerichtet auf der man die in diesem Artikel beschriebenen Effekte ausprobieren kann.</p>
<p style="padding-left:30px;">
<a href="http://antusblog.de/demos/2-elemente-ein-und-ausblenden/verblassen.html">Zur Beispielseite</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.antusblog.de/2009/04/28/elemente-ein-und-ausblenden/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

