Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否显示空表单字段的消息?_Php - Fatal编程技术网

Php 是否显示空表单字段的消息?

Php 是否显示空表单字段的消息?,php,Php,我正试图让我的网站上的optin表单不发送空字段 我在表单字段中也有预定义的文本(例如“在此处输入您的姓名”),单击后会消失。我也不希望表单发送预定义的文本数据 用PHP实现这一点的最佳方法是什么 HTML: 预约:现在填写下表,我会打电话给你安排下一次牙科预约。。。 PHP: 请尝试以下方法: <?php $to = 'test@mywebsite.com'; $subject = 'New Patient'; $header = 'From: test@myweb

我正试图让我的网站上的optin表单不发送空字段

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

用PHP实现这一点的最佳方法是什么

HTML:


预约:现在填写下表,我会打电话给你安排下一次牙科预约。。。


PHP:


请尝试以下方法:

<?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';
    }
}
?>

首先,您应该使用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"/>


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

if(!empty($_POST['name'])) {
  // Name field was posted
}
这与isset不同,因为如果字段类似于“”或NULL,isset将返回true。鉴于empty仅接受非空/非null的值。因此,在这种情况下,空函数是更好的选择


希望这会有所帮助。

您可以通过在服务器端进行检查来防止出现这种情况:

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);
    }
}

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

更新:


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

POST
数组中收集所有信息,然后使用
array\u filter


添加了一个示例

一个问题是您使用了或:if($name=''| |$phone='')这意味着使用了某个测试的或名称或电话将导致发送电子邮件。我认为&&会更好。就像刚刚发布的示例一样。您好……如果您有新问题要添加,请编辑原始问题,不要发布新问题。我把你的新问题和这个问题合并了。谢谢。我相信你的意思是
if(empty($err)){…
,否则if的计算结果总是false
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);
    }
}