Formular

kosovafan

Erfahrenes Mitglied
Hallo,

ich habe mir einmal ein Formular gebaut, doch irgendwie funktioniert das nicht. Es gibt keinerlei Fehlermeldung in der log, wenn ich aber das Formular ausfülle und absende wird es nur geleert. Ich habe jetzt mehre Varianten durch, immer mit dem gleichen Resultat. Könnt Ihr mir einen Tipp geben wo ich den Fehler mache?

PHP:
<?php
//error_reporting(E_ALL);
//ini_set("display_errors", 1);
//var_dump($_POST);
if (isset($_POST['senden'])) {
	$fehler = "";
	$name = "";
	$email = "";
	$nachricht = "";

	if (isset($_POST['name'])) {
		if (htmlspecialchars(trim($_POST['name']) != '')) {
			$name = $_POST['name'];
		}else{
			$fehler = $fehler . "<h1>Bitte geben Sie Ihren Namen ein!</h1>";
		}
	}

	if (isset($_POST['email'])) {
		if (htmlspecialchars(trim($_POST['email']) != '')) {
			$email = $_POST['email'];
		}else{
			$fehler = $fehler . "<h1>Bitte geben Sie Ihre Email Adresse ein!</h1>";
		}
	}

	if (isset($_POST['nachricht'])) {
		if (htmlspecialchars(trim($_POST['nachricht']) != '')) {
			$nachricht = $_POST['nachricht'];
		}else{
			$fehler = $fehler . "<h1>Ohne Nachricht benötigen Sie kein Formular!</h1>";
		}
	}


if ($fehler == '') {
      @mail("siefke@email.de", "Kontakt", "$nachricht", "FROM: $email");
      echo "<h1>Vielen Dank für Ihre Nachricht!</h1>";
      exit();
    } else {
      echo "<h1>$fehler</h1>";
    }
}
?>

Das Formular:

HTML:
<form id="kontaktformular" action="" method="post">
<fieldset>
<label>Name</label>
<input class="text" type="text" name="name" value="<?php if (isset ($_POST['name'])) {echo $name;}?>" />
<label>Ihre Email</label>
<input class="text" type="text" name="email" value="<?php if (isset ($_POST['name'])) {echo $email;}?>" />
<label>Ihre Nachricht</label>
<textarea class="textarea" name="nachricht" rows="6" cols="20" ><?php if (isset ($_POST['name'])) {echo $nachricht;}?></textarea>
<input type="hidden" name="date" id="date" value="<?php time() ?>" />
<input name="senden" type="submit" value="Absenden" class="submit" />
</fieldset>
</form>

Die Ausgabe von var_dump($_POST); liefert das gleiche wie bei den einfachen Formular was funktioniert.

Code:
array(4) { ["name"]=> string(13) "Silvio Siefke" ["email"]=> string(13) "siefke@ich.ms" 
["nachricht"]=> string(16) "Wie geht es dir?" ["senden"]=> string(8) "Absenden" }

Vielen Dank!


Silvio
 
Zuletzt bearbeitet:
Hallo,

danke, oh man und ich sitze daran und erkenne es nicht einmal. Obwohl var_dump das senden ausgibt, submit aber nicht.

Vielen Dank.


Silvio
 
Klar gibt var_dump die Werte aus. Das Formular wurde ja auch abgeschickt, du hast für die Prüfung nur den falschen Wert/die falsche Variable genommen.

Da diese nicht existiert, konnte die Prüfung auch nie TRUE ergeben und somit kamst du auch nie in den IF-Block.

Submit als Variable gibt es nicht, das ist der Typ des Buttons!!
 
Hallo,


das stimmt, ich hatte mich an den Video2Brain Training ein wenig gehalten, deshalb kam die Deklaration zu Stande, aber nach einen Blick im Code hat er den Button auch mit den Namen submit versehen. Das hatte ich vorher nicht beachtet. War mein Fehler.

Was bedeutet die Meldung Notice: Undefined index: name, wenn ich im HTML Formular die Value Werte mit zum Beispiel <?php echo htmlentities($_POST['name']); ?> fülle?

Sicherheit für das Formular okay, oder sollte ich noch etwas einbauen?

Spam, ich weiß nicht was ich hier nutzen sollte. Captcha finde ich auf manchen Webseiten unerträglich, wollte das deshalb nicht nutzen. Ich hatte etwas von Email Checks gelesen, Time Funktion klang auch interessant. Hat hier jemand Empfehlungen?


Silvio
 
Der Fehler tritt vermutlich immer dann auf wenn das Formular das erste Mal geladen wird. Dann existieren die ganzen POST-Variablen ja nicht und du kannst sie auch nicht ausgeben.

Du kannst vor den Variabkennamen das "@" Zeichen schreiben, dadurch werden solche Fehlermeldungen unterdrückt (ist aber bei vielen nicht gerne gesehen).

Andere Möglichkeit wäre das du die Variablen $name, $email und $nachricht ganz am Anfang mit "" deklarierst damit sie vorhanden sind. Dann prüfst ja ob z.B. $_POST["email"] gesetzt ist und übergibst diesen Wert dann an die Variable $email.

Gibt jetzt einfach bei den echos diese Variablen an. Wurde etwas eingegeben, wird es angezeigt. Wenn nicht dann nicht.

Captcha kommt immer darauf an wie es gemacht ist, finde ich eigentlich ganz ok.

Du kannst aber auch hergehen und einen Satz wie z.B. "Wieviele Beine hat eine Spinne?" oder "Welche Farbe hat ein Esel?" hinschreiben. Jemand der lesen kann wird als Lösung 8 bzw. grau eintragen. Wenn das Formular maschinell befüllt wird, ist die Wahrscheinlichkeit darauf nicht sehr groß.
 
Hallo,


ich habe es einmal so gemacht, wie du gesagt hast. Jetzt geht das auch.

HTML:
<form id="kontaktformular" action="" method="post">
<fieldset>
        <label>Name</label>
        <input class="text" type="text" name="name" value="<?php if (isset($_POST['name'])) { echo $name;} ?>" />
        <label>Ihre Email</label>
        <input class="text" type="text" name="email" value="<?php if (isset($_POST['name'])) { echo $email;} ?>" />
        <label>Ihre Nachricht</label>
        <textarea class="textarea" name="nachricht" rows="6" cols="20" ><?php if (isset($_POST['name'])) { echo $nachricht;} ?></textarea>
        <input type="hidden" name="date" id="date" value="<?php time() ?>" />
        <input name="senden" type="submit" value="Absenden" class="submit" />
</fieldset>
</form>


Vielen Dank! Ich habe zurzeit noch eine einfache Rechenaufgabe zu lösen, was soweit auch ganz gut läuft. Er gibt zwar keine Fehlermeldung aus, wenn man sich verrechnet aber vielleicht nutze ich das weiter.


Silvio
 
Also wenn kein Fehler kommt wenn man sich verrechnet hat, macht es doch gar keinen Sinn.
Außerdem sind anscheinend einige Robots sogar so gut das sie Zahlen bzw. Rechenaufgaben lesen und lösen können.

Es gibt da unzählige Möglichkeiten, die "einfache" Rechenaufgabe würde ich aber nicht nehmen. Es sollte ein bisschen logisches Denken zum Lösen enthalten sein, das können Computer am wenigsten.
 
Hallo,

ich denke das ist meine Abfrage die irgendwie nicht passt, bin mir hier aber nicht sicher.

PHP:
<?php
	// Ask for filled fields
	if(!empty($_POST['name']) && !empty($_POST['email']) && !empty($_POST['nachricht']))
	{
	// Inital Session
	session_start();

	// Function for read the Captcha
	function encrypt($string, $key) {
	$result = '';
	for($i=0; $i<strlen($string); $i++) {
	$char = substr($string, $i, 1);
	$keychar = substr($key, ($i % strlen($key))-1, 1);
	$char = chr(ord($char)+ord($keychar));
	$result.=$char;
	}
	return base64_encode($result);
	}

   	// Variables for the Captcha Reading
	$sicherheits_eingabe = encrypt($_POST["sicherheitscode"], "29jfkd921");
	$sicherheits_eingabe = str_replace("=", "", $sicherheits_eingabe);

	// Formular Sending
	if(isset($_SESSION['rechen_captcha_spam']) AND $sicherheits_eingabe == $_SESSION['rechen_captcha_spam'])
	{
	unset($_SESSION['rechen_captcha_spam']);
	$name = htmlspecialchars("$_POST[name]");
	$email = htmlspecialchars("$_POST[email]");
	$nachricht = htmlspecialchars("$_POST[nachricht]");
	if (@mail("s@e.de", "Kontakt", "$nachricht", "FROM: $email"))
	{
	echo "<h1>Die Email ist unterwegs...</h1>";
	}
	}else {
	echo "<h1>Fehler Eins</h1>";
	}
	}
?>

Das ist mein aktuelles Formular, ich bin am umbauen, dafür benötige ich noch ein wenig Zeit. Ich denke hier stimmt die Fehlermeldung nicht, wenn etwas falsch gerechnet ist. Wenn falsch gerechnet ist, wird das Formular nur geleert aber nicht gesendet. Das Prinzip scheint zu funktionieren, nur egal was ich mache die Fehlermeldung wird nicht gesetzt. Der letzte Versuch endete sogar damit das gleich beim Aufruf Fehler Eins angezeigt wird.


Hast du ein Beispiel für deine Captcha Beispiele?



Gruß
Silvio
 
Zuletzt bearbeitet:
PHP:
<?php
session_start();

$frage = array(0 => "Welche Zahl gilt als Ungl&uuml;ckszahl?", 1 => "Welche Farbe hat ein Esel?", 2 => "Wieviele Beine hat eine Spinne?");
$antwort = array(0 => "13", 1 => "grau", 2 => "8");

if (isset($_POST["send"])) {
    if (strtolower($_POST["antwort"]) == $antwort[$_SESSION['antwort']]) {
        echo "Die Anwort ist richtig!<br />";
    } else {
        echo "Die Antwort ist leider falsch!<br />";
    }
}

?>

<form name="captcha" action="captcha.php" method="post">
<?php
$zufall = rand(0, 2);
$_SESSION["antwort"] = $zufall;
echo $frage[$zufall];
?>
<br />
<input type="text" name="antwort" value="" size="20" />
<br />
<input type="submit" name="send" value="Abschicken" />
</form>

Ist vom Prinzip ganz einfach aber es funktioniert. Die Fragen und Antworten speicherst du natürlich besser in einer Datenbank aber als Erklärung sollte es reichen.

Du kannst auch ein gelbes, ein rotes, ein blaues, ... und ein schwarzes Bild erstellen und gibts den Bildern dann genau diese Namen "gelb.jpg", "rot.jpg" usw.
Das Bild gibst du auf der Seite auf und man muss die Farbe eingeben. Zum Prüfen nimmst du einfach den Dateinamen und kappst die Dateiendung.

Das da oben wäre mit einen mehrdimensionalen Array vermutlich sauberer gelöst aber dazu bin ich (zumindest im Moment) zu blöd.
 
Zurück