Portal > Foren > Ankündigungen, News und Feedback > Tutorials > [PHP] Formulare verstehen und auswerten
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 21.03.2006, 13:27 Nach oben    #1
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.653
Standard [PHP] Formulare verstehen und auswerten

Formulare verstehen und auswerten

Dieses Tutorial befasst sich mit der einfachen Auswertung von Formularen jeglicher Art. Es wird kurz erklärt wie ein Formular aussieht und welche Möglichkeiten es gibt.
Ziel ist es, Wissen über Formulare und deren Arbeitsweise zu vermitteln sowie anhand einfacher Beispiele den Umgang mit Formularen zu zeigen.

Kapitel:
  1. Einführung
  2. Übertragungsmethoden POST und GET
  3. Erstellen eines Formulars
  4. Abrufen der Formulardaten

Geändert von Jann Hendrik (09.01.2008 um 13:46 Uhr)
WarrenFaith ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.03.2006, 13:58 Nach oben    #2
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.653
Standard

1. Einführung

Kaum eine Internetseite kommt heutzutage ohne Formulare aus. Sei es um es dem Besucher zu erlauben Kontakt mit dem Webmaster aufzunehmen oder einen Account bei dem Anbieter einer Dienstleistung zu erstellen. Die Verwendungsmöglichkeiten sind vielfältig.
Ein Formular selbst ist nichts weiter als eine Definition eines Bereichs, in der verschiedenste Elemente wie Buttons oder Eingabefelder auf Wunsch ausgewertet werden können. Formulare dienen daher der Interaktion einer Webseite mit dem Besucher.

Stellen wir uns einfach mal folgendes vor:
Ihr habt eine eigene Homepage und wollt dort regelmäßig über euer Leben berichten. Dazu habt ihr euch einen Bereich erstellt, in dem ihr Texte beliebiger Länge veröffentlichen wollt. Bisher habt ihr nur einen Eintrag, den ihr direkt im HTML-Code geschrieben habt. Das mag für den Anfang noch gehen, aber stellt euch die Seite eines Nachrichtendienstes vor. Dort müsste dann jeder Redakteur, der etwas veröffentlichen will, gute Kenntnisse in HTML haben um dies zu tun. Dazu kommt das Problem, mit den alten Nachrichten. Löschen geht nicht, da die Einträge sonst verloren wären und Archivieren ist sehr umständlich.
Die Lösung dafür ist einfach: Über ein Formular und den dazu passenden Elementen kann jeder Redakteur schnell und leicht seinen Beitrag abschicken und dieser wird dann gespeichert und auf der Seite angezeigt.

Wie das geht würde hier zu weit führen, weshalb wir uns erstmal nur mit der Auswertung der Formulare beschäftigen.

Schauen wir uns also als nächstes an, wie ein Formular erstellt wird.

Geändert von WarrenFaith (21.03.2006 um 17:34 Uhr)
WarrenFaith ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.03.2006, 15:36 Nach oben    #3
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.653
Standard

2. Übertragungsmethoden POST und GET

Formulare nutzen eine von zwei Übertragungsmethoden: POST oder GET.
POST: Übergabe der Daten im Header ohne Ausgabe in der URL
GET: Übergabe der Daten im Header mit Ausgabe in der URL

Die mittels GET in die URL eingetragenen Variablen und ihre Werte sind sehr leicht als solche erkennbar und haben folgendes Aufbaumuster:
Code:
[Identifier][Variablenname]=[Wert der Variable]
Beispiel:
Nehmen wir zuerst eine einfache URL: http://www.domain.de/index.php
Die erste Variable $var1 mit dem Wert "wert1" würde an die URL gehängt so aussehen:
Code:
http://www.domain.de/index.php?var1=wert1
Alle Variablen hinter der ersten werden nicht mehr mit ? (Fragezeichen) eingeleitet sondern mit dem & (Kaufmannsund).
Mit 2 Variablen in der URL könnte dann so aussehen:
Code:
http://www.domain.de/index.php?var1=wert1&var2=wert2
Damit hätte das Skript 2 Variablen ($var1 und $var2) mit den dazugehörigen Werten (wert1 und wert2).

Kritische Daten wie beim Login (z.B. das Password) sollten daher nicht mit GET, sondern mit POST übertragen werden, da die URL verständlicherweise leicht veränderbar ist. Nur wenn es ausdrücklich erwünscht ist, dass Variablen über die URL verfügbar sind (z.B. bei Suchmaschinenergebnissen, Webshopsartikeln), sollte man auf die GET-Methode zurückgreifen. Ansonsten ist die POST-Methode zu bevorzugen.

Ein weiterer wichtiger Punkt für Formulare ist die PHP-Einstellung in der php.ini betreffend register_globals. Was das ist und was es bewirkt kann hier nachgelesen werden.

Weiterführende Hinweise sind dem Tutorial von Jann Hendrik zu entnehmen.

Geändert von Jann Hendrik (09.01.2008 um 13:47 Uhr)
WarrenFaith ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.03.2006, 16:29 Nach oben    #4
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.653
Standard

3. Erstellen eines Formulars

Nun beginnt endlich der praktische Teil. Wie ist also ein Formular aufgebaut?
HTML besitzt ein Formulartag namens <form> welches die für uns 2 wichtigsten Attribute "method" und "action" hat. Anhand der Attributnamen ist erkenntbar, dass bei "method" nach POST oder GET verlangt wird und bei "action" die gewünschte Aktion angeben werden muss.
Ein kleines Beispiel:
HTML-Code:
<form action="index.php" method="GET">
</form> 
Damit ein Formular abgeschickt werden kann, brauchen wir natürlich einen Button.
HTML-Code:
<form action="index.php" method="GET">
<input name="sendebutton" type="submit" value="Senden"/>
</form> 
Um nicht jedes Element einzeln anzuführen, nehmen wir jetzt ein Formular mit allen Elementen:
HTML-Code:
<form action="index.php" method="GET">

Textfeld:
<input name="textfeld" type="text" value=""/><br/>

Passwordfeld:
<input name="passwordfeld" type="password" value=""/><br/>

Textarea:
<textarea name="textarea" rows="5" span="5"/>Dass is'n Textarea</textarea><br/>

Dropdown:
<select name="dropdown" size="1">
	<option value="1">Auswahl 1</option>
	<option value="2">Auswahl 2</option>
	<option value="3">Auswahl 3</option>
</select><br/>

Radiobutton:<br/>
<input type="radio" name="radiobutton" value="1"/> Radio1<br/>
<input type="radio" name="radiobutton" value="2"/> Radio2<br/>
<input type="radio" name="radiobutton" value="3"/> Radio3<br/>

Checkbox:<br/>
<input type="checkbox" name="checkbox1" value="1"/> Checkbox 1<br/>
<input type="checkbox" name="checkbox2" value="2"/> Checkbox 2<br/>
<input type="checkbox" name="checkbox3" value="3"/> Checkbox 3<br/>

<input name="reset" type="reset" value="Reset"/>
<input name="senden" type="submit" value="Senden"/>
</form> 
Das oben gezeigte Beispiel nutzt die Übergabemethode GET und wird mit dem Klick auf den Button "Senden" gesendet. Die neu augerufene URL enthält alle vorhandenen Variablen:
Code:
http://www.domain.de/index.php?textfeld=Textfeld&passwordfeld=Passwordfeld&textarea=Dies+ist+ein+Textarea&dropdown=2&radiobutton=3&checkbox1=1&senden=Senden

Geändert von WarrenFaith (22.03.2006 um 09:23 Uhr)
WarrenFaith ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.03.2006, 17:04 Nach oben    #5
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.653
Standard

4. Abrufen der Formulardaten

Nachdem wir nun gelernt haben, wie ein Formular aufgebaut sein könnte und wie Methoden POST und GET funktionieren, können wir das ganze auch praktisch testen.
Dazu verwenden wir erstmal folgendes Formular:
HTML-Code:
<form action="index.php" method="POST">
Bitte geben Sie ihre Daten ein:<br/>

Name:
<input name="name" type="text" value="" size="15"/><br/>

Vorname:
<input name="vorname" type="text" value="" size="15"/><br/>

Straße / Nr:
<input name="strasse" type="text" value="" size="15"/>
<input name="nr" type="text" value="" size="3"/><br/>

PLZ / Ort:
<input name="plz" type="text" value="" size="5"/>
<input name="ort" type="text" value="" size="15"/><br/>

Telefon:
<input name="telefon" type="text" value="" size="15"/><br/>

<input name="senden" type="submit" value="Senden"/>
</form> 
Testweise geben wir unsere Daten dort ein und schicken das Formular mit dem Button "Senden" ab.
Die Seite läd neu und das Formular ist wieder leer. Das ist natürlich nicht das, was wir wollen.

Wie können wir also auf die Daten zugreifen?
Ganz einfach: Je nach Übertragungsmethode werden die Daten entweder in das Array $_POST oder in das Array $_GET geschrieben. Damit können wir dann beliebig arbeiten.
In unserem Beispiel ist die Methode POST benutzt worden, weshalb wir uns einfach mal das Array $_POST ausgeben lassen wollen, natürlich nur, wenn dieses Array auch existiert:
PHP-Code:
<html>
<body>
<?
error_reporting(E_ALL);
if(isset($_POST['senden'])) // Sendenbutton gedrückt?
{
    echo '<pre>';
    print_r($_POST);
    echo '</pre>';
}
?>

<form action="index.php" method="POST">
Bitte geben Sie ihre Daten ein:<br/>

Name:
<input name="name" type="text" value="" size="15"/><br/>

Vorname:
<input name="vorname" type="text" value="" size="15"/><br/>

Straße / Nr:
<input name="strasse" type="text" value="" size="15"/>
<input name="nr" type="text" value="" size="3"/><br/>

PLZ / Ort:
<input name="plz" type="text" value="" size="5"/>
<input name="ort" type="text" value="" size="15"/><br/>

Telefon:
<input name="telefon" type="text" value="" size="15"/><br/>

<input name="senden" type="submit" value="Senden"/>
</form>

</body>
</html>
Als Ausgabe können wir z.B. das erhalten:
Code:
Array
(
    [name] => Faith
    [vorname] => Warren
    [strasse] => Superstraße
    [nr] => 007
    [plz] => 12345
    [ort] => Berlin
    [telefon] => 030 / 1234567
    [senden] => Senden
)
Anhand des Arrays können wir erkennen, dass die Namen der Formularfelder die Indexe des Arrays sind und die Inhalte (Value) die Werte des Arrayeintrags.
Damit ist natürlich auch verständlich, dass jedes Formularelement einen eineindeutigen Namen haben sollte. Ausnahmen bestätigen wie immer die Regel (meistens bei Radiobuttons). Ist dies nicht der Fall, so wird der Wert des ersten Elements mit dem Namen mit dem Wert des letzten Elements mit dem gleichen Namen überschrieben.

Nachfolgend zwei kleine Beispiele:

Die Ausgabe der Formulardaten in einem Textbeispiel:
PHP-Code:
<?
error_reporting(E_ALL);
$msg = "";
if(isset($_POST['senden']))
{
    $msg = 'Sie hei&szlig;en '.$_POST['vorname'].' '.$_POST['name'].
        ' und sind '.$_POST['geschlecht'].'.<br />'.
        'Sie sind amtlich wohnhaft gemeldet in der '.$_POST['strasse'].' '.$_POST['nr'].
        ' in '.$_POST['plz'].' '.$_POST['ort'].' im Bundesland '.$_POST['bundesland'].'.<br />'.
        'Sie sind telefonisch erreichbar unter '.$_POST['telefon'].'.<br />';
}
?>
<html>
<head><title>Formularauswertungen via PHP</title></head>
<body>
<?
if($msg != '')
{
    echo $msg.'<br />';
}
?>
<form action="index.php" method="POST">
Bitte geben Sie ihre Daten ein:<br/>

Name:
<input name="name" type="text" value="" size="15"/><br/>

Vorname:
<input name="vorname" type="text" value="" size="15"/><br/>

Straße / Nr:
<input name="strasse" type="text" value="" size="15"/>
<input name="nr" type="text" value="" size="3"/><br/>

PLZ / Ort:
<input name="plz" type="text" value="" size="5"/>
<input name="ort" type="text" value="" size="15"/><br/>

Geschlecht:
<input name="geschlecht" type="radio" value="m&auml;nnlich"/>M&auml;nnlich
<input name="geschlecht" type="radio" value="weiblich"/>Weiblich<br/>

Bundesland:
<select name="bundesland" size="1">
    <option value="Baden-W&uuml;rttemberg">Baden-W&uuml;rttemberg</option>
    <option value="Bayern">Bayern</option>
    <option value="Berlin">Berlin</option>
    <option value="Brandenburg">Brandenburg</option>
    <option value="Bremen">Bremen</option>
    <option value="Hamburg">Hamburg</option>
    <option value="Hessen">Hessen</option>
    <option value="Mecklenburg-Vorpommern">Mecklenburg-Vorpommern</option>
    <option value="Niedersachsen">Niedersachsen</option>
    <option value="Nordrhein-Westfalen">Nordrhein-Westfalen</option>
    <option value="Rheinland-Pfalz">Rheinland-Pfalz</option>
    <option value="Saarland">Saarland</option>
    <option value="Sachsen">Sachsen</option>
    <option value="Sachsen-Anhalt">Sachsen-Anhalt</option>
    <option value="Schleswig-Holstein">Schleswig-Holstein</option>
    <option value="Th&uuml;rigen">Th&uuml;rigen</option>
</select>

Telefon:
<input name="telefon" type="text" value="" size="15"/><br/>

<input name="senden" type="submit" value="Senden"/>
</form>

</body>
</html>
Beispielhafte Ausgabe wäre:
Code:
Sie heißen Warren Faith und sind männlich.
Sie sind amtlich wohnhaft gemeldet in der Superstraße 007 in 12345 Berlin im Bundesland Berlin.
Sie sind telefonisch erreichbar unter 030 / 1234567.
Es wird manchmal auch erwünscht, dass Formulare nach dem Abschicken noch die eingegebenen Daten in den Elementen beibehalten. Dazu dieses Beispiel:
PHP-Code:
<?
error_reporting(E_ALL);
if(isset($_POST['senden'])) // Sendebutton gedrueckt
{
    $msg = 'Sie hei&szlig;en '.$_POST['vorname'].' '.$_POST['name'].'.<br />'.
        'Sie sind amtlich wohnhaft gemeldet in der '.$_POST['strasse'].' '.$_POST['nr'].
        ' in '.$_POST['plz'].' '.$_POST['ort'].'.<br />'.
        'Sie sind telefonisch erreichbar unter '.$_POST['telefon'].'.<br />';
}
else
{
    $msg = '';
    $_POST = array();
}

// Ueberprueft, ob das Array einen Eintrag mit dem
// Index $name hat und gibt dann den Wert zurueck
// Wenn nicht, ist die Rueckgabe ein leerer String
function getValue($name)
{
    if(isset($_POST[$name]))
    {
        return $_POST[$name];
    }
    else
    {
        return '';
    }
}
?>
<html>
<head><title>Formularauswertungen via PHP</title></head>
<body>
<?
if($msg != '') // wenn $msg nicht leer ist
{
    echo $msg.'<br />';
}
?>
<form action="index.php" method="POST">
Bitte geben Sie ihre Daten ein:<br/>

Name:
<input name="name" type="text" value="<?=getValue('name')?>" size="15"/><br/>

Vorname:
<input name="vorname" type="text" value="<?=getValue('vorname')?>" size="15"/><br/>

Straße / Nr:
<input name="strasse" type="text" value="<?=getValue('strasse')?>" size="15"/>
<input name="nr" type="text" value="<?=getValue('nr')?>" size="3"/><br/>

PLZ / Ort:
<input name="plz" type="text" value="<?=getValue('plz')?>" size="5"/>
<input name="ort" type="text" value="<?=getValue('ort')?>" size="15"/><br/>

Telefon:
<input name="telefon" type="text" value="<?=getValue('telefon')?>" size="15"/><br/>

<input name="senden" type="submit" value="Senden"/>
</form>

</body>
</html>
Anmerkung: Für die Verwendung von "<?=", welches identisch ist mit "<?php echo", muss in der php.ini "short_open_tag = true" sein. Ansonsten muss das ganze ausgeschrieben werden, z.B.: <?php echo getValue('name'); ?>

Geändert von WarrenFaith (22.03.2006 um 11:05 Uhr)
WarrenFaith ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.03.2006, 17:11 Nach oben    #6
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.653
Standard

5. Fazit

Trotz der Arbeit mit der POST-Methode müssen aus Gründen der Sicherheit alle Eingaben vor der Verarbeitung geprüft werden.
Weiterführende Tutorials wären:
[php] Sichere PHP-Web-Applikationen schreiben
[php] Eingabeüberprüfung eines Formulars
[php] Wie übergebe ich Daten per URL?
[php] Dynamisches Füllen einer SELECT-Liste

Geändert von Jann Hendrik (26.05.2007 um 10:05 Uhr)
WarrenFaith ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Schwachstelle durch Formulare zum Datei-Upload und JavaScript in diversen Browsern robo47 Nachrichten 9 08.06.2006 19:33
[PHP] FTP-Funktionen in PHP nutzen MrNiceGuy Tutorials 0 24.05.2006 14:18
Formulare anderer Webseiten ausfüllen Gast PHP-Programmierung 5 09.04.2006 14:04


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:42 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45