PHP联系人表单-验证和

PHP联系人表单-验证和,php,forms,validation,Php,Forms,Validation,我是php新手,一直在试图弄清楚如何正确验证电子邮件地址以及数据是否已输入到文本框中。我真的找不到我需要的东西,而尝试在php.net上遵循这些示例会让我陷入一个圈套。任何帮助都将不胜感激!还有,我用这张表格的方向对吗?表单工作时,我会收到一封电子邮件,格式与我希望在下拉框中显示的电子邮件地址相同 -更新-我重写了一些脚本…有人能检查一下吗,我现在有更多的问题。即使表单中没有输入任何内容,它也会发送电子邮件,即使您这样做,它也会发送您输入的任何内容。“电子邮件”示例test@example正在被

我是php新手,一直在试图弄清楚如何正确验证电子邮件地址以及数据是否已输入到文本框中。我真的找不到我需要的东西,而尝试在php.net上遵循这些示例会让我陷入一个圈套。任何帮助都将不胜感激!还有,我用这张表格的方向对吗?表单工作时,我会收到一封电子邮件,格式与我希望在下拉框中显示的电子邮件地址相同

-更新-我重写了一些脚本…有人能检查一下吗,我现在有更多的问题。即使表单中没有输入任何内容,它也会发送电子邮件,即使您这样做,它也会发送您输入的任何内容。“电子邮件”示例test@example正在被允许通过

<?php

//Sainitize function
function sanitizeString($value){
$value = strip_tags($value);
$value = trim($value);
$value = escapeshellcmd($value);
$value = htmlentities($value);

return $value;
}

$send = $_POST[send];

//Email validation - does not work by the way
if (filter_var($from, FILTER_VALIDATE_EMAIL)) {
$email_error = true;
$error_message[] = "Please use a valid email format: name@domain.com";
}     

if($send == 1){$email_sent = true; $step_1 = "complete";}
else{$email_sent = false; $step_1 = "complete";}

if($email_sent === true) {

$from = sanitizeString($_POST['from']);
$to = sanitizeString($_POST['to']);
$name = sanitizeString($_POST['name']);
$title = sanitizeString($_POST['title']);
$company = sanitizeString($_POST['company']);
$phone = sanitizeString($_POST['phone']);
$subject = sanitizeString($_POST['subject']);
$message = sanitizeString($_POST['message']);

// define variables and initialize with empty values
$nameErr = $addressErr = $emailErr = $messageErr = $phoneErr = "";
$name = $address = $email = $message = $phone = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {

    $nameErr = "Please enter your name.";
}
else {
    $name = $_POST["name"];
}

if (empty($_POST["email"])) {
    $emailErr = "Please enter your email."; 
}
else {
    $email = $_POST["email"];
}
if (empty($_POST["phone"])) {
    $phoneErr = "Please enter a phone number.";
}
else {
    $phone = $_POST["phone"];
}
if (empty($_POST["message"]))  {
    $messageErr = "Cannot leave message box blank."; 
}
else {
    $message = $_POST["message"];
}

}

//select the correct to address
switch ($to) {
case "1":
$to = "contact1@example.com";
break;
case "2":
$to = "contact2@example.com";
break;
default:
$to = "contact1@example.com";
break;}

if($message_error !== true && $email_error !== true){
$email_headers = "From:".$from."\nMIME-Version: 1.0 \nContent-type: text/html; charset=iso-8859-1";

$message_send = "<h3>".$name."<br>".$title."<br>".$company."<br>".$phone."<br>".$from."</h3><hr><h4>".$subject."</h4>".$message;

if (mail($to, $subject, $message_send, $email_headers)) {$error_message = "Thank you, your email is on the way!";}
else {$error_message = "There seems to be a problem!";}}

}

?>
<body>

<form action="<?php ($_SERVER["PHP_SELF"]);?>" method="post">
<table style="border-collapse:collapse; border-spacing:0" >
<tr>
<td>Name:</td>
<td><input name="name" placeholder="Name*" type="text" class="text"/>
        <span class="error"><?php echo $nameErr;?></span></td>
</tr>
<tr>
<td>Title:</td>
<td><input type="text" placeholder="Title" name="title" size="50"/></td>
</tr>
<tr>
<td>Company:</td>
<td><input type="text" placeholder="Company" name="company" size="50" /></td>
</tr>
<tr>
<td>Phone:</td>
<td>
    <input name="phone" placeholder="Phone*" type="tel" size="10" maxlength="10" value="<?php echo htmlspecialchars($phone);?>"/>
    <span class="style1">Example: 1234567890</span> <span class="error" style="color:#990000"><?php echo $phoneErr;?></span></td>
</tr>
<tr>
<td>Email:</td>
<td><input name="from" placeholder="Email*" type="email" class="text" value="<?php echo htmlspecialchars($email);?>">
    <span class="error"><?php echo $emailErr;?></span></td>
</tr>
<tr>
<td>To:</td>
<td><select name="to" size="1">
    <option value="1">Contact 1</option>
    <option value="2">Contact 2</option>
    </select></td>
</tr>
<tr>
<td>Subject:</td>
<td><input type="text" name="subject" placeholder="Subject" size="50" /></td>
</tr>
<tr>
<td valign="top">Detail:</td>
<td colspan="2"><textarea cols="50" rows="4" name="message" placeholder="Type your message here."></textarea></td>
</tr>
<tr>
<td colspan="2" style="text-align:center;"><input type="hidden" name="send" value="1" /><input type="submit" value="Send" name="email_1" /></td>
</tr>

</table >
</form>


对于电子邮件验证,您可以使用带有
FILTER\u VALIDATE\u EMAIL
FILTER属性的函数。这是一篇关于输入验证的好文章。从php手册中尝试以下操作:

var_dump(filter_var('bob@example.com', FILTER_VALIDATE_EMAIL));
你可以简化你的代码,它有点凌乱<代码>切换
电子邮件地址不是很好的做法。您可以像这样向表单中添加值:

<select name="to" size="1">
    <option value="contact1@example.com">Contact1</option>
    <option value="contact2@example.com">Contact2</option>
</select>

我在php.net上找到了这个。。它有用吗

if (filter_var($from, FILTER_VALIDATE_EMAIL)) {
   $email_error = true;
   $error_message[] = "Please use a valid email format: name@domain.com";
} 

过滤器变量确实起作用。试试下面的代码

<?php
   $emailError = array();

   if(isset($_POST["send"])){

   $from = $_POST["from"];

   if (!filter_var($from, FILTER_VALIDATE_EMAIL)) {
   $emailError[] = "Please use a valid email format: name@domain.com\n\r";
   } 
   else {
    echo $from . " is a valid email.\n\r";
   }

   if ($emailError){
     foreach ($emailError as $key){
     echo $key;
     }
   }

} else {

?> 

  <form action="<?php ($_SERVER["PHP_SELF"]);?>" method="post">
  <table>
  <tr>
  <td>Email:</td>
  <td>
  <input name="from" placeholder="Email*" type="email" class="text" value="">
  </td>
  </tr>
  </table>
  <input type="submit" value="Send" name="send" />
  </form>

<?php
 }
?>


可能重复的井,告诉我如何验证电子邮件地址,以便它是example@example.com格式,这很有帮助。尽管如此,如何验证其他字段以使其成为必需的呢?好的,我找到了一种方法来验证输入字段,使用if($\u SERVER[“REQUEST\u METHOD”]=“POST”){if(empty($\u POST[“name”]){$nameErr=“Please enter your name.”;}或者{$name=$\u POST[“name”];}这是名称输入字段:@Beat谢谢,我希望在同一表单页面上找到一些东西,提醒用户,他们将电子邮件地址字段留空,而不是通过表单发送电子邮件……由于某种原因,现在确实如此。实际上,将使用此表单的人将被公司名称引用,然后回复给他们如果适用的话,可以通过电话或电子邮件发送。电子邮件只是创建了一种在电子邮件发送给收件人时单击它的方式。谢谢!哦,我在选择中看到了我可以在选项中声明值,这将非常有帮助。是的,我注意到,当我在xampp上运行一些php脚本时,我遇到了一些不推荐的错误,我一直试图确保获取正确的代码。正如我所说,我一直在尝试自学php,虽然论坛很棒,但一些示例已经过时了。:(我最终重写了一些脚本,你能看一下吗。我决定仍然使用电子邮件地址开关,因为我有多个地址(不同的人/部门)用户可以从中选择,我不希望地址在源代码/HTML中可见。非常感谢!它工作得非常完美。我可以毫无问题地将其添加到我的网站。我必须说,尽管我曾经以为我开始学习PHP,但现在我又陷入了黑暗之中(似乎有太多的方法可以使用它,还有太多的例子。书籍也没有帮助,这就是我得到大部分重新编写的脚本的地方…你好,我很感谢你很久以前对这个脚本的帮助。我想知道你是否可以再次帮上忙。当用户从联系人下拉列表中选择时,我正在尝试设置主题下框。我真的不知道数组有多大,所以我不确定在$receivers数组设置$to时如何设置$subject。不,我尝试过它,但仍然发送了一封电子邮件,而没有验证电子邮件字段。谢谢,无论在任何字段中放置了什么,我仍然无法阻止表单发送电子邮件。
<?php
   $emailError = array();

   if(isset($_POST["send"])){

   $from = $_POST["from"];

   if (!filter_var($from, FILTER_VALIDATE_EMAIL)) {
   $emailError[] = "Please use a valid email format: name@domain.com\n\r";
   } 
   else {
    echo $from . " is a valid email.\n\r";
   }

   if ($emailError){
     foreach ($emailError as $key){
     echo $key;
     }
   }

} else {

?> 

  <form action="<?php ($_SERVER["PHP_SELF"]);?>" method="post">
  <table>
  <tr>
  <td>Email:</td>
  <td>
  <input name="from" placeholder="Email*" type="email" class="text" value="">
  </td>
  </tr>
  </table>
  <input type="submit" value="Send" name="send" />
  </form>

<?php
 }
?>