form-problem

kenny
schönen guten morgen,

hab ein formular-problem. will den php-code auslagern, deshalb benutze ich eine datei für den mail-send-kram und eine für die html-form. hab den code mal vereinfacht wiedergegeben. mein problem: wenn im name-feld nichts eingegeben wird, erscheint die ua. fehlermeldung auf dem bildschirm, jedoch auf einer weissen page (logisch). ich möchte aber, dass verschiedene meldungen (fehlermeldung bei unausgefülltem name-feld, meldung bei erfolgreichem versand etc.) auf einer bestimmten stelle in der form.html-datei erscheinen. aber ich krieg das irgendwie nicht hin. ganz toll wäre natürlich noch, wenn der vom user eingegebene text bei einer fehlermeldung nicht automatisch wieder verschwindet.

form.html:
Zitat:

<form action="mail.php" method="post" enctype="application/x-www-form-urlencoded">
<p>
name <input type=text name="name" maxlength="20" />
<br/>
email <input type=text name="email" maxlength="30" />
<br/>
nachricht <textarea type=text name="nachricht" cols="66" rows="22" wrap="physical"></textarea>
<br/>
<input class="submit" name ="send" type="submit" value="senden" />
<br/>
<input class="submit" type="reset" value="löschen" />
<br/>
HIER SOLL DIE NACHRICHT EINGEFÜGT WERDEN!
</p>
</form>


mail.php-datei:
php:
1:
2:
3:
4:
5:
6:
<?php if ($name == "")
{ die("bitte namen eingeben"); }

else
mail("kenny@is.dead","form mailer antwort",$nachricht,"from: $name <$email>");
header("location: [URL]http://www.kenny.com/form.html[/URL]"); ?>


ps: antworten bitte anfänger-konform posten. und bitte mit erklärung, weil ich nicht einfach ne lösung haben möchte, sondern was lernen will smile

danke leute,
kenny
max77
Hi!

Du könntest Deine Fehlermeldung in einer Variablen Speichern.
Das geht mit
php:
1:
<?php $variable =  "bitte namen eingeben"?>


Anschließend könntest Du in Deiner HTML-Datei die Werte mit
php:
1:
<?php echo $variable ?>

ausgeben lassen.

Achtung: da Du dann im HTML-Code PHP einfügst mußt Du die Datei auch .php nennen. Das hat auf den Teil mit HTML keinerlei Auswirkungen.

Hoffe es war verständlich (bin im Erklären nicht der Beste). Falls nicht, einfach noch mal melden.

Gruß Dirk
kenny
das funktioniert leider nicht unglücklich
mein code sieht jetzt folgendermaßen aus:

form.php:
Zitat:

<form action="mail.php" method="post" enctype="application/x-www-form-urlencoded">
<p>
name <input type=text name="name" maxlength="20" />
<br/>
email <input type=text name="email" maxlength="30" />
<br/>
nachricht <textarea type=text name="nachricht" cols="66" rows="22" wrap="physical"></textarea>
<br/>
<input class="submit" name ="send" type="submit" value="senden" />
<br/>
<input class="submit" type="reset" value="löschen" />
<br/>
<? echo $answer ?>
</p>
</form>


mail.php:
Zitat:

if ($name == "")
{ die("bitte namen eingeben"); }

else
{
$answer = "mail erfolgreich verschickt";
mail("kenny@is.dead","form mailer antwort",$nachricht,"from: $name <$email>");
header("location: http://www.kenny.com/form.php");
}


das mailsenden funktioniert, aber ansonsten ist der wurm drin. ich will ja die rückleitung zum form.php mit header und gleichzeitig die answer-nachricht. kann man das irgendwie zusammen in einem "die" oder "header" verwurschteln?

kenny
max77
Ich kenne Deinen Script leider zu wenig bzw. weiß nicht genau, wie Du von der einen die andere Datei aufrufst.
Ich würde raten, die Ausgabe statt in einer Normalen in einer Session-Variablen zu speichern. Dann mußt Du aber vorher imnmer die Session starten, bevor Du etwas ausgibst.

Gruß Dirk
kenny
das mit ner session-variablen zu machen, ist mir viel zu kompliziert und zu umständlich. bin ausserdem noch nicht so code-erfahren. das script ist eigentlich vollständig, so wie ich es gepostet habe. nur der header in der form.php-datei fehlt zb. aber der wird ja nicht von der php-logik gebraucht.

die mail.php-datei wird allein mit
Zitat:

<form action="mail.php" method="post" enctype="application/x-www-form-urlencoded">

aufgerufen. liegt da vielleicht der wurm begraben? wenn ja, wie könnte man das tier wieder ausbuddeln und wiederbeleben?

kenny
max77
Wenn der Text in der ursprünglichen Form erscheinen soll, mußt Du diese auch wieder aufrufen. Ich würde dies mit "include" machen, dann sollte da auch mit der Variablen funktionieren.
Habe es nicht getestet, aber so sollte es funktionieren:

mail.php:
php:
1:
2:
3:
4:
5:
6:
7:
8:
<?php if ($name == "") {
    $answer "bitte namen eingeben";
    include("form.php");
}

else
mail("kenny@is.dead","form mailer antwort",$nachricht,"from: $name <$email>");
header("location: [URL]http://www.kenny.com/form.html[/URL]"); ?>


form.php:
php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
<form action="mail.php" method="post" enctype="application/x-www-form-urlencoded">
<p>
name <input type=text name="name" maxlength="20" />
<br/>
email <input type=text name="email" maxlength="30" />
<br/>
nachricht <textarea type=text name="nachricht" cols="66" rows="22" wrap="physical"></textarea>
<br/>
<input class="submit" name ="send" type="submit" value="senden" />
<br/>
<input class="submit" type="reset" value="löschen" />
<br/>
<?php echo $answer ?>
</p>
</form>


Damit wird die form.php geladen und angezeigt, die Variable ist verfügbar und wird angezeigt. Beim ersten Aufruf ist die Variable "$answer" null, es wird nichts angezeigt.

Gruß Dirk
kenny
hey dirk,

das funktioniert einwandfrei smile vielen dank dir...

hab jetzt statt

php:
1:
<?php header("location: [URL]http://www.kenny.com/form.php[/URL]"); ?>


einfach

php:
1:
2:
<?php $answer "mail erfolgreich abgeschickt";
include("form.php"); ?>


geschrieben. so krieg ich auch ne meldung zurück wenns erfolgreich war.

eine frage hab ich allerdings noch. hast du eine idee wie man das bereits geschriebene bei einer fehlermeldung wieder zurückpostet? besser gesagt: ich schreibe ein paar sätze ins textfeld des formulars und vergesse meinen namen. drücke dann submit und ich werde über die mail.php zurück zu meinem formular geleitet, mit einer errormessage. doch der geschriebene text ist natürlich weg. sehr ärgerlich für den user, daher unabdingbar, finde ich.

grüße,
kenny
max77
Das ist relativ einfach:

Du setzt einfach die Variablen, die Du beim versenden von Mails benutzt als Standardwerte mit "value="xxx" in Deiner Form ein. Die sind dann beim ersten Aufruf null (da noch nix eingegeben) und beim wiederholten Aufruf ist der übergebene Text (den Du auch beim versenden der Mail nutzt) enthalten.

Für xxx mußt Du natürlich wieder mit <?php echo $variable ?> arbeiten.
Ich würde spätestens jetzt min. größere Teile der Datei auf php Umstellen, aber das ist Geschmacksache und es funzt auch, wenn Du nur dort wo es gebraucht wird php auf machst.

Gruß Dirk