0

私が管理している 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 デバイスから数人の友人に送信してもらいました。検証は機能するため、少なくとも必須フィールドに入力しないとメールを送信できません。検証を追加し、送信者の電子メールをデフォルトの電子メールに設定する前に、空の電子メールを受け取っていました。ただし、すべての変更後でも空のメールが届きます。テストするとき、すべてのプラットフォームとブラウザーでテストすることはできませんが、チェックを追加した後に空のメールを強制することはできません。私の検証はどこかで失敗していますか? 人々がフィールドに入力しているように感じますが、どういうわけか電子メールは空になっています。私が空と言うとき、プログラムでメッセージに追加したものは届くが、ユーザーが入力すると思われる実際の情報は届かないということですか? これはどのように起こっていますか?

4

1 に答える 1