0

空のフィールドを送信しないように、自分のWebサイトでオプチンフォームを取得しようとしています。

また、フォームフィールド内に事前定義されたテキスト(例:「ここに名前を入力してください」)があり、クリックすると消えます。フォームに事前定義されたテキストデータも送信させたくありません。

PHPでこれを行うための最良の方法は何ですか?

HTML:

<div class="form">
<h2>Get An Appointment: <font size="3"><font color="#6E5769">Fill in the form below now, and I'll call you to setup your next dental appointment...</font></font></h2>
<p id="feedback"><?php echo $feedback; ?></p>
<form action="contact.php" method="post"/>
<p class="name">
<input type="text" name="name" id="name" style="text-align:center;" onClick="this.value='';" value="Enter your name"/>


PHP:

<?php

$to = 'test@mywebsite.com'; $subject = 'New Patient';

$name = $_POST['name']; $phone = $_POST['phone'];

$body = <<<EMAIL

Hi, my name is $name, and phone number is $phone.

EMAIL;

$header = 'From: test@mywebsite.com';

if($_POST){ if($name != '' && $phone != ''){ mail($to, $subject, $body, $header); }else{ $feedback = 'Fill out all the fields'; } } ?>
4

6 に答える 6

1

配列内のすべての情報を収集しPOST、次を使用して空の値を削除しますarray_filter

サンプルを追加http://codepad.org/ZtR6Eh93

于 2012-09-22T23:28:50.877 に答える
0

サーバー側でチェックインすることで、これを防ぐことができます。

if($_POST){ if($name != '' && $phone != '' && $name!='Enter your name' && $email!='Enter your email'){ mail($to, $subject, $body, $header); }else{ $feedback = 'Fill out all the fields'; } } ?>

ただし、エラー処理を次のように改善することをお勧めします。

if ($_POST) {
    $err = array();
    if ($name == '' || $name == 'Enter your name') $err[] = 'Name is required';
    if ($email == '' || $email == 'Enter your email') $err[] = 'Email is required';
    if (empty($err)) {
        mail($to, $subject, $body, $header);
    } else {
        $feedback = 'Fill out all fields. Errors: '.implode(', ',$err);
    }
}
于 2012-09-22T23:23:56.677 に答える
0

送信したくないすべての入力に対してdisabledプロパティを設定するonsubmitハンドラーをフォームに追加しますtrue

アップデート:

これは、アプリの PHP 側ですべての入力パラメーターをチェックするという要件を緩和するものではありません。

于 2012-09-22T23:24:23.027 に答える
0

$_POST 変数、できれば必要なフォーム フィールド ($_POST だけでなく) で empty() を使用することをお勧めします。例えば:

if(!empty($_POST['name'])) {
  // Name field was posted
}

フィールドが "" または NULL のようなものである場合、isset は true を返すため、これは isset とは異なります。一方 !empty は、空でない/ null でない値のみを受け入れます。したがって、この場合、空の関数がより良い選択である理由です。

それが役立つことを願っています。

于 2012-09-22T20:28:31.957 に答える
0

まず、JavaScript を使用してクライアント側で検証を行う必要があります。

<? 

$name = $phone = $status= '';

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

    $name = (!empty($_POST['name'])?$_POST['name']:null);
    $phone = (!empty($_POST['phone'])?$_POST['phone']:null);

    if($name !== null && $phone !== null){
       mail($to, $subject, $body, $header);
       $name = $phone = '';
       $status = 'Message Sent';
    }
    else
       $status= 'Fill out all the fields';

}      

<? if(!empty($status)): ?><p class="error"><?=$status?></p><? endif; ?>

<input type="text" name="name" value="<?=$name?>"/>
<input type="text" name="phone" value="<?=$phone?>"/>
<input type="submit" name="submit" value="send"/>
于 2012-09-22T20:14:31.590 に答える
0

これを試してください:

<?php
$to = 'test@mywebsite.com';
$subject = 'New Patient';

$header = 'From: test@mywebsite.com';

$feedback = null;

if($_SERVER['REQUEST_METHOD'] == 'POST'){
    $name = (!empty($_POST['name'])?$_POST['name']:null);
    $phone = (!empty($_POST['phone'])?$_POST['phone']:null);

    $body = <<<EMAIL
Hi, my name is $name, and phone number is $phone.
EMAIL;

    if($name !== null && $phone !== null){
        mail($to, $subject, $body, $header);
        $feedback = 'Message Sent';
    }else{
        $feedback = 'Fill out all the fields';
    }
}
?>
于 2012-09-22T20:11:28.097 に答える