Kontakformular PHP
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
ahnung
anfangen
browser
buchen
code
datei
eingabe
email
fehler
fehlermeldung
feld
formular
helfen
http
methode
nachricht
post
url
verarbeiten
webseite
-
Hallo zusammen,
ich hab da mal ne Frage:
Ich würde auf 'ner Website gerne ein Kontaktformular haben. Jetzt habe ich nach http://website.benutzerfreun.de/formular-arzt dieser Anleitung ein HTML und PHP Skript erstellt. Als ich die Dateien hier aber zum testen hochgeladen habe und mal ausgeführt habe, bekam ich nur die Fehlermeldund Error 405 nginx oder so ähnlich. Liegt das am Skript oder jetzt speziell an Lima City?
Ich brauche wirklich Hilfe, da ich überhaupt keine Ahnung hab. Gerne auch direkt fertigen Code.
Vielen Dank schonmal im Vorraus.
LG crazybanana -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Eventuell falsch abgetippt?
Wie kommst du gerade auf dieses Arzt-Ding? Auf jeden Fall empfehlenswert ist es aus meiner Sicht, eine Art von Captcha einzubauen. Auch so etwas gibt es fertig im Netz. -
Ich hab mir ein Buch besorgt, das so die Grundlagen vom Website erstellen erklärt, und weil das Formular zu machen den Rahmen des Buches gesprengt hätte, haben die das als Download zur Verfügung gestellt.
Abgetippt war nach mehrmaligem Kontrollieren alles richtig, aber vielleicht habe ich was übersehen.
Aber der PHP Code ist grundsätzlich OK?
Vielen Dank schonmal für die Antwort -
Zeig doch mal bitte den Code den verwendest.
Am besten im Schema
Dateiname.php
--CODE--
//Ich habe gerade deinen Beitrag nochmal gelesen, und frage mich, wie kann es sein, das du einen Fehler von nginx bekommst, obwohl als Webserver Apache benutzt wird? Das wundert mich sehr.
Beitrag zuletzt geändert: 20.8.2014 19:04:30 von ra1n -
Also Code siehe Link in meinem ersten Beitrag. Im Gründe habe ich das, bis auf CSS Änderungen und Änderungen wie Email Adresse übernommen. Der Fehler war error 405 und als "Kommentar" dazu nginx falls das hilft. Es ist irgendwie wichtig ob das als .php5 gespeichert ist?
P. S. Sorry für Tippfehler, musste das mit dem Handy schreiben ;) -
Ich weiß leider auf Anhieb nicht, wie man das Problem von dir lösen könnte.
Einen Skriptfehler von dir schließe ich zunächst aus, da so etwas eine andere Fehlermeldung verursachen würde.
Mit welchem Browser, von welchem Gerät hast du die Seite aufgerufen?
Könntest du noch einen Link zu deinem Webspace zeigen, damit man die Fehlermeldung direkt sehen kann?
Falls nicht, dann schau bitte nochmal nach, ob es der Fehler 405 oder 504 war. -
crazybanana schrieb:
.. Es ist irgendwie wichtig ob das als .php5 gespeichert ist?..
Standarddateiendung für PHP-Dateien bei Lima-City ist .php. Ob .php5 überhaupt funktioniert, habe ich noch nie getestet. -
Ich benutze Folgendes Script und es Funktioniert einwandfrei die ankommenden E-Mails haben nur eine Komische Formulierung die mich persönlich nicht stört vielleicht kannst du ja auch was damit anfangen
Das Formular: (kann auch in einer HTML datei stehen)
<h2>Einfach das Formular ausfüllen und absenden</h2> <form action="scripts/kontaktformularverarbeitung.php" method="post"> <div align="center"> Bitte Fülle alle Felder Aus <div align="center">Name: <input name="name" size="40"/> <br /> <br /> E-Mail: <input name="email" size="40"/> <br /> <br /> Betreff: <select name="betreff"size="1"> <option>Betreff1</option> <option>Betreff2</option> </select> <br /> <br /> Beschreibung: <br /> <br /> <textarea name="text" cols="50" rows="10"></textarea> <br /> <br /> <input name="submit" type="submit" value="absenden"/> </div> </form><br>
beim Betreff einfach ein weiteres <option>Betreff3-6</option> hinzufügen
im Unterordner scipts kommt dann die kontaktformularverarbeitung.php datei rein (muss PHP sein) mit folgendem Code:
<html> <head> <title>Kontaktformular</title> </head> <body> <?php $Empfaenger = "DeinName@Webseite.de"; if($_REQUEST['submit']){ if(empty($_REQUEST['name']) || empty($_REQUEST['email']) || empty($_REQUEST['text'])) { echo "Bitte gehen Sie zurück und füllen Sie alle Felder aus"; } else{ $email="Sie haben eine Anfrage über ihr Kontaktformular erhalten:\n\n"; while(list($Formularfeld, $Wert)=each($_REQUEST)) { if($Formularfeld!="submit") { $Mailnachricht .= $Formularfeld.": ".$Wert."\n"; } } $Mailnachricht .= "\nDatum/Zeit: "; $Mailnachricht .= date("d.m.Y H:i:s"); $Mailbetreff = "Kontakt: "; $Mailbetreff .= $_REQUEST['betreff']; mail($Empfaenger, $Mailbetreff, $Mailnachricht, "From: ".$_REQUEST['email']); } } ?> <a href="index.html"> zurück</a> </body> </html>
-
Ohne Code (nicht der aus dem Buch) und der Fehlermeldung kann man Dir nicht helfen. Zwar glauben Einige dass die "Profis" all eine Kristallkugel haben, aber die entweder kaputt oder existiert einfach nicht.
Aber ganz ohne Antwort will ich dich auch nicht stehen lassen, also hier mal ein paar generelle Tipps die dir weiter helfen können:
Benutze einen lokalen Server:
Gerade wenn du erst anfängst PHP zu lernen, solltest du keinen öffentlichen Webspace benutzen. Es kann mehr schief gehen als man denkt und bei vielen Anbietern ist PHP so eingestellt das so wenig Informationen wie möglich über den Server ausgegeben werden. Kurz gesagt, debuggen geht schon mal gar nicht, da wichtige Informationen zurückgehalten werden.
Google ist dein Freund:
Eine simple Suche nach "http fehler 405" hätte dir zu Beispiel folgenden Link ausgespuckt: "Drück Mich!"
Daraus lässt sich zum Beispiel schließen dass der Fehler wahrscheinlich im HTML Abschnitt befindet, zumindest wäre das meine erste Vermutung (wie gesagt, ohne den eigentlichen Code kann ich dazu nichts sagen!).
Benutze aktuelle Quellen:
Das Buch ist von ca. 2011, also basiert auf Wissen von 2009-2010. Zwar war das schon die 5.x Ära, aber 5.2.x und 5.3.x, und wir sind im Moment bei 5.5.x. 5.4.x bekommt zwar noch ab und zu einen Patch, aber wird demnächst auch eingemottet, da 6.x oder 7.x (sicher ist man sich da noch nicht) vor der Tür steht.
Kurz gesagt, das Buch ist veraltet und du solltest möglicherweise nach einer alternative suchen. Es gibt einige richtig gute Tutorials und Guides im Netz, und meist sind diese komplett kostenlos. Also definitiv eine Empfehlung von meiner Seite.
EDIT:
@mylonky
1. $_REQUEST ist ein NoNo!
if($_SERVER['REQUEST_METHOD'] === 'POST') { // Formular verarbeiten... }
So und nicht anders sollte man anfangen ein Formular zu verarbeiten.
2. Eingabe ungefiltert zu verarbeiten ebenfalls!
$var = filter_var($_POST['VAR'], FILTER_SANITIZE_STRING);
Alles andere macht das Formular, und damit auch die Webseite, angreifbar.
Beitrag zuletzt geändert: 21.8.2014 3:59:26 von strange -
strange schrieb:
@mylonky
1. $_REQUEST ist ein NoNo!
if($_SERVER['REQUEST_METHOD'] === 'POST') { // Formular verarbeiten... }
So und nicht anders sollte man anfangen ein Formular zu verarbeiten.
2. Eingabe ungefiltert zu verarbeiten ebenfalls!
$var = filter_var($_POST['VAR'], FILTER_SANITIZE_STRING);
Alles andere macht das Formular, und damit auch die Webseite, angreifbar.
tut mir Leid von PHP habe ich 0 Ahnung sonst wüsste ich so was ^^"
der Code war auch nur schnell aus dem Internet gesucht und von unsicher stand da auch nichts :/
meine Kenntnisse beschränken sich auf etwas HTML
(um hier nicht weiter im OT zu schreiben bitte ich dich (wenn du mir antworten möchtest) per PN weiter zu schreiben) -
Das war definitiv nicht im OT, es ist einfach nur gefährlich Eingaben ungefiltert zu verarbeiten, ebenso sollte man darauf achten das man Formulare Grundsätzlich via Post (<form [...] method="post" [...] >) versendet, damit man dann via "$_SERVER['REQUEST_METHOD'] === 'POST'" triggern kann. Und so weiter...
Generell gilt einfach "Traue keinen Eingaben, egal woher sie kommen!"
Ebenfalls gilt "Wenn man keine Ahnung hat. Einfach mal die Fresse halten!". Ist nicht böse gemeint, aber viel zu oft die Wahrheit. -
Empfehlenswert wäre schrittweise heranzugehen und zunächst das Formular mit method=post, also zum POST-Request zu bauen (HTML) und dann mittels PHP die $_POST['...'] Variablen auslesen. Zum Debuggen geht natürlich auch
var_dump($_POST);
HTH -
Hallo zusammen,
Erstmal nochmal viiieeeeelen Dank für alle Tipps. Haben mir zwar geholfen PHP besser zu verstehen, genützt hat es aber trotzdem nichts. Inzwischen habe ich einen neuen Skript gefunden der genau das tut was er soll- ohne Mucken.
LG crazybanana -
Nicht zu vergessen, insbesondere dort wo Kontaktformulare verwendet werden, d.h. in öffentlich zugänglichen Bereichen, ist auch - wie bereits hier angesprochen - der Schutz vor Spam oder anderen Angriffen.
Dazu kann ein Captcha helfen.
Edit:
Evtl. wäre die Quelle des jetzt verwendeten Skriptes auch (für andere) hilfreich.
Beitrag zuletzt geändert: 21.8.2014 21:43:56 von klein-computing -
Hallo
klein-computing schrieb:
Nicht zu vergessen, insbesondere dort wo Kontaktformulare verwendet werden, d.h. in öffentlich zugänglichen Bereichen, ist auch - wie bereits hier angesprochen - der Schutz vor Spam oder anderen Angriffen.
Dazu kann ein Captcha helfen.
Ein Captcha schließt nur Leute mit Sehbehinderungen aus. Unsichtbare Felder, die leer bleiben müssen, fangen bereits den ganzen Spam ein. Dann vielleicht noch eine Spamliste gegenprüfen und (bei einer Kommentarfunktion) Kommentare mit URL manuell prüfen, besonders spammende IP Subnetze werden mit htaccess ausgesperrt.
Damit habe ich in etwas über einem Jahr ca. 30.000 Spam Kommentare blockiert und musste nicht einen einzigen Kommentar löschen. 3 musste ich manuell freigeben.
mfg -
Hallo!
voloya schrieb:
[...] Unsichtbare Felder, die leer bleiben müssen, fangen bereits den ganzen Spam ein.
Genau das kann aber automatisiert werden. Man müsste hier noch unterscheiden zwischen einem gezieltem Angriff auf eine Seite oder allgemeines Suchen nach Seiten, die Formulare haben. Im letzten Fall wäre die Methode ziemlich gut.
Doch wenn es jemand tatsächlich auf eine spezielle Seite abgesehen hat, könnte er sich anschauen, was der Browser sendet und dieses beliebig oft wiederholen...
Grüße!
Beitrag zuletzt geändert: 22.8.2014 17:58:19 von klein-computing -
Der Skript ist hier http://html-php.de/index.php?seite=p_formular und wie ich finde gut erklärt und leicht nachzubauen. Auch die anderen Formulare finde ich sehr praktisch.
-
Hallo
klein-computing schrieb:
Genau das kann aber automatisiert werden. Man müsste hier noch unterscheiden zwischen einem gezieltem Angriff auf eine Seite oder allgemeines Suchen nach Seiten, die Formulare haben. Im letzten Fall wäre die Methode ziemlich gut.
Doch wenn es jemand tatsächlich auf eine spezielle Seite abgesehen hat, könnte er sich anschauen, was der Browser sendet und dieses beliebig oft wiederholen...
Das geht mit einem Captcha auch. Für $10 einen Inder mieten (so schrecklich das klingen mag) und tausende Nachrichten senden.
Einfach nur eine Nachricht pro IP pro Tag erlauben und Spamassassin verwenden...
mfg -
voloya schrieb:
Das geht mit einem Captcha auch. Für $10 einen Inder mieten (so schrecklich das klingen mag) und tausende Nachrichten senden.
Ok, so habe ich das noch nicht betrachtet. Auch wenn ich noch über die Wahrscheinlichkeit daran zweifle...
Zu der Methode mit dem versteckten Input-Feld, das leer bleiben muss, kann evtl. noch hinzugefügt werden, dass das eigentliche Eingabefeld Text beinhalten muss. Denn wahrscheinlich wird ein Bot, der die Seite nicht genau kennt, entweder alle Felder oder kein Feld ausfüllen.
Zu der Möglichkeit, nur eine Nachricht pro IP und Tag zu erlauben, fällt mir noch ein, könnte man bei einem bekannten Umfeld auch geobasiert einschränken (z.B. nur aus .de). -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage