2012-04-03 2 views
1

, пожалуйста, я пытаюсь сделать сообщение на новой строке, поскольку клиент его набирает, но я получаю /r/n между каждой строкой, а также пытается сделать вывод $body .= $_SESSION['username']; на отдельной строке. Я попытался использовать this example решить, но не был успешным код нижепроблемы с разрывом строки с отправкой phpmail

<?php require_once("include/session.php");?> 
<?php require_once("include/dataconnect.php");?> 
<?php require_once("include/functions.php");?> 
<?php include("include/mheader.php");?> 

<?php 
$submit = $_POST['Notify']; 
$message = mysql_real_escape_string(htmlentities(strip_tags($_POST['message']))); 
//echo "$message"; 
//die(); 
if('POST' === $_SERVER['REQUEST_METHOD']) 
{ 
if (isset($message)) 
{ 
//Get Email Address 
    $emails = mysql_query("SELECT email FROM reusers WHERE username = '{$_SESSION['username']}'")or die(mysql_error()); 
    //$emails = mysql_query("SELECT reusers.email FROM reusers INNER JOIN repplac ON reusers.username = repplac.Uname AND reusers.username = '".$_SESSION['username']."'")or die(mysql_error()); 
    $results = (mysql_fetch_assoc($emails)) or die(mysql_error()); 
    $email= $results['email']; 
    //echo "$email"; 
    //die(); 
    if(mysql_num_rows($emails) == 0){ 
     exit("No email addresses found for user '{$_SESSION['username']}'"); 
    } 
    $email = mysql_result($emails, 0); 
    //echo "$email"; 
    //die(); 
$body = $_SESSION['username']. "<br>" 
     . nl2br($_POST['message']); 
    $to = $email; 
    $subject = "copy of your notification"; 
$headers = "From: [email protected]\r\n"; 
$headers .= 'MIME-Version: 1.0' . "\r\n"; 
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 
$headers .= 'Bcc:[email protected]' . "\r\n"; 
mail($to,$subject,$body,$headers); 
    } 
    } 
?> 
<p> 
<form action='notification.php' method='Post' class='rl'> 
    <div> 
    <label for='message' class='fixedwidth'>Message</label> 
    <textarea name="message" rows ="7" cols="40" id="message"></textarea> 
    </div> 

    <div class='buttonarea'> 
      <p> 
      <input type='submit' name='notify' value='Notify'> 
      </p> 
      </div> 
      </form> 
      </p> 

<?php include("include/footer.php");?> 
+0

Вам нужно разобраться в неверную вложенность вашего HTML. Некоторые браузеры будут загрязнять дисплей для ваших ошибок здесь – Pete

+1

вы также должны заменить все '\ r \ n' в своем заголовке на' PHP_EOL', чтобы сделать его совместимым с перекрестной платформой –

+0

@LawrenceCherone не совсем; это _should_ будет '\ r \ n' в заголовках MIME и для содержимого, на котором это действительно не важно, на самом деле Outlook в Windows более счастлив с' \ n', а не '\ r \ n' (он разделяет дубликаты строк и подсчитывает как '\ r', так и' \ n') - кроме того, PHP_EOL будет устанавливать окончания строк, как они есть на веб-сервере, а не то, что вы хотите, чтобы они находились в точке получения. – CD001

ответ

1

Поскольку это обычно безопаснее для отправки HTML писем в более архаичном виде HTML я собираюсь позволить содержание HTML электронной почты, чтобы быть HTML 4; поэтому он не должен быть хорошо сформирован XML и допустим nl2br().

Вы указываете, что содержание вашей электронной почты является стандартом HTML, поэтому обычные строки заканчиваются, \r, \n и \r\n в значительной степени неактуальны.

Try что-то вроде:

$body = $_SESSION['username']. "<br>" 
     . nl2br($_POST['message']); 

Там нет вменяемости проверки или проверки там, но я думаю, что это то, что вы пытаетесь заставить его сделать.

---- Пример CODE ----

Я только переработан код несколько, чтобы я мог лучше видеть, что вы делаете (это просто вопрос личных предпочтений) и положить комментарии, чтобы показать, что я получаю в отношении проверок здравомыслия и проверки.

Я не тестировал это, это всего лишь пример использования вашего кода.

<?php 
require_once "include/session.php"; 
require_once "include/dataconnect.php"; 
require_once "include/functions.php"; 
require_once "include/mheader.php"; 

//sanity checks - ensure the form has been posted and that there IS a message 
if($_POST && !empty($_POST['message'])) { 

    //sanity check - ensure there IS a username 
    $sUsername = !empty($_SESSION['username']) ? $_SESSION['username'] : ""; 
    if($sUsername) { 

    //check the username against the database? 
    $resultEmail = mysql_query("SELECT `email` FROM `reusers` WHERE `username` = '{$sUsername}' LIMIT 0, 1") 
      or die(mysql_error()); 

    //no result - could throw an Exception here 
    if(mysql_num_rows($resultEmail) == 0) { 
     die("No email addresses found for user '{$sUsername}'"); 
    } 

    //email verified against the database 
    else { 
     $sEmail = mysql_result($resultEmail, 0); 

     //create the email 
     $headers = "From: [email protected]\r\n" 
      . 'MIME-Version: 1.0' . "\r\n" 
      . 'Content-type: text/html; charset=iso-8859-1' . "\r\n" 
      . 'Bcc:[email protected]' . "\r\n"; 

     $to = $sEmail; //assuming the email address retrieved from the database has already been mxrr checked etc... 
     $subject = "copy of your notification"; 

     $body = $sUsername . "<br>" 

      //remove slashes as this is going in an email, strip tags and convert newlines to "<br>" 
      // since you're using iso-8859-1 there shouldn't be any oddities unless someone completes 
      // the form using an Arabic character set (for instance) 
      . nl2br(strip_tags(stripslashes($_POST['message']))); 

     //send the email 
     if(!mail($to, $subject, $body, $headers)) { 
     die("sendmail error!"); 
     } 
    } 
    } 
} 
?> 
+0

Что не так с 'nl2br()'? – MichaelRushton

+0

Если он не изменен, он заменяет символы новой строки на '
' - который не является XML-образцом; что потребует '
' - я просто предпочитаю, чтобы мой HTML (XHTML или HTML5) был хорошо сформирован XML; Мне легче забыть прекратить все, а не запоминать, какие теги можно оставить открытым;) – CD001

+0

Он изменился с 5.3.0. Передача 'true' (по умолчанию, фактически), поскольку второй параметр возвращает'
'. – MichaelRushton

0

попробуйте это;

$body = "Username" . "<br>";

$body .= "test1 message for test 1 message for test 1message for test 1message for test 1message for test 1message for test 1message for test 1message for test 1message for test 1message for test 1message for test 1message for test 1message for test 1message for test 1message for test 1message for test 1 test2 message for test 2 test3 message for test 3";

$body = nl2br($body);

и вот, что я получилenter image description here