Beiträge von Stef

    Hey,

    zeig mal dein PHP-Code bitte her.

    Was du machen kannst ist mit JavaScript auf das Click-Event reagieren und dann den Wert des submitt Buttons an ein php Formular mittels Ajax senden. Dann überprüfen ob dieser Wert vorhanden ist und dann den restlichen Prozess ausführen.

    Mit JavaScript kannst du dann auch das neu laden der Seite verhindern, da JS am Client, also im Browser direkt läuft. PHP dagegen läuft am Server und kann dies nicht manipulieren.

    Hier ist nochmal der komplette Code:

    Das ist das Ergebnis : http://stef97.bplaced.net/kontaktformula…aktformular.php

    datenUeberpruefung.php

    Alles klar, nun geht es weiter mit der Datei datenUeberpruefung.php, welche die Formulardaten verarbeitet.

    Dort wird zuerst der PHPMailer eingebunden und Konstanten für die spätere Fehlerausgabe angelegt. Dies wurde vorgenommen, um das HTML später nicht tausendmal wiederholen zu müssen.

    Zuallererst müssen wir überprüfen, ob das Formular abgesendet wurde. Dies erreichen wir mit der Überprüfung, ob $_POST['submit'] existiert. Dafür verwenden wir die Funktion isset().

    PHP
    if (isset($_POST['submit'])) {}

    Existiert $_POST['submit'], wurde das Formular erfolgreich abgesendet. Ist dies der Fall, müssen wir die Formulareingaben in Variablen ablegen und diese filtern, bzw. Sonderzeichen in HTML-Code umwandeln. Dies müssen wir machen, damit das Formular vor XSS-Attacken geschützt ist.

    Dafür verwenden wir die Funktion htmlspecialchars(). Diese wandelt alle Sonderzeichen in ungefährlichen HTML-Code um. Darüber hinaus entfernen wir noch alle Leerzeichen, am Anfang und Ende der Zeichenkette, aus den Eingaben. Dazu verwenden wir die Funktion trim().

    PHP: datenUeberpruefung.php
    $name = htmlspecialchars(trim($_POST['name']));
    $email = htmlspecialchars(trim($_POST['email']));
    $subject = htmlspecialchars(trim($_POST['subject']));
    $message = htmlspecialchars(trim($_POST['message']));
    $receiver = htmlspecialchars(trim($_POST['receiver'])); // nur zum Testen

    Ist dies erfolgt, müssen wir nun überprüfen, ob die Eingaben unsere gewünschten Kriterien erfüllen. Ist dies nicht der Fall, werden Fehlermeldungen in einem Array gespeichert. Für die Fehlermeldung verwenden wir die Konstanten, welche den HTML-Code der Fehlermeldung beinhalten. Erst mal überprüfen wir, ob die Variablen leer sind. Ist dies der Fall, wird eine Fehlermeldung in das Array hinzugefügt. Ist dies nicht der Fall, überprüfen wir noch die Länge des Strings in den Variablen mit der Funktion strlen(). Erfüllt eine Variable die angeforderte Länge nicht, wird eine Fehlermeldung in das Array hinzugefügt. Bei der E-Mail überprüfen wir zusätzlich, ob die eingegebene E-Mail eine gültige E-Mail-Adresse ist. Dies erreichen wir mit der Funktion filter_var() und dem dazugehörigen Filter FILTER_VALIDATE_EMAIL.

    Nun überprüfen wir nach der Fehlerbehandlung und der Kriterienprüfung, ob das Array, welches die Fehlermeldungen speichert, leer ist. Dies erreichen wir, wenn wir auf das Array die Funktion count() anwenden und überprüfen, ob das Ergebnis, also die Anzahl der Einträge, gleich 0 ist.

    PHP
    if (count($errors) === 0) {}

    Liegen keine Fehler vor, erfolgt der Mailversand. Zum Mailversand verwenden wir den PHPMailer. Da wir den PHPMailer bereits am Anfang der Datei eingebunden haben, können wir nun eine Instanz der PHPMailer-Klasse erstellen und setzen den Charset, den Absender sowie Empfänger, den Betreff und den Inhalt der E-Mail. Darüber hinaus überprüfen wir zum Schluss noch, ob der Mailversand erfolgreich war. Ist dies der Fall wird eine Erfolgsmeldung ausgegeben, ist dies aber nicht der Fall wird eine Fehlermeldung ausgegeben.

    kontaktformular.php

    Nun starten wir endlich mit unserem Kontaktformular und der Datei kontaktformular.php. Diese Datei stellt praktisch die Seite dar, welche das Kontaktformular anzeigt und auch verarbeitet, allerdings haben wir die Verarbeitung in die separate Datei datenUeberpruefung.php ausgelagert.

    Diese binden wir ganz am Anfang der Datei kontaktformular.php ein:

    PHP: kontaktformular.php
    <?php
      require_once 'datenUeberpruefung.php';
    ?>

    Anschließend folgt dann das HTML gemischt mit ein wenig PHP zur Darstellung des Kontaktformulars. Wichtig zu erwähnen ist hierbei, dass wir Bootstrap 4 für das Design der Seite nutzen, damit es halbwegs nach was aussieht.

    Hier ist der gesamte Inhalt der Datei kontaktformular.php:


    In Zeile 11 wird wie angesprochen Bootstrap 4 über den CDN eingebunden.

    Darauf stehen uns dann zahlreiche Klassen zur Verfügung. Zuersteinmal ist das die container-Klasse, welche für die horizontale Zentrierung unseres Kontaktformulars sorgt.

    Damit das Formular nach oben und unten ebenfalls ein wenig Platz bekommt, nutzen wir die Klasse py-5. Innerhalb des Formulars befinden sich dann jeweils div-Container mit der Klasse form-group, welche immer ein Formularfeld enthalten.

    Dieses besteht aus einem label sowie dem entsprechenden input-Feld. Letzteres bekommt die Klasse form-control.

    Abgeschlossen wird unser Formular mit einem Submit-Button mit der Klasse btn sowie btn-primary.

    Dies alles sorgt letztendlich dafür, dass wir dank Bootstrap eine relativ schlichte aber schicke Darstellung unseres Formulars erreichen, ohne auch nur eine Zeile CSS geschrieben haben zu müssen.

    Ansonsten fällt bei den Formularfeldern noch auf, dass wir stets ein wenig PHP-Code innerhalb des value-Attributs eines input-Feldes bzw. innerhalb die textarea geschrieben haben. Dieser sieht immer ungefähr so aus, in dem Fall kommt er vom Formularfeld für den Namen:

    PHP: kontaktformular.php
    <?php echo !empty($name) ? $name : '' ?>

    Dieser sorgt schlicht und ergreifend dafür, dass wir nach dem Absenden des Formulars alle ausgefüllten Daten behalten und nicht alles nochmal neu eingeben müssen, sollte noch irgendwo ein Fehler bestehen.

    Um genau zu sein, versteckt sich dahinter der sogenannte Ternary-Operator, welcher eine Abkürzung für eine normale if-Abfrage darstellt.

    Der obige Code ist im Prinzip also exakt mit folgendem Code gleichzusetzen:

    PHP
    <?php
      if (!empty($name)) {
        echo $name;
      } else {
        echo '';
      }
    ?>

    Noch ein weiterer kleiner PHP-Code lässt sich nach dem Formular innerhalb des Containers finden:

    PHP: kontaktformular.php
    <?php
      if (!empty($errors) && count($errors) > 0 && !$success) {
        echo implode('', $errors);
      } else if (!empty($success) && count($errors) === 0) {
        echo $success;
      }
    ?>

    Dieser ist für die Ausgabe von möglichen Fehlern bzw. Erfolgsmeldungen zuständig.

    Zu Beginn überprüfen wir, ob überhaupt Einträge in unserem Fehler-Array vorhanden sind und ob die Variable $success einen Wert beinhaltet, der von PHP als false behandelt wird.

    Ist dies der Fall, werden die Einträge des Arrays als String aneinandergekettet und ausgegeben.

    Trifft die eben besprochene Bedingung nicht zu, geht es mit der nächsten Bedingung weiter, die durch das else if gekennzeichnet wird. Hierbei überprüfen wir, ob die Variable $success nicht leer ist und ob die Anzahl der Einträge des Fehler-Arrays gleich 0 ist, wir also keine Fehler vorliegen haben.

    Hinweis: Der PHP-Code wird erstmal ohne jeglichen Kontext ein wenig unverständlich sein. Zum kompletten Verständnis der Datei kontaktformular.php ist also ein Blick in die Datei datenUeberpruefung.php zu werfen.

    Hallo zusammen,

    wir, Stef und JR Cologne, haben uns dazu entschieden, gemeinsam ein paar Tutorials zu verfassen. Für das erste Tutorial haben wir uns überlegt, uns mit der Erstellung eines einfachen Kontaktformulars mit PHP auseinanderzusetzen.

    Wir hoffen, euer Interesse wecken zu können und würden uns sehr freuen, wenn wir dem einen oder anderen hiermit ein wenig helfen können.

    Anforderungen

    Schwierigkeitsgrad: leicht

    Kenntnisse: HTML & PHP Basics

    Abhängigkeiten: PHPMailer in Version 6

    Setup/Einrichtung

    Wir starten mit einer kurzen Einrichtung: Für unser Kontaktformular benötigen wir die Mailer-Klasse PHPMailer, welche wir für die Versendung der E-Mail nutzen werden.

    Um den PHPMailer nutzen zu können, müssen wir diesen erstmal herunterladen, damit wir die Abhängigkeit dann im Code einbinden können. Auch wenn die Möglichkeit einer Installation über Composer zur Verfügung steht, nutzen wir diese der Einfachheit halber nicht.

    Stattdessen laden wir uns die aktuelle Version einfach im Zip-Format von GitHub herunter.

    Auf der Übersichtsseite mit allen Releases müssen wir nur die gewünschte Version auswählen und dann den Quellcode des PHPMailers herunterladen. In unserem Beispiel nutzen wir die Version 6.0.3.

    Innerhalb unseres Projektordners erstellen wir anschließend einen Ordner für den PHPMailer, sodass unsere Ordnerstruktur ungefähr so aussieht:

    Nur die Dateien datenUeberpruefung.php und kontaktformular.php sind dabei unsere eigenen Dateien. Der Rest kommt vom PHPMailer und sollte möglichst nicht angerührt werden.

    So, das wäre es dann auch schon. Wir sind startklar.

    Was gibt es allgemein zu beachten?

    Bevor wir mit unserem Formular starten, müssen wir erst noch ein paar allgemeine Dinge klären:

    Formulardaten können über zwei Kanäle empfangen werden. Über GET und POST. Der Kanal, über den das Formular abgesendet wird, legt man mit dem Attribut method fest. Diesem geben wir entweder post oder get als Wert mit. Für Kontaktformulare sollte immer POST verwendet werden, mehr dazu gleich.

    Des Weiteren muss jede Usereingabe als potentiell gefährlich angesehen werden. Ebenso muss man darauf achten, dass man die Formulardaten immer mit der geeigneten Funktion filtern muss, um z.B. XSS-Attacken zu verhindern. Meistens ist das htmlspecialchars().

    Unterschied POST/GET

    Der wesentliche Unterschied zwischen den beiden Methoden für die Übermittlung von Formulardaten GET und POST ist, dass POST-Daten praktisch verdeckt übermittelt werden und nicht direkt für den User sichtbar sind.

    Bei der Methode GET werden die Daten hingegen über die URL übertragen und sind damit in der Adresszeile einsehbar. Dies ist in den meisten Fällen nicht erwünscht, weshalb im Zweifel immer POST verwendet werden sollte.

    Lediglich bei Anwendungsfällen, wie z.B. einer Suchfunktion, macht es Sinn, die Daten über den GET-Kanal zu übertragen. Ansonsten sollte man bei Formularen stets die Finger von GET lassen.

    Unabhängig von Formularen haben sogenannte GET-Parameter, auch URL-Parameter genannt, zwar noch andere Anwendungsfälle, aber diese sind dann meist abseits von Formularen. Von daher gehen wir darauf jetzt nicht näher ein.

    Stattdessen schauen wir uns noch kurz ein Beispiel für die Nutzung der beiden Kanäle an.

    Achtung: Die Beispiele sind aufs Wesentliche heruntergebrochen und sollten so nicht verwendet werden.

    GET:

    PHP: get.php
    <?php
      if (isset($_GET['query'])) {
        echo 'Du hast nach ' . $_GET['query'] . ' gesucht.';
      }
    ?>
    <form action="" method="get">
      <input type="text" name="query">
      <input type="submit" name="submit" value="Suchen">
    </form>

    URL: http://example.com/get.php?query=test

    POST:

    PHP: post.php
    <?php
      if (isset($_POST['query'])) {
        echo 'Du hast nach ' . $_POST['query'] . ' gesucht.';
      }
    ?>
    <form action="" method="post">
      <input type="text" name="query">
      <input type="submit" name="submit" value="Suchen">
    </form>

    URL: http://example.com/post.php

    Der wesentliche Unterschied ist direkt an der URL zu erkennen. Bei POST findet sich keinerlei Hinweis auf die versendeten Daten, bei GET schon.

    Hey,

    wie bekomme ich denn schräge Striche in meine HTML-Seite. Habe es bereits mit <hr> probiert und transform: rotate(); aber dies funktioniert nicht so wie ich es mir wünsche.

    Habe ebenso mal die Linien als Bild erstellt, aber das ist auch nicht das richtige.


    Mein Ziel ist es, so wie auf dem mit hochgeladenen Bild es hinzubekommen. Darüber hinaus sollte es auch responsive anpassbar sein.

    Hoffe ihr könnt mir helfen.

    Grüße,

    Stef

    Mit den Funktionen file_put_contents und file geht es nicht, da das php forum mittels https geschützt ist. Eventuell musst du es mal mit curl ausprobieren.

    Wenn man die beiden Funktionen auf dein Profil anwendet kommt immer folgende Fehlermeldung:

    failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden

    Ich werde mich die nächsten Tage mal da dran setzten und es ausprobieren. Das mit dem Online-Status anzeigen funktioniert ja noch nicht ganz bei dir.

    Bei einer Änderung des Quelltextes, sollte file_get_contents() diese Änderung auch bemerken und den aktualisierten Quelltext der Seite beinhalten.

    Aber das Script kann sich da nicht einloggen. Das Script fragt einfach nur den aktuellen HTML-Content ab und speichert diesen in eine variable. Dann wird in dieser nach einem bestimmten Begriff gesucht.

    Zitat



    Hat einer nee andere Idee wie man einen Onlin Status anzeigen kann wo man sich einloggen muss,

    Ne Ich verstehe diesen Satz nicht. Wie meinst du das?

    basti1012 :

    Zitat

    Aber wie das ist wenn man dafür eingeloggt sein muss weiss ich auch nicht wie das geht .

    Verstehe ich nicht. Was meinst du damit?

    Zu deiner Frage ob man sich selbst ein Script schreiben kann welches dafür sorgt, dass man in andere Foren automatisch eingeloggt wird. Ich denke dies geht nicht, weil du ja kein Zugriff auf den Server des Forums hast. Denn du brauchst den Hash und den Usernamen aus der Datenbank des PHP-Forums. Um diese Daten zu erhalten brauchst du aber Zugriff, den du niemals bekommen wirst.

    Schau mal wegen dem Void hier:

    https://stackoverflow.com/questions/1291…criptvoid0-mean

    https://developer.mozilla.org/en-US/docs/Web…/Operators/void

    Wie meinst du das?

    Wenn man offline ist, ist es so das ein Element, welche eine bestimmte id oder class hat, nicht angezeigt wird. Nun wenn wir eine Suche nach dem Namen der class starten können wir diese, wenn man offline ist, ja nicht finden. Nur wenn man online ist wird dieses Element angezeigt mit der class und somit kann diese auch gefunden werden.

    Dann musst du selbst schaun wie es in anderen Forums ist (nach welchem Wort du suchen musst).

    Dazu kann ich dir nicht helfen.

    Hey,

    Alles gut. Niemand verpflichtet dich hier online zu sein.

    Du meinst wohl das Thema von Basti.


    Das Prinzip ist, dass man bei den Forums wo man registriert ist, im Quelltext nach einem bestimmten Namen (string) sucht welcher nur angezeigt wird wenn man wirklich online ist. Wenn du offline bist, ist dieses Element, bzw. dieser Name ja nicht mehr vorhanden und somit ist man offline.

    Ich habe in dem Post bereits eine Lösung gepostet.

    Siehe: phpfür anfänger

    Hey Sydney,

    warum verwendest du für so eine einfache Webseite denn ein CMS?

    Wenn du willst, würde ich dir die Seite komplett kostenlos erstellen (mit Adminbereich). Brauchst mir grad ne PN mit deinem Anliegen, Anforderungen, deinem gewünschten Aufbau und Design der Webseite sowie deiner gewünschte Zielgruppe senden. Im Chat können wir dann weiteres besprechen.

    Gruß,

    Stef