3

私の問題: メールアドレスに送信されるお問い合わせフォームがあります。通常は問題なく動作しますが、「メール」テキスト フィールド (メールの送信者がメールを入力する場所) にスペースが含まれていると、フォームは送信されません。他のフォームにスペースがある場合でも、フォームは送信されます。

電子メール アドレスにスペースを使用できないことはわかっていますが、電子メール フィールドにスペースを含めてメッセージを送信すると、実際には送信されていないのに、メッセージが送信されたことを示す別のページが表示されます。そのため、誰かが電子メールを入力するときに誤ってスペースを入れた場合、Web サイトはフォームを送信しませんが、送信したと表示されます。

設定方法は次のとおりです。 フォームの電子メール フィールドには、ユーザーがユーザー アカウントの電子メールとして保存したものが自動的に入力されます。この変数はPOST、フィールドが電子メール アドレスに送信される別のページ 'wl_process.php' を使用して渡されます。ただし、ユーザーの電子メール フィールドが自動的に入力されたとしても、応答を別の電子メールに送り返したい場合があります。

私がしようとしていることと、してはいけ ないこと: スペースを含めるとメールの送信が停止する理由がわかりません。スペースが入っていてもフォームを送信したい。テキスト フィールドからすべてのスペースが削除される PHP タグまたはメソッドを探しています。それが存在するかどうかはわかりません。別の解決策は、メールにスペースがないかどうかを確認することだと思います。スペースがある場合は、何かポップアップが表示され、「無効なメールが入力されました。もう一度やり直してください」と表示されます。しかし、理想的には、メールを送信したいだけです。また、なぜこれを行っているのかを誰かが知っていれば、将来の使用に非常に有益です。

追加情報

電子メール フィールドにスペースが入力されるまで、フォームは完全に機能することに注意してください。他のフィールドにスペースが入力されていても、フォームは送信されます!

また: $var_email は<? include?>、ページの上部にある から取得されます。インクルードにはいくつかの$_SESSION情報が含まれておりMYSQLI、データベースから電子メールを取得して PHP 変数に変換する呼び出しも含まれています。ただし、これが問題と関係があるとは思えません。私の問題は、スペースがメールの送信を停止することです。

重要でないこと

私の命名規則。$email名前付きの変数が、何らかの方法で電子メール アドレスのように扱われることはないと思い込まないでください。名前は何でもかまいません。ここでは変数とテキスト フィールドのみで、投稿されてから電子メールで送信されます。

マイコード

ページ 1 (フォームがある場所)

<div class="form_box">
...
    <div class="field clearfix">
      <label>Email <span>&#42;</span></label>
      <input id="element_1_email" name="element_1_email" value="<? echo $var_email;?>" size="30" class="validate[optional]" type="text" onClick="(this).value=''"/>
    </div>

ページ 2 (データが送信され、郵送される場所)

    <?
 $name = $_POST['element_0_name'];
 $email = $_POST['element_1_email'];
 $company = $_POST['element_2_company'];
 $date = $_POST['element_3_date'];
 $comment = $_POST['element_4_comment'];
 $list = $_POST['element_5_list'];
 $email_to = "contact@website.com";
 $email_subject = "Online Form";
 $email_message = "\n\n";

    function clean_string($string) {
        $bad = array ("content-type", "bcc:", "to:", "cc:", "href");
        return str_replace($bad, "",$string);
    }
    $email_message .= '<div style="font-family:Arial, Helvetica, sans-serif;padding-left: 90px;font-weight: 100;font-size: 14px;color: #2a2a2a;"><table width="1070px" height="685px;"border="0" cellspacing="0" background="http://www.website/image.jpg">
                    <tr>
                    <td style="vertical-align:top;padding-left:88px;">
                    <h2 style="padding-top:150px;padding-left:90px;">Form Information:</h2>';   
    $email_message .= "Name: ".clean_string($name)."<br>";
    $email_message .= "Email: " .clean_string($email). "<br>";
    $email_message .= "Company: " .clean_string($company). "<br>";
    $email_message .= "Date Required: " .clean_string($date). "<br>";
    $email_message .= "Comment: " .clean_string($comment). "<br>";
    $email_message .= '<u>List Of Things:<style> tr:nth-child(2n) {background-color:#d6d6d6;}</style> </u><br><table cellspacing="0" style="margin-top:10px;min-width:390px;border:1px solid #cccccc;">' .clean_string($list). '</table>';
    $email_message .= "</div>";

    $headers = 'From: '.$email."\r\n".
    'Reply-To: '. $email."\r\n" .
    'X-Mailer: PHP/' .phpversion();
    $headers .= "MIME-Version:1.0\r\n";
    $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
    @mail($email_to, $email_subject, $email_message, $headers);
 //
 ?>
4

1 に答える 1

2

$_POSTページ 2の変数からスペースを取り除かないのはなぜですか?

これを変える

$email = $_POST['element_1_email'];

これに

$email = str_replace(' ','',$_POST['element_1_email']);

-----------更新-----------

$headers変数の次のコードが原因で、メッセージが失敗しています。

$headers = 'From: '.$email."\r\n".'Reply-To: '. $email."\r\n" .

$email関数を通過しなかったここを使用しているため(配列に aをclean_string追加してスペースを削除することもできます)、基本的には、クリーンアップや電子メールの検証を行わずに、受信したものに電子メールを送信しようとしています.space$bad$_POST['element_1_email']

于 2013-07-18T18:03:31.187 に答える