Контакт форма - проблем с кирилица...

triplesho7

Registered
Здравейте. Защо когато изпращат имейли от контакт формата ми в сайта на кирилица при мен излизат на маймуница. Трябва да бъдат само на латиница за да знам какво ме питат, което не е окей за съжалние... Някой може ли да помогне?

Ето и кода, който използвам:
Код:
<?php
$name = htmlentities($_POST["name"]);
$email_from = htmlentities($_POST["email"]);
$subject = htmlentities($_POST["subject"]);
$message = htmlentities($_POST["message"]);

$email_to = "support@medenki.com";//replace with your email

$headers = "From: webmaster@example.com" . "rn" . "CC: ". $email_from; //This adds a from field, as well as CC"s the person submitting the request.


//Build the body of the eamil
$body = "Name: " . $name . "nn" . "Email: " . $email_from . "nn" . "Subject: " . $subject . "nn" . "message: " . $message;

$success = mail($email_to, "Contact from site X, regarding: ".$subject, $body,$headers);
?>
<!DOCTYPE HTML>
<html lang="en-US">

<head>
<?php if($success){  //If the email was sent correctly?>
<script>

alert("Благодаря Ви, че се свързахте. Ще се свържем с вас възможно най-скоро.");

</script>

<?php header("Location: ../index.php"); }else{?>
<script>

alert("При изпращането на имейла възникна грешка. Моля, опитайте отново по-късно.");

</script>

<?php header("Location: ../index.php");  } //If the email falied?>
</head>

Формата за контакт в сайта:
Код:
<form action="send-contact.php" class="contact-form" name="contact-form" method="post">
<div class="row">
<div class="col-sm-6 cols">
<input type="text" name="name" required="required" placeholder="Име*">
</div>
<div class="col-sm-6 cols">
<input type="email" name="email" required="required" placeholder="Имейл*">
</div>
<div class="col-sm-6 cols">
<input type="text" name="subject" required="required" placeholder="Заглавие*">
</div>
<div class="col-sm-12 cols">
<textarea name="message" required="required" cols="30" rows="5" placeholder="Съобщение*"></textarea>
</div>
<div class="col-sm-12 cols">
<input type="submit" name="submit" value="Изпрати съобщение" class="btn btn-send">
</div>
</div>
</form>
 
Едит:
В първият файл замести

Код:
<html lang="en-US">
с
Код:
<html lang="bg-BG" >
<meta charset="UTF-8">

Ако не се получи, свали файловете на компютъра си, отвори ги през notepad++ горе в менюто ще видиш encoding смени им формата на UTF-8 и ги качи отново на сървъра. Или просто пробвай в между
 
Много странно, заглавието на съобщението е на кирилица сега, но съобщението когато го отворя не. Ето какво излиза:
Код:
Name: ИметоnnEmail: imeila@abv.bgnnSubject: заглавиетоnnmessage: съобщението
 
Пробвай да добавиш под <?php

Код:
utf8_encode ( string $body ) : string

Имай в предвид, че може да се счупи, нищо не разбирам от php. Проблема е в encodinga.
 
Липсват ти хедъри за типа на съдържанието и кодирoвката.

Използвай някоя библиотека като PHPMailer или SwiftMailer. Ще си улесниш живота.
 
Надявам се да имаш адекватно настроен SMTP !
Пробвай така:

if (!$headers) {
$rn = "\r\n";
$headers = 'Mime-Version: 1.0'.$rn.
'From: '$email_from.$rn.
'CC: '. $email_from.$rn.
'Content-Type: text/html; charset=UTF-8';
}


Код:
<?php
$name = htmlentities($_POST["name"]);
$email_from = htmlentities($_POST["email"]);
$subject = htmlentities($_POST["subject"]);
$message = htmlentities($_POST["message"]);

$email_to = "support@medenki.com";//replace with your email

if (!$headers) {
	$rn = "\r\n";
	$headers  =	'Mime-Version: 1.0'.$rn.
				'From: '$email_from.$rn.
				'CC: '. $email_from.$rn.
				'Content-Type: text/html; charset=UTF-8';
}

//Build the body of the eamil
$body = "Name: " . $name . "nn" . "Email: " . $email_from . "nn" . "Subject: " . $subject . "nn" . "message: " . $message;

$success = mail($email_to, "Contact from site X, regarding: ".$subject, $body,$headers);
?>
<!DOCTYPE HTML>
<html lang="en-US">

<head>
<?php if($success){  //If the email was sent correctly?>
<script>

alert("Благодаря Ви, че се свързахте. Ще се свържем с вас възможно най-скоро.");

</script>

<?php header("Location: ../index.php"); }else{?>
<script>

alert("При изпращането на имейла възникна грешка. Моля, опитайте отново по-късно.");

</script>

<?php header("Location: ../index.php");  } //If the email falied?>
</head>
 
Получи се, но защо при изпращане на имейла към мен при натискане на "ОК" не ме връща обратно към страницата. Така при натискането на F5 могат да ме заринат с едно и също съобщение хиляди пъти :shock:
Ето: http://medenki.com/contact.php
 
triplesho7 каза:
Получи се, но защо при изпращане на имейла към мен при натискане на "ОК" не ме връща обратно към страницата. Така при натискането на F5 могат да ме заринат с едно и също съобщение хиляди пъти :shock:
Ето: http://medenki.com/contact.php
Имаш два хедъра сочещи на едно и също място index.php
Код:
<?php header("Location: ../index.php"); }else{?>
<script>

alert("При изпращането на имейла възникна грешка. Моля, опитайте отново по-късно.");

</script>

<?php header("Location: ../index.php");  } //If the email falied?>
</head>
 
Ето ти малко промени в кода.
Код:
<?php
if (isset($_POST['submit'])) {
	$name = htmlentities($_POST["name"]);
	$email_from = htmlentities($_POST["email"]);
	$subject = htmlentities($_POST["subject"]);
	$message = htmlentities($_POST["message"]);

	$email_to = "support@medenki.com";//replace with your email

	if (!$headers) {
		$rn = "\r\n";
		$headers  =	'Mime-Version: 1.0'.$rn.
					'From: '$email_from.$rn.
					'CC: '. $email_from.$rn.
					'Content-Type: text/html; charset=UTF-8';
	}

	//Build the body of the eamil
	$body = "Name: " . $name . "nn" . "Email: " . $email_from . "nn" . "Subject: " . $subject . "nn" . "message: " . $message;

	$success = mail($email_to, "Contact from site X, regarding: ".$subject, $body,$headers);
}
?>
<!DOCTYPE HTML>
<html lang="en-US">

<head>
<?php 
if(isste($success)){  //If the email was sent correctly
?>
<script>

alert("Благодаря Ви, че се свързахте. Ще се свържем с вас възможно най-скоро.");

</script>

<?php 
	header("Location: ../index.php"); 
}else{
?>
<script>

alert("При изпращането на имейла възникна грешка. Моля, опитайте отново по-късно.");

</script>

<?php 
	header("Location: ../index.php");  
} //If the email falied?>
</head>
</html>
 
Тц, неще. Ако искаш изпрати имейл от сайта за да видиш какво точно се случва http://medenki.com/contact.php . Дали пък ако на мястото на header("Location: ../index.php"); не сложа header("Location: http://medenki.com/"); няма да се получи? Не знам защо при натискане на "ОК" не ме връща обратно на индекса...
 
Даката може би се е разсеял :D , ама:

Код:
<?php 
if(isste($success)){  //If the email was sent correctly
?>
<script>

alert("Благодаря Ви, че се свързахте. Ще се свържем с вас възможно най-скоро.");

</script>

<?php 
	header("Location: ../index.php"); 
}
header след изпращане на response :doh:

Основни принципи на HTTP - хедърите се пращат преди response body-то.
Ако искаш да пратиш хедъри *след* някакво echo по някаква причина, би могъл да ползваш някакви буфери (вж. ob_start или нещо такова).

Няма логика да пренасочваш юзера, ако ще му връщаш response - та ти искаш той да ти види респонса, или да бъде пренасочен :D

Просто правиш

Код:
if(isste($success)) { header("Location: ../index.php"); exit;

и толкоз. И то преди всякакъв <DOCTYPE> и прочие.
 
Три дни тук пишем едни дивотии на работата и съм толкова неадекватен, че не е истина. :ugeek:
 
Много се извинявам, но не съм много наясно и не мога да го направя. Може ли да ми оправите кода и да го качите целия тук. Много съм зле, извинявам се...
Код:
<?php
$name = htmlentities($_POST["name"]);
$email_from = htmlentities($_POST["email"]);
$subject = htmlentities($_POST["subject"]);
$message = htmlentities($_POST["message"]);

$email_to = "support@medenki.com";//replace with your email

$headers = "From: webmaster@example.com" . "rn" . "CC: ". $email_from; //This adds a from field, as well as CC"s the person submitting the request.


//Build the body of the eamil
$body = "Name: " . $name . "nn" . "Email: " . $email_from . "nn" . "Subject: " . $subject . "nn" . "message: " . $message;

$success = mail($email_to, "Тема: ".$subject, $body,$headers);
?>
<!DOCTYPE HTML>
<html lang="bg-BG" >
<meta charset="UTF-8">

<head>
<?php if($success){  //If the email was sent correctly?>
<script>

alert("Благодаря Ви, че се свързахте. Ще се свържем с Вас възможно най-скоро.");

</script>

<?php header("index.php"); }else{?>
<script>

alert("При изпращането на имейла възникна грешка. Моля, опитайте отново по-късно.");

</script>

<?php header("index.php");  } //If the email falied?>
</head>
 
Само си релокирай страниците на хедърите при успех и неуспех къде да ходят. За момента всичко сочи към индекса.
Код:
<?php
if (isset($_POST['submit'])) {
	$name = htmlentities($_POST["name"]);
	$email_from = htmlentities($_POST["email"]);
	$subject = htmlentities($_POST["subject"]);
	$message = htmlentities($_POST["message"]);

	$email_to = "support@medenki.com";

	if (!$headers) {
		$rn = "\r\n";
		$headers  =	'Mime-Version: 1.0'.$rn.
					'From: '$email_from.$rn.
					'CC: '. $email_from.$rn.
					'Content-Type: text/html; charset=UTF-8';
	}
	$body = "Name: " . $name . "nn" . "Email: " . $email_from . "nn" . "Subject: " . $subject . "nn" . "message: " . $message;
	$success = mail($email_to, "Contact from site X, regarding: ".$subject, $body,$headers);
	if ($success) {
		//On success go to Index.php page.
		header("Location: ../index.php"); 
		exit();
	} else {
		//On fail go to Index.php page.
		header("Location: ../index.php"); 
		exit();
	}
}
//If nothing POST go to Index page.
header("Location: ../index.php"); 
exit();
 
Тази страница не работиПонастоящем medenki.com не може да обработи тази заявка.
HTTP ERROR 500
 
triplesho7 каза:
Тази страница не работиПонастоящем medenki.com не може да обработи тази заявка.
HTTP ERROR 500

Погледи логовете къде какво има.
https://www.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting

https://www.php.net/manual/en/errorfunc.configuration.php#ini.display-errors

https://www.php.net/manual/en/errorfunc.configuration.php#ini.display-startup-errors
 

Горе