form action - mailadresse einfügen

  • Themenstarter Themenstarter Gast170816
  • Beginndatum Beginndatum
G

Gast170816

Hallo,

habe ein tolles Mailformular gefunden, mit Captcha und allen tollen Sachen.
Jedenfalls wird auch "action" per PHP eingefügt.

So sieht das aus:
PHP:
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">

Was ruft dieser Befehl auf?
Ich habe keinen Zugriff auf irgendwelche Postfacheinstellungen, und kann also nicht irgendwie auf dem Server Mailadressen verändern oder so (auf dem Server liegen noch verschiedene fremde Webseiten und eben auch andere Mailadressen).

So wie das jetzt oben steht wird ja nicht meine gewünschte Mailadresse aufgerufen... wie kann ich eine Mailadresse meiner Wahl als Empfänger festlegen?
einfach "mail@homepage.de" einfügen entspricht vermutlich nicht dem Sinn eines Captcha-Mailformulars.

Dürfte man sowas machen:
PHP:
<form action="<?php include 'adresse.php'; ?>" method="post" enctype="multipart/form-data">
Und dann speicher ich eine php-Datei ab, wo nur drinsteht "mail@homepage.de"

Kenne mich nicht wirklich mit PHP aus, was muss ich aber nur machen um die Mailempfänger-Adresse ordnungsgemäß reinzubekommen?

PS: Hier noch die Codes zum kompletten Mailformular und den zwei dazugehörigen PHP-Dateien...
Code:
===MAILFORMULAR================

<?php if(!empty($error)) echo '<div class="error">'.$error.'</div>'; ?>
<?php if(!empty($accept)) echo '<div class="accept">'.$accept.'</div>'; ?>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
	<p><input type="text" name="name" /> Name*</p>
	<p><input type="text" name="email" /> Email*</p>
	<p><textarea name="message"></textarea> </p>
	
	
	<img class="fl" src="js/captcha.php"/>
	<div class="fr">		
		<p class="small">Spamschutz;-). Bitte die links angezeigte Buchstabenfolge eingeben.</p>
		<p><input class="captcha" type="text" name="code" /></p>
	</div>
	
    <p class="clear"><input type="submit" name="submit" value="Nachricht abschicken" class="button" /></p>

</form>


=====DAZUGEHÖRIGE PHP-DATEIEN=================
<?php

session_start();

$string = '';

for ($i = 0; $i < 5; $i++) {
	// this numbers refer to numbers of the ascii table (lower case)
	$string .= chr(rand(97, 122));
}

$_SESSION['rand_code'] = $string;

$dir = '../fonts/';

$image = imagecreatetruecolor(160, 60);
$black = imagecolorallocate($image, 0, 0, 0);
$color = imagecolorallocate($image, 14, 191, 233); // red
$white = imagecolorallocate($image, 255, 255, 255);

imagefilledrectangle($image,0,0,399,99,$white);
imagettftext ($image, 30, 0, 10, 40, $color, $dir."arialf", $_SESSION['rand_code']);

header("Content-type: image/png");
imagepng($image);

?>

=============
=============

<?php

session_start();

if(isset($_POST['submit'])) {
	
	if(!empty($_POST['name']) && !empty($_POST['email']) && !empty($_POST['message']) && !empty($_POST['code'])) {
	
		if($_POST['code'] == $_SESSION['rand_code']) {
		
			// send email
			$accept = "Thank you for contacting me.";
		
		} else {
		
			$error = "Please verify that you typed in the correct code.";
		
		}
		
	} else {
	
		$error = "Please fill out the entire form.";
	
	}

}

?>

==========================================================
(Im Ordner "fonts" ist dann die Schriftart, mit der der Captchatext gemacht wird)
 
In dem action Tag ruft die Datei sich selbst wieder auf (PHP_SELF). Du müßtest also die verschiedenen Dateien zu einer zusammenbauen.

Im übrigen fehlt in dem ganzen Script der endgültige Mail Befehl (da wo "// send email" steht). Falls du also das nicht für die Darstellung hier gekürzt hast, wird damit nie eine Mail versendet werden.
 
Hallo,
jetzt hab ich mal den PHP-Schnipsel, der das Ding sendet in die Datei zum Kontaktformular mit reingemacht.

Ich hab jetzt also diese "mail()" entdeckt und mal versucht für meine Zwecke entsprechend einzubauen. Es funktioniert nur leider nicht... mein Mailformular ist auch ein bisschen anders, Sachen wie "name", "email", "message" sind nicht in Strings, sie stehen da halt nur als input-Felder und sind mit name="..." gekennzeichnet.
Der PHP-Teil der versendet prüft sie auch so auf dieser Basis ab, ob alle Felder ausgefüllt sind.

Das hab ich jetzt also mir mal ausgedacht... funktioniert halt leider so nicht.
Was muss ich anders schreiben?
PHP:
<?php

session_start();

if(isset($_POST['submit'])) {
	
	if(!empty($_POST['name']) && !empty($_POST['email']) && !empty($_POST['message']) && !empty($_POST['code'])) {
	
		if($_POST['code'] == $_SESSION['rand_code']) {
		
			mail('ich@homepage.de', 'homepage-kontakt', ['message'], ['email'] && ['name']);
			$accept = "Vielen Dank für die Nachricht.";
		
		} else {
		
			$error = "Bitte nocheinmal den Spamschutz-Code pr&uuml;fen.";
		
		}
		
	} else {
	
		$error = "Bitte das ganze Formular ausf&uuml;llen.";
	
	}

}

?> 
<!DOCTYPE html
     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
 <!--head hab ich der Übersichtlichkeit wegen mal auskommentiert-->	
</head>
<body id="home">
			
<div id="main">
	<h2 id="kontakt">Kontakt</h2>

	<p>Um mit mir Kontakt aufzunehmen, bitte einfach das Mailformular nutzen:
	</p>
					
<?php if(!empty($error)) echo '<div class="error">'.$error.'</div>'; ?>
<?php if(!empty($accept)) echo '<div class="accept">'.$accept.'</div>'; ?>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
<fieldset>
	<p><input type="text" name="name" /> Name*</p>
	<p><input type="text" name="email" /> Email*</p>
	<p><textarea name="message" rows="10" cols="10"></textarea> </p>

	
	
	<img class="fl" src="js/captcha.php" alt="captcha-Bild" />
	<div class="fr">		
		<p class="small">Spamschutz;-). Bitte die Buchstabenfolge eingeben.</p>
		<p><input class="captcha" type="text" name="code" /></p>
	</div>
	
    <p class="clear"><input type="submit" name="submit" value="Nachricht abschicken" class="button" /></p>
</fieldset>
</form>					
					
</div> <!--main-->
				
</body>
</html>

Meine Empfänger-Adresse und Betreff will ich also selbst gleich fest vorgeben und die Sachen, wie "name", "email", "message" sollen dann aus dem Formular kommen.
 
Versuchs mal so (ungetestet)

PHP:
        if($_POST['code'] == $_SESSION['rand_code']) {
            $name = $_POST['name']; // Nicht vergessen alles noch auf schadcode zu prüfen
            $email = $_POST['email'];
            $nachricht = $_POST['message'];
            $message = $name."mit folgender email adresse".$email" hat der folgendes geschrieben".$message;
        
            mail('ich@homepage.de', 'homepage-kontakt', $message);
            $accept = "Vielen Dank für die Nachricht.";

mfg
 
Vielen Dank für den Tipp!

Ich hab noch selbst entdeckt, bei

PHP:
$message = $name."mit folgender email adresse".$email" hat der folgendes geschrieben".$message;

muss es "$nachricht" heißen.

Und gings trotzdem noch nicht, da hab ich irgendwo gelesen, man muss die "$"-Dinger noch dahinter mit einem Punkt verknüpfen.

Also jetzt gehts jedenfalls! Toll!

PS: Und die Mailadresse... die nu per PHP in der sichtbaren HTML/PHP-Datei steht ist aber tatsächlich nicht irgendwie auslesbar Von Maschinen oder so
 
Ich nochmal:

Jetzt geht ja alles an sich... und gaaanz am Anfang war es auch noch valide, aber jetzt kommt folgende Fehlermeldung:

Line 62, Column 170: document type does not allow element "input" here; missing one of "p", "h1", "h2", "h3", "h4", "h5", "h6", "div", "pre", "address", "fieldset", "ins", "del" start-tag

…value="a3pq3j0o067bq9guph65jcne93" />

The mentioned element is not allowed to appear in the context in which you've placed it; the other mentioned elements are the only ones that are both allowed there and can contain the element mentioned. This might mean that you need a containing element, or possibly that you've forgotten to close a previous element.

One possible cause for this message is that you have attempted to put a block-level element (such as "<p>" or "<table>") inside an inline element (such as "<a>", "<span>", or "<font>").

PS: Ich habe es online validieren lassen... wenn man den Code einfügen würde kommen ja schonmal Fehler, weil die PHP-Klammern als HTML-Klammern interpretiert werden.

Na jedenfalls... irgendwas scheint mit dem Bereich <form> nicht zu stimmen (Zeile 62 ist der Bereich wo <form> losgeht... wobei "value" ja eigentlich ne ganze Ecke weiter unten auftritt..und eigentl. steht darinnen ja auch nur "Nachricht abschicken" und nicht diese lange Zahl). Der entsprechende Teil (nur mal der mittlere Content-Teil) sieht in der Original-PHP so aus:

PHP:
<div id="main">
					<h2 id="kontakt">Kontakt</h2>

					<p>Um mit mir Kontakt aufzunehmen, bitte einfach das Mailformular nutzen:
					</p>
					
<?php if(!empty($error)) echo '<div class="error">'.$error.'</div>'; ?>
<?php if(!empty($accept)) echo '<div class="accept">'.$accept.'</div>'; ?>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
<fieldset>
	<p><input type="text" name="name" /> Name*</p>
	<p><input type="text" name="email" /> Email*</p>
	<p><textarea name="message" rows="10" cols="10"></textarea> </p>

	
	
	<img class="fl" src="js/captcha.php" alt="captcha-Bild" />
	<div class="fr">		
		<p class="small">Spamschutz;-). Bitte die Buchstabenfolge eingeben.</p>
		<p><input class="captcha" type="text" name="code" /></p>
	</div>
	
    <p class="clear"><input type="submit" name="submit" value="Nachricht abschicken" class="button" /></p>
</fieldset>
</form>	
				
				</div> <!--main-->

Und als HTML online dann so:
HTML:
<div id="main">

					<h2 id="kontakt">Kontakt</h2>

					<p>Um mit mir Kontakt aufzunehmen, bitte einfach das Mailformular nutzen:
					</p>
					

<form action="kontakt.php" method="post" enctype="multipart/form-data">
<fieldset>
	<p><input type="text" name="name" /> Name*</p>
	<p><input type="text" name="email" /> Email*</p>

	<p><textarea name="message" rows="10" cols="10"></textarea> </p>

	
	
	<img class="fl" src="js/captcha.php" alt="captcha-Bild" />
	<div class="fr">		
		<p class="small">Spamschutz;-). Bitte die Buchstabenfolge eingeben.</p>
		<p><input class="captcha" type="text" name="code" /></p>
	</div>
	
    <p class="clear"><input type="submit" name="submit" value="Nachricht abschicken" class="button" /></p>

</fieldset>
</form>					
				</div> <!--main-->

Ich weiß, dass so ein Fehler manchmal kommt, weil man die input-Felder in <p>'s machen soll... bzw. ich konnte andere Fehler noch beheben, in dem ich innerhalb von <form> noch <fieldset> drumgelegt hab.

Aber nur weiß ich echt nicht mehr, was falsch sein soll...
 
Na jedenfalls... irgendwas scheint mit dem Bereich <form> nicht zu stimmen (Zeile 62 ist der Bereich wo <form> losgeht... wobei "value" ja eigentlich ne ganze Ecke weiter unten auftritt..und eigentl. steht darinnen ja auch nur "Nachricht abschicken" und nicht diese lange Zahl).
Das riecht nach einem versteckten Element.

PS: Ich habe es online validieren lassen... wenn man den Code einfügen würde kommen ja schonmal Fehler, weil die PHP-Klammern als HTML-Klammern interpretiert werden.
Zum Validieren wird der geparste PHP-Code, also die HTML-Ausgabe des Browsers, dem Validator übergeben.

mfg Maik
 
Ich hab jetzt nochmal per URL validieren lassen und mir direkt danach per Rechtsklick den Quellcode zeigen lassen.
Jetzt sieht man tatsächlich ein "hidden"-input-Feld und außerdem haben Links, wie z.B. die Navigation plötzlich so Zahlen hinten angehängt.

Der Quellcode sieht also auf einmal so aus (jetzt mal das Ganze):
HTML:
<!DOCTYPE html
     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<meta name="language" content="de" />
	<meta name="author" content="" />
	<meta name="copyright" content="" />
	<meta name="keywords" content="" />

	<link href="css/basic.css" rel="stylesheet" type="text/css" media="screen" />

	<link href="css/print.css" rel="stylesheet" type="text/css" media="print" />
	<link href="css/slimbox2.css" rel="stylesheet"  type="text/css" media="screen" />
	<!--[if IE]>
		<link href="css/ie.css" rel="stylesheet" type="text/css" media="screen" />
	<![endif]-->

	<title>Kontakt</title>
	
</head>
<body id="home">

	<div id="container">
		
		<div id="top">

			<div id="header">

				
			<ul class="navigation">
					<li><a href="start.html?PHPSESSID=febv449f0gmuk4vs745kpr6ec2">start</a></li>
					
					<li><a href="referenzen.html?PHPSESSID=febv449f0gmuk4vs745kpr6ec2">referenzen</a></li>

					<li><a href="links.html?PHPSESSID=febv449f0gmuk4vs745kpr6ec2">links</a></li>
					<li><a href="kontakt.php?PHPSESSID=febv449f0gmuk4vs745kpr6ec2">kontakt</a></li>
				</ul>  <!--ul navigation-->
			</div> <!--header-->
		
		
		
			
						
			<div id="content">
				
				<div id="main">

					<h2 id="kontakt">Kontakt</h2>

					<p>Um mit mir Kontakt aufzunehmen, bitte einfach das Mailformular nutzen:
					</p>
					

<form action="kontakt.php" method="post" enctype="multipart/form-data"><input type="hidden" name="PHPSESSID" value="febv449f0gmuk4vs745kpr6ec2" />
<fieldset>
	<p><input type="text" name="name" /> Name*</p>
	<p><input type="text" name="email" /> Email*</p>

	<p><textarea name="message" rows="10" cols="10"></textarea> </p>

	
	
	<img class="fl" src="js/captcha.php" alt="captcha-Bild" />
	<div class="fr">		
		<p class="small">Spamschutz;-). Bitte die Buchstabenfolge eingeben.</p>
		<p><input class="captcha" type="text" name="code" /></p>
	</div>
	
    <p class="clear"><input type="submit" name="submit" value="Nachricht abschicken" class="button" /></p>

</fieldset>
</form>	
				
					
				</div> <!--main-->

				<div id="sidebar">

					<a href="img/Bild1.jpg?PHPSESSID=febv449f0gmuk4vs745kpr6ec2" rel="lightbox-cats"><img src="img/Bild-thumb.jpg" alt="das Bild" /></a>

					
				</div> <!--sidebar-->
			</div> <!--content-->

		</div> <!--TOP-->

		<div id="bottom">

			<div id="footer">
				

				<ul class="navigation">
					<li><a href="start.html?PHPSESSID=febv449f0gmuk4vs745kpr6ec2">start</a></li>

					<li><a href="referenzen.html?PHPSESSID=febv449f0gmuk4vs745kpr6ec2">referenzen</a></li>
					<li><a href="links.html?PHPSESSID=febv449f0gmuk4vs745kpr6ec2">links</a></li>
					<li><a href="impressum.html?PHPSESSID=febv449f0gmuk4vs745kpr6ec2">impressum</a></li>

					<li><a href="kontakt.php?PHPSESSID=febv449f0gmuk4vs745kpr6ec2">kontakt</a></li>
				</ul>  <!--ul navigation-->

			</div> <!--footer-->
		</div> <!--BOTTOM-->
		
	</div> <!--container-->
        <script type="text/javascript" src="js/jquery-1.3.2.min.js"></script>

	<script type="text/javascript" src="js/slimbox2.js"></script> 
</body>
</html>

Wo kommen denn jetzt plötzlich auch die Zahlen bei den Links her, z. B. href="impressum.html?PHPSESSID=febv449f0gmuk4vs745kpr6ec2"

Und was machen, mit dem "hidden"-input-Feld?
Vermutlich wärs gelöst, wenn ich ein <p> drummache, aber dieses Feld existiert in meinem Original-PHP-Formular gar nicht, auch der obere PHP-Code, der das Ausfüllen der Felder prüft und dann versendet sowie in captcha.php, wo der Captcha-Code generiert wird (die ich beide oben im ersten Beitrag schon gleich gezeigt habe) hat irgendwie nix, wo ich sehen kann, dass dieser dieses input-Feld erzeugt.
 
Hallo!
Das PHP-Skript verwendet Sessions. Die ID dieser Session wird an die Links angehängt. Dadurch kann man mehrere Aufrufe einem Benutzer zuordnen.

Das Hidden-Feld dürfte auch auf Grund der Verwendung von Sessions verwendet werden. Soweit ich weiß wird beim Verwenden von Sessions jedem Formular automatisch ein solches Feld angehängt.

mfg flo
 
Zuletzt bearbeitet:
Zurück