Antworten auf deine Fragen:
Neues Thema erstellen

Antworten zum Thema „PHP-Kontaktformular, Sicherheit und Fragen“

Robbyn-

PHP / Flex Programmierer

AW: PHP-Kontaktformular, Sicherheit und Fragen

Naja, darüber könnte man auch streiten

Ist eine große Fehlerquelle wenn man ein großes Projekt hat. Ich "fahre" damit ganz gut das ich immer etwas zurück gebe, und sehe anderen dabei zu wenn sie sich wundern wenn irgendeine Funktionen nichts zurück liefert und Sie dadurch nicht das gewünschte Ergebnis erzielen.

Aber du hast recht, es gibt bestimmte Situationen, da ist dies nicht nötig ;)
 

schwarzweisz

Noch nicht viel geschrieben

AW: PHP-Kontaktformular, Sicherheit und Fragen

Okay, bis zur Validierung komme ich irgendwie nicht. Ich weiß nicht was passiert oder warum etwas nicht passiert, aber nachfolgender Code spuckt nichts, aber rein gar nichts aus.

Wo ist mein Fehler? Ich finde einfach nichts.

PHP:
<?php
error_reporting (E_ALL);
$name='Chayenne_Chantal';
$email='test@test.de';
$nachricht='Hmpf..';


	function isDefined($name) {
		return isset($name) && !empty($name);}
	function isDefined($email) {
		return isset($email) && !empty($email);}
	function isDefined($nachricht) {
		return isset($nachricht) && !empty($nachricht);}

	$error_defined='';
	if	(!isDefined($name) && !isDefined($email) && !isDefined($nachricht)) {
		$error_defined .='Sorry, an error occurred.';
			if (!isDefined($name)) {
				$error_defined .='Please fill in your name.';}
			if (!isDefined($email)) {
				$error_defined .='Please fill in your (valid) email-address.';}
			if (!isDefined($nachricht)) {
				$error_defined .='Leave me a message';}
	}
	else {
		echo 'All fine.';}
?>

Ich "großen" Script läuft es bis zur Funktion "isDefined", danach passiert gar nichts. Ich kann weder was mit echo ausgeben, noch wird mir ein Fehler über error_reporting angezeigt.

Deswegen habe ich oben stehenden Code einzeln probiert, mit dem gleichen Ergebnis, eine leere Seite im Explorer.
 

Duddle

Posting-Frequenz: 14µHz

AW: PHP-Kontaktformular, Sicherheit und Fragen

Oh, wow. Du hast ein paar grundlegende Konzepte noch nicht verstanden. Das ist kein Problem, ich hatte nur nicht damit gerechnet :)

Sowas
PHP:
function isDefined($name) {
    return isset($name) && !empty($name);}
function isDefined($email) {
    return isset($email) && !empty($email);}
function isDefined($nachricht) {
    return isset($nachricht) && !empty($nachricht);}
ist komplett am Ziel vorbei. Eine Funktion dient zur Abstraktion eines Stück Codes, repräsentiert also einen kleinen Algorithmus den du häufiger benutzt.
Eine Funktion kann Parameter haben, die für diesen Algorithmus irgendwie wichtig sind. Damit kannst du die allgemeine Funktion für etwas spezifisches ausführen.

Ich vergleiche es gern mit einer Paketsendung: du als Kunde packst irgendwas (= Parameter) in ein Paket und lässt dieses per Post verschicken (= Funktion). Der Post ist der Inhalt recht egal, sie macht einfach das gleiche wie für jedes andere Paket.
Offensichtlich hat die Post nicht 42 verschiedene Paketversand-Mechanismen für 42 unterschiedliche Inhalte. Nein, es gibt einen (abstrakten) Ablauf, der für die meisten Inhalte funktioniert.

Gleiches gilt für die Funktionen:
PHP:
function isDefined($foo) {
    return isset($foo) && !empty($foo);
}
Diese eine Funktion kann für alle möglichen Variablen benutzt werden. Der Parametername ist vollkommen egal und hat nichts mit dem Code ausserhalb der Funktion zu tun. Deshalb habe ich in meinen Beispielen stets Platzhalternamen benutzt.

Wenn die Funktion einmal definiert ist, kannst du sie wie isset() oder empty() benutzen.

Das mehrfache definieren der Funktion führt auch zu einem
Fatal error: Cannot redeclare isDefined()
was die leere Seite erklärt.

Du müsstest mglw. in der php.ini display_errors und display_startup_errors auf 1 setzen, oder temporär im Script
PHP:
ini_set('display_errors',1);
ini_set('display_startup_errors',1);
ganz oben, damit du die Fehler siehst.


Duddle
 

schwarzweisz

Noch nicht viel geschrieben

AW: PHP-Kontaktformular, Sicherheit und Fragen

Das es daran liegen könnte, hatte ich befürchtet, aber irgendwie nichts gegenteiliges oder 100% schlüssiges finden können. Gut möglich, dass ich einfach nur auf den falschen Seiten geschaut habe. Danke dafür Duddle.

Schau dir array_map() an.

Habe ich, ich würde es jetzt folgendermaßen lösen wollen:

PHP:
$abs_eingaben= array($name, $email, $nachricht);

function TrimAndStriptags ($abs_eingaben) {
   $abs_eingaben= trim($abs_eingaben);
   $abs_eingaben= strip_tags($abs_eingaben);
}

$abs_eingaben= array_map('TrimAndStriptags', $abs_eingaben);

Oder ist es in diesem Fall kontraproduktiv es immer wieder in die gleichen Variablen (also dem array) zu speichern? Andernfalls arbeite ich mit diesem array nicht mehr nach dem "säubern" sondern mit den jeweils einzelnen Variablen.

Wegen htmlspecialchars bin ich mir noch unschlüssig, ich würde dem User schon gern erlauben, zumindest einfache Quotes zu benutzen, da diese ja nicht nur im Deutschen häufig zur Abkürzung gebraucht werden. Dies würde ich aber wohl mit (der noch nicht fertigen) Validierung machen wollen.
 

Duddle

Posting-Frequenz: 14µHz

AW: PHP-Kontaktformular, Sicherheit und Fragen

Andernfalls arbeite ich mit diesem array nicht mehr nach dem "säubern" sondern mit den jeweils einzelnen Variablen.
Dann machst du wieder etwas seltsames. Nur weil du Variablen in ein Array packst und die Variablen in diesem Array veränderst, heißt es nicht dass die "ursprünglichen" Variablen verändert wurden.
Variablen werden fast immer als Kopien übergeben, also er löst den Inhalt der Variable auf und arbeitet mit diesem Wert weiter.
PHP:
$foo = 42;
$bar = $foo;
$foo++;
echo $foo." ".$bar; // 43 42

Wegen htmlspecialchars bin ich mir noch unschlüssig, ich würde dem User schon gern erlauben, zumindest einfache Quotes zu benutzen, da diese ja nicht nur im Deutschen häufig zur Abkürzung gebraucht werden. Dies würde ich aber wohl mit (der noch nicht fertigen) Validierung machen wollen.
Die Validierung und "Bereinigung" der Variablen hängt immer vom Anwendungsfall ab. htmlspecialchars() bspw. dient dazu, HTML ausgeben zu können ohne es als HTML auswerten zu lassen, also statt ein <script>-Tag zu öffnen es lediglich auszugeben.

Du willst ein Kontaktformular, da sind nur die Bereiche "Absender", "Empfänger", "Betreff" und mglw. "Name" Angriffspunkte interessant. Der Nachrichteninhalt ist sowieso nur Klartext (wenn du nicht explizit eine HTML-Mail schickst).


Duddle
 

schwarzweisz

Noch nicht viel geschrieben

AW: PHP-Kontaktformular, Sicherheit und Fragen

Oh, okay.
Wenn ich jedoch die Variablen mit echo ausgeben lassen, macht es den Anschein, als wenn diese im Ursprung überschrieben wurden.

Ich habe jetzt noch einmal über die regex gebrütet und bin zu folgendem Ergebnis gekommen.

PHP:
function check_name($name) {
	$pattern='/^[a-zA-Z\xC0-\xD6\xD8-\xF6\xF8-\xFF\-\s]{2,75}$/s';
		return preg_match($pattern, $name);
		}
	function check_email($email) {
	$pattern='/^[a-z0-9\xC4\xE4\xD6\xF6\xDC\xFC\]+[_\-\.a-z0-9\xC4\xE4\xD6\xF6\xDC\xFC\]+@[a-z0-9\xC4\xE4\xD6\xF6\xDC\xFC\]+[_\-\.a-z0-9]+\.[a-z]{2,6}$/is';
		return preg_match($pattern, $email);
		}
	function check_nachricht($nachricht) {
	$pattern='/^[^\<\>\{\}]{10,1000}$/';
		return preg_match ($pattern, $nachricht);}

Jetzt sollten bei der E-Mail-Validierung auch Umlauten erkannt werden.
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Statistik des Forums

Themen
175.158
Beiträge
2.581.874
Mitglieder
67.225
Neuestes Mitglied
Petra
Oben