0

我正在尝试在我的网站上获取 optin 表单以不发送空字段。

我还在表单字段中预定义了文本(例如“在此处输入您的姓名”),单击时会消失。我也不希望表单发送预定义的文本数据。

用 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

将 onsubmit 处理程序添加到您的表单,为您不希望发送的所有输入设置disabled属性true

更新:

这并没有放松在应用程序的 PHP 端检查所有输入参数的要求。

于 2012-09-22T23:24:23.027 回答
0

我建议您在 $_POST 变量上使用 empty(),最好在所需的表单字段上使用(不仅仅是 $_POST)。例如:

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

这与 isset 不同,因为如果字段类似于 "" 或 NULL,isset 将返回 true。而 !empty 只接受非空/非空值。因此,为什么在这种情况下空函数是更好的选择。

希望有帮助。

于 2012-09-22T20:28:31.957 回答
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 回答
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 回答