2017-02-07 2 views
0

私は管理するウェブサイトにいくつかのhtml5フォームフィールドを用意しています。ユーザーが入力したデータをphpファイルにプッシュします。ここでhtml5フォームとphpを使用して空のメールを取得する

は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タグ)をサポートしていないブラウザ用webshimをeused、次の検証JSを追加しました:

<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: [email protected]"; 

// 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デバイスと私のラップトップから電子メールを送信することができて、私はいくつかの友達がアンドロイドデバイスから送信する必要があります。検証は私のために働くので、必要なフィールドを少なくとも記入することなく電子メールを送ることはできません。私は、検証を追加し、送信者の電子メールをデフォルトのものに設定する前に空の電子メールを取得していました。しかし、私はまだすべての変更の後で空の電子メールを取得します。私がテストすると、私はすべてのプラットフォームとブラウザでテストすることはできませんが、小切手を追加した後は空のメールを強制することはできません。私の検証はどこかで失敗していますか?私は人々が畑に詰まっているように感じていますが、何とかメールが空になってきています。私が空にすると、プログラムでメッセージに追加するものが出てくるのですが、ユーザーが入力すると思われる実際の情報はありません。これはどうですか?

+1

ユーザがJavaScriptを無効にしている可能性があります。これを回避するには、検証サーバー側を移動することができます。 (または両方を実行してください) –

+0

@ChipDeanでは、これを行う方法の例またはいくつかのガイダンスを提供できます。 –

+1

PHPの場合:フォームページで読み込んでエラーメッセージを表示できるようにセッション変数を設定し、ユーザーをフォームにリダイレクトする場合は、変数が空であるかどうかを確認します。 –

答えて

1

常にサーバー側の検証を行い、POSTが受信されていることを確認します。そうしないと、Webクローラーのような単純なものでも空の電子メールが拾われます。

<?php 
if (empty($_POST['email']) || empty($_POST['name'])) { 
    // Respond with a proper error message 
    ... 
} else { 
    // Send email 
    $to = "<dedicatedemail>@yahoo.com"; 
    $name = $_POST['name']; 
    $email = $_POST['email']; 
    ... 
} 
関連する問題