2017-12-04 6 views
-1

皆さん、ありがとうございます!PHPフォームは、電子メールと名前が無効であっても電子メールを送信します

私は初めてPHPを試してみましたが、私はPHPフォームを作成していましたが、これまでフィールドを検証できるようにしていましたし、フォームがフィールド空です。 ... "名前"と "電子メール"フィールドにはバリデーションフィルタがあります... "名前"は "文字と空白"以上を許可せず、 "電子メール"は "無効な電子メールフォーマット" 。

例: 名:Rob3rtが...それは数 メールを持っている:何も...件名の電子メールアドレス ではなく、メッセージには、検証フィルタを持っていない...

問題があること、です「名前」と「電子メール」に書かれた情報が一致しない場合でも、フォームは電子メールを送信します。

Q:フォームを保持するにはどうすればよいですか?すべてのフィールドに正しい情報が入るまで電子メールを送信しますか?これは、エラーが発生したかどうかをチェックしませんので、あなたがメールを送信する前に、フィールドが空でない場合は、あなただけチェックされ、機能していません

// This is the validation code // 
 

 
<?php 
 

 
// define variables and set to empty values 
 
$nameErr = $emailErr = $commentErr = $subjectErr = ""; 
 
$name = $email = $comment = $subject = ""; 
 

 
if ($_SERVER["REQUEST_METHOD"] == "POST") { 
 
    
 
    if (empty($_POST["name"])) { 
 
    $nameErr = "<h5>Name is required</h5>"; 
 
    } else { 
 
    $name = test_input($_POST["name"]); 
 
    // check if name only contains letters and whitespace 
 
    if (!preg_match("/^[a-zA-Z ]*$/",$name)) { 
 
     $nameErr = "<h5>Only letters and white space allowed</h5>"; 
 
    } 
 
    } 
 
    
 
    if (empty($_POST["email"])) { 
 
    $emailErr = "<h5>Email is required</h5>"; 
 
    } else { 
 
    $email = test_input($_POST["email"]); 
 
    // check if e-mail address is well-formed 
 
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { 
 
     $emailErr = "<h5>Invalid email format</h5>"; 
 
    } 
 
    } 
 

 
    if (empty($_POST["comment"])) { 
 
    $commentErr = "<h5>Message is required</h5>"; 
 
    } else { 
 
    $comment = test_input($_POST["comment"]); 
 
    } 
 
    
 
if (empty($_POST["subject"])) { 
 
    $subjectErr = "<h5>Subject is required</h5>"; 
 
    } else { 
 
    $subject = test_input($_POST["subject"]); 
 
    } 
 
    
 
} 
 

 
function test_input($data) { 
 
    $data = trim($data); 
 
    $data = stripslashes($data); 
 
    $data = htmlspecialchars($data); 
 
    return $data; 
 
} 
 

 
?> 
 

 
<form> 
 
Form comes here  
 
</form> 
 

 
// This is the sending code... I think the problem is here... // 
 

 
<?php 
 

 
if($_POST['name']!="" && $_POST['email']!="" && $_POST['comment']!="" && $_POST['subject']!="") { 
 

 
$to = "[email protected]"; 
 
$email = "From: " . $email . "\r\n"; 
 
$subject = "" . $subject . "\r\n"; 
 
$comment = "" . $comment . "\r\n"; 
 

 
mail($to,$subject,$comment,$email); 
 
    echo "good"; 
 
    } 
 
    else { 
 
    "bad"; 
 
    } 
 
    
 
?>

+3

**多すぎるコード**。あなた自身でこれをトラブルシューティングするより良い仕事をする必要があります。私たちはデバッガーではありません。あなたは**問題を分離し、そこからデバッグする必要があります。あなたが立ち往生している場合は、[**最小限で完全で検証可能な例**](http://stackoverflow.com/help/mcve)で**動作していないことの**明確な説明を提供してください。私は** [質問] **良い質問と** [完璧な質問](http://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/)**を読むことをお勧めします。また、** [ツアー] **を読んで** [this](// meta.stackoverflow.com/questions/347937/)**を読んでください。 –

+3

あなたのメールを送信するときには、空白のフォーム値以外はチェックしません。そのため、他の無効なデータが許可されます。 –

+0

私は既に問題を抱えていると思うポイントにコードを圧縮しました...しかし、私は送信コードの中で何を正確に書かなければならないのか分かりません... – Manuel

答えて

0

は、ここでは、コードです。それを修正するために

最も簡単な方法は、

if ($_SERVER['REQUEST_METHOD'] === 'POST' && $nameErr === '' && $emailErr === '' && $commentErr === '' && $subjectErr === '') { 

if($_POST['name']!="" && $_POST['email']!="" && $_POST['comment']!="" && $_POST['subject']!="") { 

を交換され、再び空のフィールドをチェックする必要なしにはありません、あなたはすでに前にそれを行っているので、あなただけの必要フォームをPOSTしているかどうか、およびすべてのエラーが空であるかどうかを確認します。一般的にあなたのコードを改善する方法について

いくつかのアドバイス:

1)は、二つの位置(一度フォーム上で、一度下記)にHTTP POSTを処理しないでください。 1つのPHPコードブロックにまとめてください。

2)サイトをリロードして、ユーザーが正常にフォームを再送信できないようにしてください。送信が成功したら、ページをリダイレクトします。 3)あなたのPHPをHTMLから分離すると、大量のファイルが残ってしまい、メンテナンスが難しくなります。あなたのHTMLフォームを別のファイルに入れ、includeそれを入れてください。

imhoはJavaScriptでサニタイズし、AJAX(角度、反応、jQueryなど)を使用して送信し、PHPで処理して(データを再度サニタイズする)、4xx HTTPを送信しますヘッダーにエラーがあり、そのエラーメッセージをJSONオブジェクトとして返します。JSONオブジェクトはJavaScriptで使用されます。

関連する問題