Kontaktformular

  • Hey! Ich habe mir mithilfe von SQL eine Tabelle erstellt, in der die Werte eines Kontaktformulars gespeichert werden.

    SQL
    CREATE TABLE `contactform` (
      `id` int unsigned NOT NULL AUTO_INCREMENT,
      `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
      `nachricht` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
      `bearbeitet` varchar(25) COLLATE utf8_unicode_ci NOT NULL,
      `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
      `updated_at` timestamp NULL DEFAULT NULL,
      PRIMARY KEY (`id`), UNIQUE (`email`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


    Die Nachricht, die über eine Textarea übermittelt wird und in der Zeile "nachricht" gespeichert wird, wird abgeschnitten. Das heißt, dass nicht die komplette Nachricht gespeichert wird, sondern nur ein Teil davon. Woran kann das liegen?:/

  • Hallo zusammen


    Meine Kenntnisse und mein Verständnis für php sind noch sehr begrenzt.


    Dank vielen Programmieren, die Ihren Code netterweise zugänglich machen, genügten sie, um ein Kontaktformular „zu basteln“. Nun, was meine Frage betrifft und hier wird deutlich, dass mir das Verständnis noch fehlt, beim Aufruf der danke.php wird nur die Seite contact.php aufgerufen. Allerdings mit der danke.php, welche einfach oben am Kontaktformular angehängt ist.


    Könnte mir evtl. jemand erklären, weshalb das so ist und wie ich das ändern könnte?


    Hier mein Code:


    <?php

    mb_internal_encoding("UTF-8");

    if($_SERVER[ 'REQUEST_METHOD' ] == 'POST'){

    include_once('antispam.inc.php');

    if(!$errors){

    include_once('mail.inc.php');

    }

    }

    ?>


    <!doctype html>


    <?php if(isset($_POST[ 'submit' ]) && empty($errors) == false) {?>

    <div style="background:#FCC">

    <strong>Bitte überprüfen Sie Ihre Angaben!</strong><br/>

    <?php echo '<ul><li>'.implode('</li><li>',$errors).'</li></ul>'; ?>

    </div>

    <?php } ?>


    <fieldset>

    <h2>Bitte beachten Sie dass Felder die mit * gekennzeichnet sind, Pflichtangaben sind.</h2>

    <form id="phpform" method="post" action="<?php echo htmlspecialchars($_SERVER[ 'PHP_SELF' ]);?>" enctype="multipart/form-data" autocomplete="off">

    <label for="name">Name<span>*</span></label>

    <input name="name" type="text" autofocus="autofocus" required="required" value="<?=(isset($_POST[ 'name' ])) ? $_POST[ 'name' ] :''?>">

    <p><label for="email">Email<span>*</span></label>

    <input name="email" type="text" required="required" value="<?=(isset($_POST[ 'email' ])) ? $_POST['email'] :''?>">

    <label for="message">Nachricht<span>*</span></label><br/>

    <textarea name="message" rows="8" required="required"><?=(isset($_POST[ 'message' ])) ? $_POST[ 'message' ] :''?></textarea>

    <label for="spam">Ich Versende keinen Spam<span>*</span></label>

    <input name="gender" type="checkbox" required="required" <?=(isset($_POST[ 'gender' ])) ? "checked='checked'" : ''?>>

    <input type="submit" name="submit" value="Absenden">

    <div class="terms">

    <labe>Folgende Felder bitte frei lassen!</label>

    <input type="checkbox" name="terms">

    </div>

    </form>

    </fieldset>




    CODE ANTISPAM.INC.PHP:


    <?php

    mb_internal_encoding("UTF-8");

    error_reporting(E_ALL ^ E_NOTICE);


    //Variablen zum entfernen nicht benötigter Zeichen

    $name = $email = $gender = $message;

    if ($_SERVER['REQUEST_METHOD'] == 'POST'){

    $name = test_input ($_POST[ 'name' ]);

    $email = test_input ($_POST[ 'email' ]);

    $message = test_input ($_POST[ 'message' ]);

    $gender = test_input ($_POST[ 'gender' ]);

    }


    function test_input ($data){

    $data = trim ($data);

    $data = stripcslashes ($data);

    $data = htmlspecialchars ($data);

    }

    //Regex

    //$reg_ex_text = "/^([a-zA-ZüÜäÄöÖéÉüÈÇ]){1}?([a-zA-ZüÜäÄöÖöüâàÉÈÂÇß\-\.\s\'\´\`]*$/";


    //Spamcheck - Fehlerausgabe

    $errors = array();

    //Prüfen ob Formular abgesendet

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


    //Spamcheck mit jedem neuem Absenden zurücksetzen

    $spamcheck = false;

    //Spamcheck

    if (!isset ($_POST [ 'repeat_email' ]) || !empty ($_POST [ 'repeat_email' ]) || isset ($_POST [ 'terms' ])) {

    $errors[] = "Zusatzfelder wurden ausgefüllt, wir vermuten Spam und brechen hier ab.";

    } else {

    $spamcheck = true;

    }

    // Eingaben Validieren

    if ( $spamcheck == true ) {


    if (empty ($_POST [ 'name' ])) { //Wenn Name leer

    $errors[] = "Bitte geben Sie Ihren Namen an";

    }

    if (!empty ($_POST [ 'name' ])){ //mit trim und Stripslashes Zeichen entfernen, mit htmlspecialchars Cross-Site-Scripting vorbeuen

    $name = test_input ($_POST [ 'name' ]);

    }


    if (empty ($_POST [ 'email' ])) { //Wenn Email leer

    $errors[] = "Bitte Emailadresse angeben";

    } elseif (!filter_var ($_POST [ 'email' ], FILTER_VALIDATE_EMAIL)) { //Emailformat überprüfen ab PHP 5.2

    $errors[] = "Bitte geben Sie ein gültige Emailadresse an";

    }

    if (!empty ($_POST [ 'email' ])){

    $email = test_input ($_POST ['email']);

    }


    if (empty ($_POST [ 'message' ])) { //Wenn Nachricht leer

    $errors[] = "Bitte geben Sie Ihre Nachricht ein";

    }

    if (!empty ($_POST [ 'message' ]));

    $message = test_input($_POST['message']);


    if (!isset ($_POST [ 'gender' ])) { //Wenn Spamcheck nicht markiert

    $errors[] = "Bitte bestätigen Sie den Spamcheck";

    }

    }


    if (isset ($_POST [ 'submit' ]) && empty( $errors ) && $spamcheck == true ) {

    // Spamtest bestanden, alle erforderlichen Felder richtig ausgefüllt

    //Email Versand

    require_once('danke.php'); //Dankeseite einbinden

    }

    }

    ?>


    CODE MAIL.INC.PHP:


    <?php

    // Variablen initiieren

    $to="absender@domain.ch";

    $subject="Anfrage vom Kontaktvormular";

    $url_ok = "danke.php";

    $message="Name: ".$_POST['name']."\n"

    ."Email: ".$_POST['email']."\n"

    ."Nachricht: ".$_POST['message']."\n";

    $header="From:test1@vcap.me\nX-Mailer:PHPmail()\nX-Priority:1\nMSMail-Priority:high";


    //Mail versenden

    $bool=mail($to,$subject,$message,$header,$url_ok);


    //Bestätigung

    if ($bool) {echo "E-Mail wurde erfolgreich versandt!";

    }

    ?>

  • Ich empfehle beim Verbindungsaufbau als ini-command

    SQL
    sql_mode = 'STRICT_ALL_TABLES';

    mitzugeben.

    Das verhindert, dass die Daten verändert eingefügt werden.


    Hier im Fall hättest Du dann einen Fehler bekommen, der DIr sagt, dass die Value zu lang ist.

    Bsp:

    Code
    ERROR 1406 (22001): Data too long for column 'nachricht' ...


    Default versucht der MySQL-Server die Daten "reinzuquetschen".

    Bei Zahlen wird dann schon mal aus -1 eine 1, was ganz böse ausgehen kann :)

  • Sorry, das mit den einklicken war ein Versehen! Ich hab das erst nach dem Absenden bemerkt.


    Ich werde mal versuchen, mir mit euren Beiträgen und Links ein besseres Formular aufzubauen. Merci für euer Feedback.

  • Für alle Forumuser welche Hilfe zu ihrem Problem brauchen sollen ein eigenes Thema eröffnen und nicht in das Thema eines anderes Users posten!


    Da die Frage des Themenerstellers bereits geklärt ist wird nun das Thema geschlossen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!