私が管理している Web サイトには、ユーザーが入力したデータを、サイト専用の yahoo メールにメールを送信する php ファイルにプッシュする html5 フォーム フィールドがいくつかあります。
html は次のとおりです。
<form role="form" method="post" action="php/contact-us.php" lang="es" id="contactForm">
<div class="row">
<div class="form-group col-lg-4 required">
<label for="name">Name</label>
<input type="text" class="form-control" name="name" required placeholder="Enter Name" />
</div>
<div class="form-group col-lg-4 required">
<label for="email">Email</label>
<input type="email" class="form-control" name="email" required placeholder="Enter valid email" />
</div>
<div class="form-group col-lg-4">
<label for="phone">Phone Number</label>
<input type="tel" class="form-control" name="phone" placeholder="e.g. (000) 000 - 0000">
</div>
<div class="clearfix"></div>
<div class="form-group col-lg-12 required">
<label for="message">Mensaje</label>
<textarea class="form-control" rows="6" name="message" required placeholder="Write your message here"></textarea>
</div>
<div class="form-group col-lg-12">
<input type="hidden" name="save" value="contact">
<button type="submit" class="btn btn-default">Enviar</button>
</div>
</div>
</form>
以前は、フィールドの検証はありませんでしたが、ユーザー コンテンツのない空のメールを受け取っていたので、何も入力せずにボタンを押しているだけだと思っていました。これは自分でもテストできます。required
そこで、次の検証 JS を追加し、サポートされていないブラウザー (および上記のフォーム要素のタグ) に対しても webshim を使用しました。
<script>
$('#contactForm input[type=text], select, textarea').on('change invalid', function() {
var field = $(this).get(0);
field.setCustomValidity('');
if (!field.validity.valid) {
field.setCustomValidity('Please fill required fields');
}
});
$('#contactForm input[type=email]').on('change invalid', function() {
var field = $(this).get(0);
field.setCustomValidity('');
if (!field.validity.valid) {
field.setCustomValidity('Enter a valid email');
}
});
</script>
以前は、ユーザーから入力された電子メールを取得して送信者の電子メールとして設定していましたが、特定の電子メールアドレスなどに問題があったため、常に機能するランダムな電子メールにデフォルト設定し、ユーザーが入力した電子メールをメッセージ。ここに私のphpファイル(contact-us.php)があります:
<?php
// Set your email below
$to = "<dedicatedemail>@yahoo.com";
// Receive and sanitize input
$name = $_POST['name'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$message = $_POST['message'];
$subject = "Request from website";
$headers = "From: no-reply@gmail.com";
// set up email
$msg = "Sender Information \nName: " . $name . "\nEmail: " . $email . "\nPhone: " . $phone . "\n\n" . $message;
$msg = wordwrap($msg,70);
// mail
mail($to,$subject,$msg,$headers);
header('Location: ../contact-thank-you.html');
?>
最初に、すべてが機能していると言わせてください。ここで機能をテストすると、すべてが機能します。私は自分の iOS デバイスとラップトップからメールを送信することができ、Android デバイスから数人の友人に送信してもらいました。検証は機能するため、少なくとも必須フィールドに入力しないとメールを送信できません。検証を追加し、送信者の電子メールをデフォルトの電子メールに設定する前に、空の電子メールを受け取っていました。ただし、すべての変更後でも空のメールが届きます。テストするとき、すべてのプラットフォームとブラウザーでテストすることはできませんが、チェックを追加した後に空のメールを強制することはできません。私の検証はどこかで失敗していますか? 人々がフィールドに入力しているように感じますが、どういうわけか電子メールは空になっています。私が空と言うとき、プログラムでメッセージに追加したものは届くが、ユーザーが入力すると思われる実際の情報は届かないということですか? これはどのように起こっていますか?