2013-11-16 2 views
0

У меня есть класс проверки, который выводит массив ($ arr) $validates = Comment::validate($arr); Я использую массив для почтовой функции PHP: $email=$arr['email']; $name=$arr['name']; $message=$arr['comment'];. Почта отправляется без проблем, но скрипт ведет себя, если переменные были пустыми, но они не являются (я протестировал его с помощью инструкции echo). Однако $name=$_POST['name']; и т. Д. Работает просто отлично. Любые предложения, почему это происходит? Вот часть кода.PHP mail() отправляет пустые переменные

$validates = Comment::validate($arr); // validate and fetch data, can be either TRUE or FALSE (1 or 0) 


// ------------- CONFIGURABLE SECTION ------------------------ 
$mailto = '[email protected]'; // set to the email address you want the form sent to 
$subject = "Feedback Form"; // $subject - set to the Subject line of the email 
$formurl = "feedback.html" ; 
$errorurl = "feedback_error.php" ; 
$thankyouurl = "feedback_thankyou.php" ; 
$uself = 0; 
$email = $arr['email']; 
$name = $arr['name']; 
$message = $arr['comment']; 
// In case any of our lines are larger than 70 characters, we should use wordwrap() 
$message = wordwrap($message, 70, "\r\n"); // \n Line Feed, \r Carriage Return 

$headers = array(); 
$headers[] = "MIME-Version: 1.0"; 
$headers[] = "Content-type: text/plain; charset=iso-8859-1"; 
$headers[] = "From: Sender Name <[email protected]>"; 
$headers[] = "Bcc: JJ Chong <[email protected]>"; 
$headers[] = "Reply-To: Recipient Name <[email protected]>"; 
$headers[] = "Subject: {$subject}"; 
$headers[] = "X-Mailer: PHP/".phpversion(); 


// -------------------- END OF CONFIGURABLE SECTION --------------- 

$http_referrer = getenv("HTTP_REFERER"); 
$js_enabled = $_POST['js_enabled']; 

//-------------------------------------------------------- 
if($validates) { 
//echo 'message: '.$message; <-- this works (it's not empty) 

$msg = array(); 
$msg[] = "Nachricht von: ".$http_referrer; 
$msg[] = "Name des Absenders: ".$name; 
$msg[] = "E-Mail des Absenders: ".$email; 
$msg[] = "------------------------- Nachricht -------------------------"; 
$msg[] = $message; // <-- this is not working ??? ($message=$_POST['comment']; works just fine) 
$msg[] = "--------------------------------------------------------------"; 

mail($mailto, $subject, implode("\r\n",$msg), implode("\r\n",$headers)); 


// THANK YOU URL 
if ($js_enabled == '0') { // IF NO jAVASCRIPT 
    header("Location: $thankyouurl"); 
    exit; 
} // ELSE AJAX REQUEST 
echo json_encode(array('status'=>1)); 
// echo '{"status":1}'; 
} else { // ERROR URL 
    if ($js_enabled == '0') { // IF NO jAVASCRIPT 
     $err = serialize($arr); 
     $err_url = urlencode($err); 
     header("Location: $errorurl?errors=$err_url"); exit; 
    } // ELSE AJAX REQUEST 
    echo '{"status":0,"errors":'.json_encode($arr).'}'; 
} 

ответ

0

Вы когда-нибудь инициализировали $arr? Похоже, вы ожидаете, что он будет идентичен $_POST, но я не вижу ссылки на $_POST в вашем коде.

+0

Да, я сделал. Есть ссылки $ _POST для имени, электронной почты и т. Д. В моем классе комментариев (который я не опубликовал), то есть if (! ($ Data ['name'] = filter_input (INPUT_POST, 'name', FILTER_CALLBACK, array ('options '=>' Комментарий :: validate_text '))) && $ name_required) { \t \t \t $ errors [' name '] =' No name! '; \t \t} –

+0

Хорошо, но как вы инициализируете '$ arr'? Если 'Comment :: validate ($ arr);' (1) принимает свой параметр по ссылке и (2) изменяет ввод, '$ arr' не получает инициализацию по тому, что вы разместили здесь. Сделайте 'var_dump [$ arr]' и посмотрите, что вы получаете. –

+0

Да, я сделал, сразу после 'if ($ validates) {' в моем коде выше, я протестировал '$ message'. С вашим 'var_dump ($ arr)' I get' array (5) {["email"] => string (10) "[email protected]" ["url"] => string (0) "" [" comment "] => string (12)" test message "[" name "] => string (3)" mr. " ["your_message"] => string (0) ""} '. Раньше у меня было что-то подобное, но не знаю, на этот раз другое. –

Смежные вопросы