У меня есть класс проверки, который выводит массив ($ 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).'}';
}
Да, я сделал. Есть ссылки $ _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} –
Хорошо, но как вы инициализируете '$ arr'? Если 'Comment :: validate ($ arr);' (1) принимает свой параметр по ссылке и (2) изменяет ввод, '$ arr' не получает инициализацию по тому, что вы разместили здесь. Сделайте 'var_dump [$ arr]' и посмотрите, что вы получаете. –
Да, я сделал, сразу после '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) ""} '. Раньше у меня было что-то подобное, но не знаю, на этот раз другое. –