Привет, я столкнулся с проблемой с моей контактной формой. Я не получил никаких писем и не знаю почему ..
Вот мой php код, есть ли что-то не так
<?php
$name=$_POST ['name'];
$mobileno=$_POST ['mobileno'];
$email=$_POST ['email'];
$message=$_POST ['message'];
$to = 'any mail.com';
$subject = ' Message from your Webite';
$msg = " Your name : $name\n";
$msg .= " Your Mobile No. : $mobileno\n";
$msg .= " Your email: $email\n" ;
$msg .= " Your Message: $message";
mail ($to, $subject, $msg, 'From:' . $email);
echo ' Thank You <br/>';
echo ' Your name ' . $name . '<br>';
echo ' Your email ' . $email . '<br>';
echo ' Your Mobile No. ' . $mobileno . '<br>';
echo ' Your Message ' . $message . '<br>';
?>
<br /><br />
Here is the result from $msg: <br /><br />
<?php
echo $msg;
?>
Мой HTML-код Я несколько раз редактировал код, но ничего не произошло
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<form name="form1" method="post" action="justsend.php">
<p>
<label for="mobileno">your mobile</label>
<input type="text" name="mobileno" id="mobileno">
<label for="name"><br>
your name</label>
<input type="text" name="name" id="name">
</p>
<p>
<label for="email">your email</label>
<input type="text" name="email" id="email">
</p>
<p>
<label for="message">your message</label>
<textarea name="message" id="message" cols="45" rows="5"></textarea>
</p>
<p>
<label for="send">send msg</label>
<input type="submit" name="send" id="send" value="Submit">
</p>
</form>
</body>
</html>
$_POST ['name'];
должно быть $_POST['name'];
удалите все пробелы в ваших значениях поста.
так:
$name=$_POST ['name'];
$mobileno=$_POST ['mobileno'];
$email=$_POST ['email'];
$message=$_POST ['message'];
будет выглядеть так:
$name=$_POST['name'];
$mobileno=$_POST['mobileno'];
$email=$_POST['email'];
$message=$_POST['message'];
и, как сказал EternalHour, было бы неплохо проверить, заполнена ли какая-либо форма; попробуйте это сразу после того, как вы объявили $name
а также $mobileno
так далее;
if(!empty($name) && !empty($mobileno) && !empty($email) && !empty($message)){
// do stuff
}
причина, по которой вы бы использовали !empty()
вместо isset()
это потому, что isset будет по-прежнему возвращать true, если форма отправлена, так как значения установлены .. они просто пусты.
редактировать:
дальше в вашем HTML изменении action="get"
в action="post"
чтобы заставить его работать.
Вам нужно исправить $_POST
переменные, но я бы порекомендовал это вместо этого, чтобы вы знали, если ваш POST успешно.
<?php
if (isset($_POST)) {
$name=$_POST['name'];
$mobileno=$_POST['mobileno'];
$email=$_POST['email'];
$message=$_POST['message'];
$to = 'any mail.com';
$subject = ' Message from your Webite';
$msg = " Your name : $name\n";
$msg .= " Your Mobile No. : $mobileno\n";
$msg .= " Your email: $email\n" ;
$msg .= " Your Message: $message";
mail ($to, $subject, $msg, 'From:' . $email);
echo ' Thank You <br/>';
echo ' Your name ' . $name . '<br>';
echo ' Your email ' . $email . '<br>';
echo ' Your Mobile No. ' . $mobileno . '<br>';
echo ' Your Message ' . $message . '<br>';
?>
<br /><br />
Here is the result from $msg: <br /><br />
<?php
echo $msg;
} else {
echo "submit failed!";
exit;
}
?>
Таким образом, вы узнаете, нет ли сообщения, что ваша форма отправлена правильно.
Прежде всего, если это на локальном хосте, оно не будет работать, потому что функция почты отключена локально, вы должны запустить его онлайн
В дальнейшем:
Я действительно не понимаю, где вы идете не так, но я взял на себя свою собственную функцию почты, я получил на своем собственном сайте и преобразовал его в ваш
if(isset($_POST['send'])){ // checks if the data from the submit button with the name send is here
$name=mysqli_real_escape_string($con,$_POST['name']);
$mobileno=mysqli_real_escape_string($con,$_POST['mobileno']);
$email=mysqli_real_escape_string($con,$_POST['email']);
$message=mysqli_real_escape_string($con,$_POST['message']);
// you had spaces between your post variables which wont work. Also if you use mysqli, its better to play safe and make them safe, in case you do also database work. The variable $con is your connection information.
// echo out if your variables working. For example:
// echo $mobileno;
// this way you know for sure if the items are set.
$message = wordwrap($message, 70); // in case its a long message, this allows 70 characters on one line
$to = 'any mail.com'; // your email
$subject = ' Message from your Webite';
$msg = " Your name : ".$name."\n";
$msg .= " Your Mobile No. : ".$mobileno."\n";
$msg .= " Your email: ".$email."\n" ;
$msg .= " Your Message:".$message ;
$headers = "MIME-Version: 1.0" . "\r\n"; // this has to do with css and html in your msg
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n"; // this has to do with css and html in your msg
$headers .= "From: [email protected]"; // change this to whatever you want it to come from
if (mail ($to, $subject, $msg, $headers)) {
echo ' Thank You <br/>';
echo ' Your name ' . $name . '<br>';
echo ' Your email ' . $email . '<br>';
echo ' Your Mobile No. ' . $mobileno . '<br>';
echo ' Your Message ' . $message . '<br>';
// to make sure if your email is send it will output your message as given above, else an error
}else{
echo ' Something went wrong ... oopsie daisy';
} // closure of the if mail check
} // closure of the complete if(isset) check
Не забудьте также включить информацию о вашем соединении для функции mysqli для очистки ваших переменных на случай, если вы собираетесь добавить их также в базу данных. Кроме того, в любом случае это хорошая практика. Я определил $ con как информацию о соединении, ваша может отличаться. Затем вы должны изменить его на переменную соединения.
если вы используете mysql_
функции, использование mysql_real_escape_string($_POST['YourPostVariable']);
без информации о соединении. Посмотреть здесь. http://php.net/manual/en/function.mysql-real-escape-string.php
—редактировать—
обновил его, потому что ваше сообщение не будет выводить ваши переменные, только $ name вместо имени в переменной $ name.
Надеюсь, что это помогает, удачи отладки 🙂
Здравствуйте, я только что немного изменил ваш код .. и я получил письмо .. пожалуйста, проверьте с помощью приведенного ниже кода .. пожалуйста, введите свой адрес электронной почты в текстовое поле, чтобы получить письмо
<?php
if($_POST['email'] != '')
{
$name=$_POST['name'];
$mobileno=$_POST['mobileno'];
$email=$_POST['email'];
$message=$_POST['message'];
$to = $email;
$subject = 'Message from your Webite';
$msg = " Your name : $name\n";
$msg .= " Your Mobile No. : $mobileno\n";
$msg .= " Your email: $email\n" ;
$msg .= " Your Message: $message";
mail ($to, $subject, $msg, 'From:'.$email);
echo ' Thank You <br/>';
echo ' Your name ' . $name.'<br>';
echo ' Your email ' . $email .'<br>';
echo ' Your Mobile No. ' . $mobileno . '<br>';
echo ' Your Message ' . $message . '<br>';
}
?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<form name="form1" method="post" action="justsend.php">
<p>
<label for="mobileno">your mobile</label>
<input type="text" name="mobileno" id="mobileno">
<label for="name"><br>
your name</label>
<input type="text" name="name" id="name">
</p>
<p>
<label for="email">your email</label>
<input type="text" name="email" id="email">
</p>
<p>
<label for="message">your message</label>
<textarea name="message" id="message" cols="45" rows="5"></textarea>
</p>
<p>
<label for="send">send msg</label>
<input type="submit" name="send" id="send" value="Submit">
</p>
</form>
</body>
</html>