Kontaktformular - Porbleme mit Versendermail + umlaute

phpMars

Erfahrenes Mitglied
Hi, mein Kontaktformular hat irgendwo nen Fehler.
Wenn ich eine Email abschicke wird als Versender nicht die eingetragene Email des Besuchers angezeigt, sondern meine eigene.
Wo hab ich nen Fehler gemacht?
Außerdem habe ich noch festgestellt, das Umlaute durch ein ? ersetzt werden, woran liegt das ?

PHP:
<?php

//boolean check_mail(string)
//returns TRUE if e-mail is correct, else returns FALSE
function check_mail($email) {

	if (ereg("^([a-zA-Z0-9\.\_\-]+)@([a-zA-Z0-9\.\-]+\.[A-Za-z][A-Za-z]+)$", $email)) {
	
		return TRUE;
	
	}
	
	else {
	
		return FALSE;
	
	}

}

//boolean is_null_string(string)
//returns TRUE if string is a null_string, else returns FALSE
function is_null_string($string) {

	if(strlen($string)==0) {
	
		return TRUE;
	
	}
	
	else {
	
		return FALSE;
	
	}

}

//boolean is_error(string form_var , array error_list) 
//retruns TRUE if error_list contains form_var
function is_error($form_var, $error_list) {

	$num_errors = count($error_list);
	
	for($i=0;$i<$num_errors;$i++) {
	
		if($form_var == $error_list[$i]) {
		
			return TRUE;
		
		}
	
	}
	
	return FALSE;

}


if($sent) {


	//initialzie $error 
	$error = FALSE;

	//initialize variables to check
	$var_check = array("name", "surname", "email", "message");

	//check variables to check and save variable-name to error_list if check fails
	$num_to_check = count($var_check);

	for($i=0;$i<$num_to_check;$i++) {

		//check for nullstrings
		if(is_null_string($$var_check[$i])) {

			$error = TRUE;
			$error_list .= $var_check[$i] . ";" ;

		}
	
		//check email
		else {

			if($var_check[$i] == "email") {
		
				if(!check_mail($$var_check[$i])) {
			
					$error = TRUE;
					$error_list .= $var_check[$i] . ";";
			
				}
		
			}
	
		}
	
	}

}


//set errorstyle if necessary, extract error_list and build array
if($error) {

	$input_style="error";

	//extract erronious variables
	$el = $error_list;
	unset($error_list);
	$temp = explode(";",$el);
	$num_errors = count($temp);
		
	//build array error_list
	for($i=0;$i<$num_errors;$i++) {
	
		$error_list[] = $temp[$i];
	
	}
	
	
	
?>

<br><strong>Ihre Nachricht konnte leider nicht versendet werden.</strong><br><br>Die rot markierten Felder enthalten unvollst&auml;ndige<br>oder fehlerhafte Angaben.<br><br><br>

<?php
	
}

//no error
else {

	if($sent) {
	
		//mailcode
		$to = 'stephan@oberzent.de';
		$subject = 'Kontaktformular';
		$mailtext = 'Nachricht von <br><br>Firma: ' . $HTTP_POST_VARS[company] . '<br>' . $HTTP_POST_VARS[gender] . ' ' . $HTTP_POST_VARS[name] . ' ' . $HTTP_POST_VARS[surname] . '<br>' .  $HTTP_POST_VARS[street] . '<br>' . $HTTP_POST_VARS[zipcode] . ' ' . $HTTP_POST_VARS[city] . '<br>' . $HTTP_POST_VARS[country] . '<br><br>' . 'Tel: ' . $HTTP_POST_VARS[tel] . '<br>Mobil: ' . $HTTP_POST_VARS[mobile] . '<br>E-Mail: ' . $HTTP_POST_VARS[email] . '<br>Fax: ' . $HTTP_POST_VARS[fax] . '<br><br>Nachricht:<br>' . $HTTP_POST_VARS[message]; 
		$header = 'Content-type: text/html';
		
		//send mail and display succes- or error-message
		if(@mail($to, $subject, $mailtext, $header)) {
		
			?>
			
			Vielen Dank f&uuml;r Ihre Nachricht.<br><br>
			Wir werden umgehend Kontakt mit Ihnen aufnehemen. 
			
			<?php
		
		}
		
		//mail error
		else {
		
			?>
		
			Ihre Nachricht konnte aus technischen Gr&uuml;den leider nicht versendet werden.<br><br>
			Sie k&ouml;nnen uns per E-Mail unter <a href="mailto:info@stylish-pixel.de">info@stylish-pixel.de</a> erreichen.
		
			<?php
		
		}
		
	}

	else {
?>

<br>

<br>Bitte benutzen Sie folgendes Kontaktformular, um uns eine Nachricht zu schicken.<br><br>
Felder, die mit einem * markiert sind, m&uuml;ssen ausgef&uuml;llt werden.<br><br><br>

<?php 
	
	}

}

if($sent && !$error) {

	//mailcode

}

else {

?>

<form action="index.php?view=contact&sent=TRUE" method="post">
<table cellspacing="0" cellpadding="4" border="0" width="320">
<tr><td>Firma</td><td>
        <input class="form" type="text" maxlength="255" name="company" <?php if($error) { echo 'value="' . $HTTP_POST_VARS[compnay] . '"'; } ?>>
      </td></tr>
<tr><td width="80">Anrede</td><td width="240"><select class="anrede" name="gender" size="1"><option>Herr </option><option>Frau</option></select></td></tr>
<tr><td><span class="<?php if(is_error("name", $error_list)) { echo $input_style; } ?>">Name *</span></td><td><input class="form" type="text" size="24" maxlength="255" name="name" <?php if($error) { echo 'value="' . $HTTP_POST_VARS[name] . '"'; } ?></td></tr>
<tr><td><span class="<?php if(is_error("surname", $error_list)) { echo $input_style; } ?>">Nachname *</span></td><td>
        <input class="form" type="text" maxlength="255" name="surname" <?php if($error) { echo 'value="' . $HTTP_POST_VARS[surname] . '"'; } ?>>
      </td></tr>
<tr><td>Strasse und Hausnummer</td><td valign="top">
        <input class="form" type="text" maxlength="255" name="street"  <?php if($error) { echo 'value="' . $HTTP_POST_VARS[street] . '"'; } ?>>
      </td></tr>
<tr><td>PLZ und Ort<td>
        <input class="plz" type="text" maxlength="16" name="zipcode" <?php if($error) { echo 'value="' . $HTTP_POST_VARS[zipcode] . '"'; } ?>>
        <input class="ort" type="text" maxlength="255" name="city" <?php if($error) { echo 'value="' . $HTTP_POST_VARS[city] . '"'; } ?>>
      </td></tr>
<tr><td>Land</td><td>
        <input class="form" type="text" maxlength="255" name="country" value="Deutschland" <?php if($error) { echo 'value="' . $HTTP_POST_VARS[country] . '"'; } ?>>
      </td></tr>
<tr><td><br><br>Telefon</td><td><br><br>
        <input class="form" type="text" maxlength="255" name="tel" <?php if($error) { echo 'value="' . $HTTP_POST_VARS[tel] . '"'; } ?>>
      </td></tr>
<tr><td>Mobil</td><td>
        <input class="form" type="text" maxlength="255" name="mobile" <?php if($error) { echo 'value="' . $HTTP_POST_VARS[mobile] . '"'; } ?>>
      </td></tr>
<tr><td><span class="<?php if(is_error("email", $error_list)) { echo $input_style; } ?>">E-Mail *</span></td><td>
        <input class="form" type="text" maxlength="255" name="email" <?php if($error) { echo 'value="' . $HTTP_POST_VARS[email] . '"'; } ?>>
      </td></tr>
<tr><td>Fax</td><td>
        <input class="form" type="text" maxlength="255" name="fax" <?php if($error) { echo 'value="' . $HTTP_POST_VARS[fax] . '"'; } ?>>
      </td></tr>
<tr><td valign="top"><span class="<?php if(is_error("message", $error_list)) { echo $input_style; } ?>">Nachricht *</span></td><td>
        <textarea class="area" name="message"><?php if($error) { echo $HTTP_POST_VARS[message]; } ?></textarea>
      </td></tr>
<tr><td></td><td><input class="button" type="submit" value="abschicken"> <input class="button" type="reset" value="zurücksetzen"></td></tr>
</table>
</form>

<?php

}

?>
 
Zuletzt bearbeitet:
Ich sehe auch nirgendwo, dass du das irgendwie versucht hast.

In deinem Header sehe ich nur folgendes:

PHP:
$header = 'Content-type: text/html';

Also füge einfach noch den Absender ein:
PHP:
$header = 'From: '.$absender."\r\n".'Content-type: text/html';

So oder so ähnlich. Steht bestimmt in der php doku unter mail().

Nächstes mal solltest du den Fehler versuchen einzugrenzen und nur den relevanten Teil des Codes posten, dann hast du größere Chancen auf eine Antwort.
 
Probier mal Folgendes:
HTML:
<form action="index.php?view=contact&sent=TRUE" method="post" accept-charset="utf-8">
PHP:
<?php

	/**
	* @param	$email		string
	* @return	bool
	*/
	function check_mail( $email )
	{

		return (bool) preg_match("<^(?:[a-zA-Z\d$\-_.+!*'(),;/?:@&=]|(?:%[a-fA-F\d]{2}))+$>", $email);

	}

	/**
	* @param	$string		string
	* @return	bool
	*/
	function is_null_string( $string )
	{

		return (bool) strlen($string) == 0;

	}

	/**
	* @param	$form_var	string
	* @param	$error_list	array
	* @return 	bool
	*/
	function is_error( $form_var, $error_list )
	{

		if( !is_string($form_var) || !is_array($error_list) ) {
			return null;
		}
		return (bool) in_array($error_list, $error);

	}



	$errors = array();


	if( isset($_GET['sent']) ) {

		// initialize variables to check
		$var_check = array("name", "surname", "email", "message");

		foreach( $var_check as $item ) {
			if( !isset($_POST[$item]) || is_null_string($_POST[$item]) ) {
				$errors[] = $item;
				continue;
			}
			if( $_POST[$item] == 'email' ) {
				if( !check_mail($_POST[$item]) ) {
					$errors[] = $item;
				}
			}
		}

	}

	// set errorstyle if necessary, extract error_list and build array
	if( isset($_GET['sent']) && empty($errors) ) {

		// mailcode
		$to = 'stephan@oberzent.de';
		$subject = 'Kontaktformular';
		$body = 'Nachricht von <br><br>Firma: ' . $_POST['company'] . '<br>' . $_POST['gender'] . ' ' . $_POST['name'] . ' ' . $_POST['surname'] . '<br>' .  $_POST['street'] . '<br>' . $_POST['zipcode'] . ' ' . $_POST['city'] . '<br>' . $_POST['country'] . '<br><br>' . 'Tel: ' . $_POST['tel'] . '<br>Mobil: ' . $_POST['mobile'] . '<br>E-Mail: ' . $_POST['email'] . '<br>Fax: ' . $_POST['fax'] . '<br><br>Nachricht:<br>' . $_POST['message'];
		$header = 'Content-Type: text/html; charset="utf-8"';

		// send mail and display succes- or error-message
		if( @mail($to, $subject, $body, $header) ) {
			echo '<p>Vielen Dank f&uuml;r Ihre Nachricht.</p><p>Wir werden umgehend Kontakt mit Ihnen aufnehemen.</p>';
		} else {
			echo '<p>Ihre Nachricht konnte aus technischen Gr&uuml;den leider nicht versendet werden.</p><p>Sie k&ouml;nnen uns per E-Mail unter <a href="mailto:info@stylish-pixel.de">info@stylish-pixel.de</a> erreichen.';
		}
	}

?>
 
Ich habe das jetzt wie folgt und es passiert gar nichts. Erhalte keine Meldung und bekomme auch keine mails mehr.
Blick ichs grad irgendwie nicht ?



Mailcode:

PHP:
<?php 

    /** 
    * @param    $email        string 
    * @return    bool 
    */ 
    function check_mail( $email ) 
    { 

        return (bool) preg_match("<^(?:[a-zA-Z\d$\-_.+!*'(),;/?:@&=]|(?:%[a-fA-F\d]{2}))+$>", $email); 

    } 

    /** 
    * @param    $string        string 
    * @return    bool 
    */ 
    function is_null_string( $string ) 
    { 

        return (bool) strlen($string) == 0; 

    } 

    /** 
    * @param    $form_var    string 
    * @param    $error_list    array 
    * @return     bool 
    */ 
    function is_error( $form_var, $error_list ) 
    { 

        if( !is_string($form_var) || !is_array($error_list) ) { 
            return null; 
        } 
        return (bool) in_array($error_list, $error); 

    } 



    $errors = array(); 


    if( isset($_GET['sent']) ) { 

        // initialize variables to check 
        $var_check = array("name", "surname", "email", "message"); 

        foreach( $var_check as $item ) { 
            if( !isset($_POST[$item]) || is_null_string($_POST[$item]) ) { 
                $errors[] = $item; 
                continue; 
            } 
            if( $_POST[$item] == 'email' ) { 
                if( !check_mail($_POST[$item]) ) { 
                    $errors[] = $item; 
                } 
            } 
        } 

    } 

    // set errorstyle if necessary, extract error_list and build array 
    if( isset($_GET['sent']) && !empty($errors) ) { 

        // mailcode 
        $to = 'info@stylish-pixel.de'; 
        $subject = 'Kontaktformular - www.stylish-pixel.de'; 
        $body = 'Nachricht von <br><br>Firma: ' . $_POST['company'] . '<br>' . $_POST['gender'] . ' ' . $_POST['name'] . ' ' . $_POST['surname'] . '<br>' .  $_POST['street'] . '<br>' . $_POST['zipcode'] . ' ' . $_POST['city'] . '<br>' . $_POST['country'] . '<br><br>' . 'Tel: ' . $_POST['tel'] . '<br>Mobil: ' . $_POST['mobile'] . '<br>E-Mail: ' . $_POST['email'] . '<br>Fax: ' . $_POST['fax'] . '<br><br>Nachricht:<br>' . $_POST['message']; 
        $header = 'Content-Type: text/html; charset="utf-8"'; 

        // send mail and display succes- or error-message 
        if( @mail($to, $subject, $body, $header) ) { 
            echo '<p>Vielen Dank f&uuml;r Ihre Nachricht.</p><p>Wir werden umgehend Kontakt mit Ihnen aufnehemen.</p>'; 
        } else { 
            echo '<p>Ihre Nachricht konnte aus technischen Gr&uuml;den leider nicht versendet werden.</p><p>Sie k&ouml;nnen uns per E-Mail unter <a href="mailto:info@stylish-pixel.de">info@stylish-pixel.de</a> erreichen.'; 
        } 
    } 

?>



Formular:

PHP:
<br>
<?php 
	
if(!$sent && !$error) {
?>
<b>Stylish-Pixel</b><br>
Inh. Stephan Liebig<br>
Postfach 1204<br>
64741 Beerfelden<br>
<br>
<br>Bitte benutzen Sie folgendes Kontaktformular, um uns eine Nachricht zu schicken.<br><br>
Felder, die mit einem * markiert sind, m&uuml;ssen ausgef&uuml;llt werden.<br><br><br>
<form action="index.php?view=contact&sent=TRUE" method="post" accept-charset="utf-8">
<table cellspacing="0" cellpadding="4" border="0" width="320">
<tr><td>Firma</td><td>
        <input class="form" type="text" maxlength="255" name="company" <?php if($error) { echo 'value="' . $HTTP_POST_VARS[compnay] . '"'; } ?>>
      </td></tr>
<tr><td width="80">Anrede</td><td width="240"><select class="anrede" name="gender" size="1"><option>Herr </option><option>Frau</option></select></td></tr>
<tr><td><span class="<?php if(is_error("name", $error_list)) { echo $input_style; } ?>">Name *</span></td><td><input class="form" type="text" size="24" maxlength="255" name="name" <?php if($error) { echo 'value="' . $HTTP_POST_VARS[name] . '"'; } ?></td></tr>
<tr><td><span class="<?php if(is_error("surname", $error_list)) { echo $input_style; } ?>">Nachname *</span></td><td>
        <input class="form" type="text" maxlength="255" name="surname" <?php if($error) { echo 'value="' . $HTTP_POST_VARS[surname] . '"'; } ?>>
      </td></tr>
<tr><td>Strasse und Hausnummer</td><td valign="top">
        <input class="form" type="text" maxlength="255" name="street"  <?php if($error) { echo 'value="' . $HTTP_POST_VARS[street] . '"'; } ?>>
      </td></tr>
<tr><td>PLZ und Ort<td>
        <input class="plz" type="text" maxlength="16" name="zipcode" <?php if($error) { echo 'value="' . $HTTP_POST_VARS[zipcode] . '"'; } ?>>
        <input class="ort" type="text" maxlength="255" name="city" <?php if($error) { echo 'value="' . $HTTP_POST_VARS[city] . '"'; } ?>>
      </td></tr>
<tr><td>Land</td><td>
        <input class="form" type="text" maxlength="255" name="country" value="Deutschland" <?php if($error) { echo 'value="' . $HTTP_POST_VARS[country] . '"'; } ?>>
      </td></tr>
<tr><td><br><br>Telefon</td><td><br><br>
        <input class="form" type="text" maxlength="255" name="tel" <?php if($error) { echo 'value="' . $HTTP_POST_VARS[tel] . '"'; } ?>>
      </td></tr>
<tr><td>Mobil</td><td>
        <input class="form" type="text" maxlength="255" name="mobile" <?php if($error) { echo 'value="' . $HTTP_POST_VARS[mobile] . '"'; } ?>>
      </td></tr>
<tr><td><span class="<?php if(is_error("email", $error_list)) { echo $input_style; } ?>">E-Mail *</span></td><td>
        <input class="form" type="text" maxlength="255" name="email" <?php if($error) { echo 'value="' . $HTTP_POST_VARS[email] . '"'; } ?>>
      </td></tr>
<tr><td>Fax</td><td>
        <input class="form" type="text" maxlength="255" name="fax" <?php if($error) { echo 'value="' . $HTTP_POST_VARS[fax] . '"'; } ?>>
      </td></tr>
<tr><td valign="top"><span class="<?php if(is_error("message", $error_list)) { echo $input_style; } ?>">Nachricht *</span></td><td>
        <textarea class="area" name="message"><?php if($error) { echo $HTTP_POST_VARS[message]; } ?></textarea>
      </td></tr>
<tr><td></td><td><input class="button" type="submit" value="abschicken"> <input class="button" type="reset" value="zurücksetzen"></td></tr>
</table>
</form>

<?php

}

?>
 
Mein Fehler: der Ausdruck der if-Kontrollstruktur muss isset($_GET['sent']) && empty($errors) lauten. Ich habe meinen vorherigen Beitrag entsprechend geändert.
Übrigens solltest du von der $HTTP_POST_VARS-Variable auf die $_POST-Variable umsteigen.
 
Ok, ich bekomme wieder Emails, leider steht als absender immernoch "info@stylish-pixel.de" da.

Gibt es irgendwelche Server Einstellungen, die das unterbinden ?
 
Zurück