Zur Navigation

Kontaktformular [2]

11 brandmaler

Hallo,
kann mir jemand einen Tipp geben wie ich bei meinem Kontaktformular
http://www.brandmalerei-online.de/deluxemailer/
eine weitere Schaltfläche neben der bestehenden einfügen kann die auf meine Startseite zurückführt

<?

// ----- E-Mail an die die Daten des Formulars gesendet werden sollen. ----- // 

$ihre_email 				= "meine@adresse.de"; 
$betreff_der_nachrichten 	= "Eine Nachricht von Ihrem Formular.";


// ----- Hier muss nichts mehr geändert werden ----- // 

require_once('func.inc.php');
$meldungen = "";

array_escape_and_strip(&$_POST);
array_unescape(&$_POST);

if(isset($_POST['action'])){
	
	switch($_POST['action']){
		
		case 'submit':
			
			if(!check_email($_POST['email'])){
				$meldungen .= "Bitte geben Sie eine gültige E-Mail Adresse ein.<br>";
				$error = 1;
			}
			if(empty($_POST['nachricht'])){
				$meldungen .= "Bitte geben Sie eine Nachricht ein.<br>";
				$error = 1;
			}
			
			if($error) { break; }
			
			$message =  "Es wurde eine Nachricht für Sie hinterlassen:\n\n".
						"Kontaktdaten:\n".
						"Name: $_POST[name]\n".
						"E-Mail: $_POST[email]\n".
						"Telefon: $_POST[telefonnummer]\n".
						"Fax: $_POST[faxnummer]\n".
						"------------------------- Nachricht -------------------------\n\n".
						"$_POST[nachricht]\n\n".
						"------------------------- ENDE -------------------------\n\n".
	                                       "------------------------- Nachricht -------------------------\n\n".
						"$_POST[Test]\n\n".
						"------------------------- ENDE -------------------------\n\n".
					"Uhrzeit: ".date('d.m.Y - H:i:s');
			
			$x = @mail($ihre_email,addslashes($betreff_der_nachrichten),$message,"from: $ihre_email");
			
			if($x){
				$meldungen .= "Vielen Dank für Ihre Nachricht!";
				$_POST = array();
				break;
			}
			
			$meldungen .= "Aufgrund eines technischen Fehlers konnten wir Ihre Nachricht nicht empfangen.<br>".
						  "Bitte setzen Sie sich anderweitig mit uns in Verbindung.<br>Vielen Dank für Ihr Verständnis!";
			break;
			
			
			
	}
	

}
// ----- ENDE PHP Sourcecode ----- // 
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Deluxe Formmailer 1.0</title>
<style type="text/css">
<!--
body,td,th {
	font-family: Arial, Helvetica, sans-serif;
	font-size: 12px;
	color: #000000;
}
body {
	background-color: #FFFFFF;
}
.Stil1 {
	color: #FF0000;
	font-weight: bold;
}
-->
</style></head>

<body>
<table width="500"  border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td><form name="form1" method="post" action="<?=$_SERVER['PHP_SELF']?>">
<table width="500"  border="0" cellspacing="0" cellpadding="4">
  <tr>
    <td colspan="2"><span class="Stil1"><?=$meldungen?></span></td>
    </tr>
  <tr>
    <td width="36%"><strong>Ihr Name*:</strong><br>
      <input name="name" type="text" id="name" value="<?=$_POST['name']?>"></td>
    <td width="64%"><strong>Ihre E-Mail*:</strong><br>
      <input name="email" type="text" id="email" value="<?=$_POST['email']?>"></td>
  </tr>
  <tr>
    <td><strong>Ihre Telefonnummer:</strong><br>
      <input name="telefonnummer" type="text" id="telefonnummer" value="<?=$_POST['telefonnummer']?>"></td>
    <td><strong>Ihre Faxnummer:</strong><br>
      <input name="faxnummer" type="text" id="faxnummer" value="<?=$_POST['faxnummer']?>"></td>
  </tr>
  <tr>
    <td colspan="2"><strong>Ihre Nachricht an uns*:<br>
    </strong>      <textarea name="nachricht" cols="50" rows="5" id="nachricht"><?=$_POST['nachricht']?></textarea>
  </td>
    </tr>
  <tr>
 <td colspan="2"><strong>Test*:<br>
    </strong>      <textarea name="nachricht" cols="50" rows="5" id="nachricht"><?=$_POST['nachricht']?></textarea>
      </td>
  </tr>
  <tr>
    <td colspan="2">* Pflichtfelder<br>
      <br>
      <input type="submit" name="Submit" value="Absenden">
      <input name="action" type="hidden" id="action" value="submit"></td>
  </tr>
</table>
</form></td>
  </tr>
</table>

</body>
</html>

Bin leider recht jungfäulich auf diesem Gebiet und weiss nur das <br> neue Zeile heißt (hihi).

Wäre über eine kleine Hilfestellung sehr dankbar.

04.11.2007 00:51 | geändert von Jörg: 04.11.2007 01:05

12 Jörg Kruse

Hallo brandmaler,

ich habe den Code mal aus dem Zitat- in einen Code-Block gesetzt - das liest sich dann besser :)

Zu deiner Frage: ich würde einen JavaScript-Button einbauen, der bei Klick auf die Startseite weiterleitet:

<input type="submit" name="Submit" value="Absenden">
<input name="action" type="hidden" id="action" value="submit">
<input type="button" value="Abbrechen" onclick="document.location.href='/'">

04.11.2007 01:08

13 brandmaler

Hallo Jörg,
vielen lieben Dank, klappt super, Du bist ein GENIE!!!

04.11.2007 03:20

14 Andal (Gast)

Hallo zusammen - wie ich sehe habt Ihr auch den Script - bloß dass ich Ihn um ein paar Extras erweitert habe.

Jetzt habe ich den Webspace gewechselt und mir kommt immer diese Meldung - obwohl alles immer noch perfekt funktioniert. Kann mir da jemand eine Lösung sagen?

Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of [runtime function name](). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. in do_shopkaufen.php on line 15

Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of [runtime function name](). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. in do_shopkaufen.php on line 16

in den Zeilen 15 und 16 der besagten do_shopkaufen.php steht geschrieben (eigentlich genauso wie oben):
array_escape_and_strip(&$_POST);
array_unescape(&$_POST);

Dies wird über
require_once('func.inc.php');
definiert (auch analog zu dem script oben).

In der func.inc.php steht zu array_escape_and_strip(&$_POST); folgendes:
function array_escape_and_strip($array){

	if(!is_array($array)){
		return;
	}
	
	foreach($array AS $key => $inhalt){
		if(is_array($inhalt)){
			$array_return[$key] = array_escape_and_strip($inhalt);
		} else {
			
			if(get_magic_quotes_gpc()){
				$array_return[$key] = trim(strip_tags($inhalt));
				continue;
			} 
			$array_return[$key] = trim(strip_tags(addslashes($inhalt)));
		}
		
	}

	$array = $array_return;
	
	return $array;

}


Zu array_unescape(&$_POST); schreibt die func.inc.php:
function array_unescape($array){

	if(!is_array($array)){
		return;
	}
	
	foreach($array AS $key => $inhalt){
		if(is_array($inhalt)){
			$array_return[$key] = array_escape_and_strip($inhalt);
		} else {
			$array_return[$key] = trim(stripslashes($inhalt));
		}
		
	}
	$array = $array_return;
	
	return $array;

}

So ich hoffe genug hier gepostet zu haben, damit keiner Hellsehen muss. Welche Lösungen gibt es?
Kann mir jemand einen Vorschlag machen?
Ich hoffe nicht dafür einen neuen Tread anbrechen zu müssen...

Vielen Dank für Eure Vorschläge im Voraus,
Andal

12.03.2008 22:06

15 Jörg Kruse

Hallo Andal,

in der englischsprachigen Version des PHP-Manual findet sich diese Erklärung:

Note that there's no reference sign on function call - only on function definition. Function definition alone is enough to correctly pass the argument by reference. In recent versions of PHP you will get a warning saying that "Call-time pass-by-reference" is deprecated when you use a & in foo(&$a);.

Quelle: http://de2.php.net/manual/en/language.references.pass.php

Probier mal, ob's beim Funktionsaufruf auch ohne dem "&" tut:

array_escape_and_strip($_POST);
array_unescape($_POST);

12.03.2008 22:24 | geändert: 12.03.2008 22:24

16 Rudy

Das Problem kenne ich, da musste ich beim Umstieg auf PHP5 auch einiges ändern. Wenn man an eine Funktion eine Variable als Referenz übergeben will, so muss das bereits in der Deklaration festgelegt werden, nicht erst beim Aufruf. Dort braucht man es gar nicht mehr.

Jörgs Lösung wird so weit ich sehe keinen Effekt auf den Superglobal $_POST haben, weil innerhalb der Funktion eine Kopie dieses Arrays bearbeitet wird und nach dem Verlassen der Funktion ist $_POST immer noch gleich. $_POST wird nach Deklaration als Wert übergeben und nun beim Aufruf ebenso.

Der Lösungsansatz an sich ist aber richtig, also die Korrekturen die Jörg genannt hat sind beizubehalten. Aber zusätzlich musst Du die Deklaration der Funktionen ändern:

function array_escape_and_strip($array){
...
function array_unescape($array){

muss werden:

function array_escape_and_strip(& $array){
...
function array_unescape(& $array){

Aber Achtung: solange Du die Funktionen wie oben prozedural aufrufst

array_unescape($_POST);

ist das ok. Aber wenn Du

das nun funktional willst

$meinarray = array_unescape($_POST);

dann wird $_POST auch verändert und $meinarray ist dann gleich wie (das geänderte) $_POST!

Früher hätte dieser Aufruf:
array_unescape($_POST);
$_POST nicht geändert und dieser schon:
array_unescape(& $_POST);

Da Du letzteres nun nicht mehr darfst kannst Du die Funktion nur auf eine Weise verwenden, oder eben sie müsste umgeschrieben werden. Kontrolliere ob die Funktionen array_unescape und array_unescape_and_strip irgendwo ohne die & im Parameter $array verwendet wurden - falls ja, muss die Funktion umgeschrieben werden, sonst gehen die Änderungen ok.

12.03.2008 22:53 | geändert: 12.03.2008 23:03

17 Andal (Gast)

Vielen Dank euch beiden, für eine Lösung und Erklärung des Problems.

MFG

Andal

14.03.2008 20:01

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]