2017-09-07 11 views
1

PHPは私の強みではなく、モーダルニュースレターの購読ポップアップを実装するように求められたとき、私はPHPを使用する必要があることを知っていたので、私はインターネットを一日中さまざまなことを試してみましたが、何もできないようで、誰かが私に正しい方向を向けることを本当に望んでいます。それは超簡単です、私は指定したアカウントに送信される名前と電子メールアドレスが必要です。私はこれが本当に基本的だと確信していますが、私の経験が不足しているため、どこに間違っているのか全く分かりません。私のコードは以下の通りです。インラインPHPのメール送信が機能しない

<?php 
if($_POST["submit"]) { 
    $recipient="[email protected]"; 
    $subject="Newsletter Subscription"; 
    $senderName=$_POST["name"]; 
    $senderEmail=$_POST["email"]; 

    $mailBody="Name: $senderName\nEmail: $senderEmail\n\nThis is a test!"; 

    mail($recipient, $subject, $mailBody, "From: $senderName <$senderEmail>"); 

    header('Location:http://www.urltoredirect.com/'); 
} 
?> 

<html> 

<head> 
    <title></title> 
</head> 

<body> 
    <form method="post" action="sendmail.php"> 
     <div class="rbm_input_txt"> 
      <input type="name" name="name" placeholder="name" required> 
     </div> 
     <div class="rbm_input_txt"> 
      <input type="email" name="email" placeholder="email" required> 
     </div> 
     <div class="rbm_form_submit"> 
      <button type="submit" class="rbm_btn_x_out_shtr">subscribe</button> 
     </div> 
    </form> 
</body> 

</html> 

ファイルをsendmail.phpとして保存し、自分のサーバーにアップロードします。フォームに記入すると、ページがリロードされ、指定されたURLにリダイレクトされず、メールも受信されません。私は問題が送信メールにあると思っています。一度ソートされると、リダイレクトが機能します。誰かが私が行方不明であることを明らかにすることはできますか?

EDIT:下記のように、自分のコードにname属性を追加しました。問題は未解決です。

+3

あなたの ''フィールドには、 '$ _POST []'変数に対応する 'name'属性が必要です。おかげさまで –

答えて

1

に名前がなければならないあなたは$_POST['submit']がtruthyであるかどうかをチェックしているが、あなたのフォームは、実際にその値を設定することはありません。あなたはこの問題を解決するために作ることができる2つの変更があります。

  1. リクエストに存在することsubmitキーためには、あなたはあなたのフォームのフィールドに割り当てる必要があります。あなたは、単にあなたの送信ボタンにnameパラメータを追加することによって行うことができます送信ボタン、にそれを追加する可能性がよいでしょう:

    <button name="submit" type="submit" class="rbm_btn_x_out_shtr">subscribe</button> 
    
  2. であっても上記の変更で、$_POST['submit']はまだそのため、偽と評価されます値は空になります。 (あなたはboolean conversionsためのルールでこれを見ることができます。)あなたはそれがtruthyだ場合ではなく、そのセットかどうかをチェックすることでこれを回避することができます

    if (isset($_POST['submit'])) 
    

また、あなただけ異なるために見ることができますたとえば、nameまたはemailなどのフィールドは、送信時に両方のフィールドが設定されることがわかっているためです。

+0

はい!私はその変更を行った、リダイレクトが働いて、私は電子メールを受け取りました。ご協力いただきありがとうございます!なぜ、私はisset()のPHPドキュメンテーションへの旅行がそれについていくらか光を当てるだろうとは思うが、それは本当に理解できない。再度、感謝します。 – Trido

+1

スクリプトを試してみたい場合は、送信ボタンに名前を追加するとリクエストがどのように変更されたかを確認するには、var_dump($ _ POST)またはprint_r($ _ POST)を追加することをおすすめします。私はまた、ブール変換へのリンクを追加しました。このリンクは、issetの必要性を明確にするのに役立ちます。 –

1

タグ

<div class="rbm_input_txt"><input type="name" placeholder="name" name="name" required><input type="email" placeholder="email" name="email``" required 
+0

私はそれをしましたが、それはまだリダイレクトされなかったし、私は電子メールを受信しなかったので、それはすべてが間違っているとは思わない。 – Trido

関連する問題