Es wird in diesen PHP Tutorial erklärt, wie sie mit der Programmiersprache PHP ein Formular automatisch ausfüllen und absenden. Manchmal kommt es vor, dass man sich eine Arbeitserleichterung programmieren möchte. Für diese Fälle kann man in PHP ein Formular automatisch absenden. Ich erkläre Ihnen, wie sie mit einer PHP-Funktion in PHP dies umsetzen können.
Natürlich kann man mit dieser PHP-Funktion auch sehr viel Schindluder betreiben, daher möchte ich nicht im Detail auf die Anwendungsbeispiele eingehen. Ich sage nur soviel dazu, mit ein paar kleinen Modifikationen ist es möglich, jedes Formular auszufüllen. Der einzige Schutz hierbei ist, ein sogenanntes Captcha Bild, was im Formular eingebaut ist.
Um ein Formular abzusenden, benötigt man die PHP-Funktion fsockopen(), damit man eine Verbindung zu einem externen Server herstellen kann. Bitte lesen Sie vorher die Erklärung „Host mit preg_match() prüfen“ und „Analysieren einer URL und in die Bestandteile zerlegen“ damit nicht zu viele Fragen ihrerseits aufkommen.
Nachfolgend finden sie eine PHP Funktion, womit man ein Formular automatisch absenden kann.
Beispiel:
<?php
/*
* Created on 27.12.2009 by Nico Schubert
*/
function daten_absenden($url, $referer,
$data_zu_senden, $port = 80, $timeout = 30) {
/**
* Mit der PHP Funktion parse_url() zerlegen
wir die URL in ihre Bestandteile und
speichern diese in der Variable
$url_bestandteile.
*/
$url_bestandteile = @parse_url($url);
/**
* Als nächstes prüfen wir die Variable
$url_bestandteile, ob in dieser ein false
steht, sollte dies der Fall sein geben
wir eine Fehlermeldung aus und brechen
das Script ab.
*/
if ($url_bestandteile == false) {
echo 'Der gespeicherte Host in der
Variable $host ist nicht korrekt.';
exit;
}
/**
* Nun greifen wir auf das Array in der
Variable $url_bestandteile zurück und
speichern die Bestandteile host und path
in einer expliziten Variable.
*/
$host = $url_bestandteile['host'];
$path = $url_bestandteile['path'];
$suchmuster =
"/^[a-zA-Z0-9-.]+.(com|org|net|info|de)
$/i";
/**
* Mit einer IF-Anweisung und preg_match()
überprüfen wir, ob unser Host den
Suchmuster entspricht.
*/
if (preg_match($suchmuster, $host) == false) {
/**
* Wenn die PHP-Funktion preg_match ein
false zurückgibt, geben wir mit den
echo Befehl eine Fehlermeldung aus.
*/
echo 'Der gespeicherte Host in der
Variable $host ist nicht korrekt.';
exit;
}
/**
* Als nächstes prüfen wir mit einer
IF-Anweisung, is_array() und count() ob
in der Variable $data_zu_senden ein Array
mit Daten enthalten ist.
*/
if (is_array($data_zu_senden) == false OR
count($data_zu_senden) == 0) {
/**
* Wenn in der Variable $data_zu_senden,
keine Daten enthalten sind brechen
wir den Scriptlauf mit der PHP
Funktion exit; das Script ab und
geben eine entsprechende
Fehlermeldung aus.
*/
echo 'Der Php function daten_absenden()
wurde kein Array mit Daten übergeben!';
exit;
} else {
$i = 0;
$daten = '';
/**
* Nun laufen wir unser Array, was wir der
Funktion übermittelt haben mit einer
so genannten foreach Schleife durch
und speichern den Schlüssel und Wert
als einer Zeichenkette in der
Variable $daten. Zusätzlich prüfen
wir mit einer IF Anweisung in der
Schleife, ob $i gleich 0 ist,
ansonsten stellen wir der
Zeichenkette & Zeichen voraus.
*/
foreach($data_zu_senden as $key => $value) {
if ($i == 0) {
$daten .= $key.'='.$value;
} else {
$daten .= '&'.$key.'='.$value;
}
$i++;
}
}
/**
* Verbindung zum Host herstellen mit der PHP
Funktion fsockopen()
*/
$verbindung = @fsockopen($host, $port, $errno,
$errstr, $timeout);
/**
* Auswerten ob eine Verbindung zum Host
hergestellt wurde
*/
if (!$verbindung) {
/**
* Sollte keine Verbindung hergestellt
werden können mit der PHP Funktion
fsockopen() geben wir eine
Fehlermeldung aus und brechen das
Script ab.
*/
echo $errstr.' ('.$errno.')<br />';
exit;
} else {
/**
* Verbindung hergestellt zum Host,
Datenübertragung beginnen
*/
fputs($verbindung, "POST ".$path."
HTTP/1.1 ");
fputs($verbindung, "Host: ".$host." ");
fputs($verbindung, "Referer:
".$referer." ");
fputs($verbindung, "Content-type:
application/x-www-form-urlencoded ");
fputs($verbindung, "Content-length: ".
strlen($daten) ." ");
fputs($verbindung, "Connection:
close ");
fputs($verbindung, $daten);
/**
* Daten senden
*/
while (!feof($verbindung)) {
$res .= fgets($verbindung, 4096);
}
/**
* Verbindung schließen zum Host
*/
fclose($verbindung);
/**
* Rückgabe der Ausgabe vom Host
*/
return $res;
}
}
/**
* Beispiel für den Funktionsaufruf
*/
/**
* Nun befüllen wir die Variable $daten_array mit
einen Array, der Daten die wir an das
Formular übersenden möchten. Für den Key
verwenden wir den Variablenamen und speichern
den zu übergebenen Wert in den Array.
*/
$daten_array['variable_name'] = "Inhalt";
/**
* Jetzt rufen wir die PHP-Funktion
daten_absenden() auf und übergeben dieser
PHP-Funktion in ersten Parameter unserer URL,
der wir die Daten übergeben möchten.
*
* Im zweiten Parameter können wir einen so
genannten Referer mit übergeben, dies ist
nicht erforderlich. Manche Formulare
benötigen zum entgegennehmen der Daten, die
Angabe des Referers.
*
* Beim dritten Parameter übergeben wir unser Array
mit der Variable $daten_array. Der vierte und
fünfte Parameter sind zwei optionale Parameter.
*
* Der vierte Parameter steht für den Port des Host
und der fünfte für den Timeout bis die
Verbindung zum Host geschlossen werden soll.
Anschließend speichern wir den Rückgabewert
der PHP Funktion daten_absenden() in der
Variable $x.
*/
$x =
daten_absenden("http://www.domain.de/formular.
php", "", $daten_array, 80, 30 );
/**
* Nun geben wir als letztes die Variable $x aus.
Es wird hierzu die PHP-Funktion echo
verwendet. Die Ausgabe entspricht des
Rückgabewerts des URL`s, wohin wir die Daten
gesendet haben.
*/
echo $x;
?>
Erklärung:
Dieser PHP-Code enthält eine Funktion namens „daten_absenden“, die Daten an eine angegebene URL sendet.
Die Funktion nimmt fünf Parameter entgegen:
- $url: Die URL, an die die Daten gesendet werden sollen.
- $referer: Der Referer, der beim Senden der Daten angegeben werden soll.
- $data_zu_senden: Ein Array mit den Daten, die gesendet werden sollen.
- $port (optional): Der Port, über den die Verbindung zur URL hergestellt werden soll. Der Standardwert ist 80.
- $timeout (optional): Das Zeitlimit für den Verbindungsaufbau. Der Standardwert ist 30.
Danach werden die Bestandteile host und path aus $url_bestandteile in expliziten Variablen gespeichert. Es wird auch ein Suchmuster für gültige Hostnamen definiert. Anschließend wird überprüft, ob der Hostname dem Suchmuster entspricht. Wenn dies nicht der Fall ist, wird wieder eine Fehlermeldung ausgegeben und das Script beendet.
Danach wird überprüft, ob in der Variablen $data_zu_senden tatsächlich ein Array mit Daten enthalten ist. Wenn dies nicht der Fall ist, wird ebenfalls eine Fehlermeldung ausgegeben und das Script beendet. Andernfalls wird das Array durchlaufen und die Schlüssel und Werte der Daten in der Variablen $daten als Zeichenkette gespeichert. Schließlich werden die Verbindungsdaten für den Server in der Variablen $header gespeichert und die Verbindung zum Server hergestellt. Die gesendeten Daten werden in der Variablen $res gespeichert und zurückgegeben.
Wenn Sie dieses PHP-Script an Ihre Wünsche angepasst haben und dieses aufrufen, wird die Ergebnisausgabe vom Formular ausgegeben, nach dem man das Formular abgesendet hat. Diese Ausgabe kann man mit preg_match() weiter verarbeiten und z. B. ein anderer Prozess starten.
Sollten Sie Fragen oder Probleme mit dieser PHP Funktion haben, so nutzen Sie bitte unser Supportforum. Erweiterungsvorschläge werden natürlich genauso gern, im Forum entgegengenommen.
Erklärung der einzelnen PHP-Funktionen:
IF-Anweisung – Es wird in diesem Tutorial erklärt, wie Sie eine IF-Anweisung richtig verwenden.
Texte ausgeben mit PHP – Hier wird ihnen erklärt, wie sie mit den PHP Befehl echo einen Text ausgeben.
Was ist ein Array? - Sie finden hier eine Erklärung, was überhaupt ein Array ist und wie man dies verwenden kann.
foreach Schleife – Hier wird erklärt, was eine foreach() Schleife ist und wie man diese, in der PHP Programmierung verwenden kann.
Php Function – Allgemeine Erklärung der PHP-Funktion mit Anwendungsbeispielen.