Php 在我添加附件选项之前,我的联系人表单工作正常。消息不再被发送。知道如何验证附件字段吗?

Php 在我添加附件选项之前,我的联系人表单工作正常。消息不再被发送。知道如何验证附件字段吗?,php,html,forms,validation,Php,Html,Forms,Validation,我已经制作了一个带有以下字段的联系表单:姓名、电子邮件、消息。在我将附件选项添加到表单之前,一切都很好——邮件被发送到了我的电子邮件中 我试图通过搜索教程来验证附件字段,但似乎没有任何效果。我想我只是不知道如何在我已经存在的代码中实现它。。有人帮忙吗 以下是表格: <?php include 'contact-form.php'; ?> <form id="contact" action="<?php echo $_SERVER['PHP_SELF']; ?>"

我已经制作了一个带有以下字段的联系表单:姓名、电子邮件、消息。在我将附件选项添加到表单之前,一切都很好——邮件被发送到了我的电子邮件中

我试图通过搜索教程来验证附件字段,但似乎没有任何效果。我想我只是不知道如何在我已经存在的代码中实现它。。有人帮忙吗

以下是表格:

<?php include 'contact-form.php'; ?>

<form id="contact" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
<h3>Contact Us</h3>
<fieldset>
  <input placeholder="Nimi" type="text" tabindex="1" name="thename"  value="<?= $thename ?>" autofocus>
    <div class="error"><span><?= $name_error ?></span></div>
</fieldset>
<fieldset>
  <input placeholder="Email" type="text" tabindex="2" name="email" value="<?= $email ?>">
    <div class="error"><span><?= $email_error ?></span></div>
</fieldset>
<fieldset>
  <textarea placeholder="Sisesta sõnum siia.." type="text" tabindex="3" name="message"></textarea>
    <div class="error"><span><?= $message_error ?></span></div>
</fieldset>
<fieldset>
    <label for="attachment1">File:</label>&nbsp;<input type="file" id="attachment1" name="attachment[]" size="35">
    <label for="attachment2">File:</label>&nbsp;<input type="file" id="attachment2" name="attachment[]" size="35">
    <div class="error"><span><?= $attachment_error ?></span></div>
</fieldset>
<fieldset>
  <button name="submit" type="submit" id="contact-submit" data-submit="...Saatmine">Saada</button>
</fieldset>
<div class="success"><?= $success; ?></div>
<div class="error"><?= $error; ?></div>
</form>
<?php
$name_error = $email_error = $message_error = $attachment_error = "";
$thename = $email = $message = $success = "";

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

if (empty($_POST["thename"])) {
    $name_error = "Palun sisesta nimi";
} else {
    $thename = test_input($_POST["thename"]);
    // check if name only contains letters, whitespace and hyphen
    if (!preg_match("/^[a-zA-Z -]*$/",$thename)) {
        $name_error = "Sisestada saab ainult tähti, tühikuid ja sidekriipse";
    }
}

if (empty($_POST["email"])) {
  $email_error = "Palun sisesta email";
} else {
    $email = test_input($_POST["email"]);
    // email validation
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $email_error = "Sisesta email korrektselt";
    }
}

if (empty($_POST["message"])) {
    $message_error = "Palun sisesta sõnum";
} else {
    $message = test_input($_POST["message"]);
}

if (empty($_FILES["attachment"])) {
    $attachment_error = "Palun sisesta enda eluloo fail";
}

if ($name_error == '' and $email_error == '' and $message_error == '' ){
    $message_body = '';
    unset($_POST['submit']);
    foreach ($_POST as $key => $value){
        $message_body .= "$key: $value\n";
    }


    $to = 'myemail@gmail.com';
    $subject = 'Eesti Elulood';
    $message = "Sulle saadeti kiri Rannu koguduse kodulehelt.\n\nSaatja nimi: $thename\n\nSaatja email: $email\n\nSõnum: $message";
    // create email headers
    $headers =  'From: '.$email."\r\n".
                'Reply-To: '.$email."\r\n" .
                'X-Mailer: PHP/' . phpversion();
    if (isset($_FILES['attachment']['name'])) {
$semi_rand = md5(uniqid(time()));
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
$headers = "From: " . '=?UTF-8?B?' . base64_encode($thename) . '?=' . " 
<$email>" . PHP_EOL;
$headers .= "Reply-To: " . '=?UTF-8?B?' . base64_encode($thename) . '?=' . 
" <$email>" . PHP_EOL;
$headers .= "Return-Path: $email" . PHP_EOL;
$headers .= "MIME-Version: 1.0" . PHP_EOL;
$headers .= "Content-Type: multipart/mixed;" . PHP_EOL;
$headers .= " Boundary=\"{$mime_boundary}\"";
$datamsg = "This is a multi-part message in MIME format." . PHP_EOL . 
PHP_EOL;
$datamsg .= "--{$mime_boundary}" . PHP_EOL;
$datamsg .= "Content-Type: text/plain; Charset=\"UTF-8\"" . PHP_EOL;
$datamsg .= "Content-Transfer-Encoding: 8bit" . PHP_EOL . PHP_EOL;
$datamsg .= $message . PHP_EOL . PHP_EOL;
for ($index = 0; $index < count($_FILES['attachment']['name']); $index++) 
{
if ($_FILES['attachment']['name'][$index] != "") {
  $file_name = $_FILES['attachment']['name'][$index];
  $data_file = 
chunk_split(base64_encode(file_get_contents($_FILES['attachment'] 
['tmp_name'][$index])));
  $datamsg .= "--{$mime_boundary}" . PHP_EOL;
  $datamsg .= "Content-Type: application/octet-stream; Name=\" 
{$file_name}\"" . PHP_EOL;
  $datamsg .= "Content-Disposition: attachment; Filename=\"{$file_name}\"" . PHP_EOL;
  $datamsg .= "Content-Transfer-Encoding: base64" . PHP_EOL . PHP_EOL . 
$data_file . PHP_EOL . PHP_EOL;
}
}
$datamsg .= "--{$mime_boundary}--";
}

    if (@mail($to, '=?UTF-8?B?' . base64_encode($subject) . '?=', 
$datamsg, $headers, "-f$email")){
        $success = "Thankyou, message sent!.";
    } else {
        $error = "Sorry but the email could not be sent. Please try again!";
    }   
}
}

function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}

1) 除了html标记外,php代码中没有邮件附件代码,因此无法发送邮件附件

2) 您必须使用
chunk\u split(base64\u encode())
对附件进行编码,然后使用正确的方式将它们导入到消息部分

3) 您忘记输入正确的邮件头,这也是您无法发送邮件的另一个原因

4)你必须考虑,如果你使用Gmail,你可以发送的文件类型可能有限制,所以请阅读以下内容:

5) 我建议您使用长php标记,而不是短标记:

不要写
,而是写

6) 您的php中存在严重错误,这就是为什么按submit键时您会在家中而不是在联系人表单中的原因:

是错误的

是正确的

见第5点)

以下是附件的正确html标记示例:

<label for="attachment1">File:</label>&nbsp;<input type="file" id="attachment1" name="attachment[]" size="35">
<label for="attachment2">File:</label>&nbsp;<input type="file" id="attachment2" name="attachment[]" size="35">
<label for="attachment3">File:</label>&nbsp;<input type="file" id="attachment3" name="attachment[]" size="35">
if (isset($_FILES['attachment']['name'])) {
  $semi_rand = md5(uniqid(time()));
  $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
  $headers = "From: " . '=?UTF-8?B?' . base64_encode($sender_name) . '?=' . " <$from_email>" . PHP_EOL;
  $headers .= "Reply-To: " . '=?UTF-8?B?' . base64_encode($sender_name) . '?=' . " <$from_email>" . PHP_EOL;
  $headers .= "Return-Path: $from_email" . PHP_EOL;
  $headers .= "MIME-Version: 1.0" . PHP_EOL;
  $headers .= "Content-Type: multipart/mixed;" . PHP_EOL;
  $headers .= " Boundary=\"{$mime_boundary}\"";
  $datamsg = "This is a multi-part message in MIME format." . PHP_EOL . PHP_EOL;
  $datamsg .= "--{$mime_boundary}" . PHP_EOL;
  $datamsg .= "Content-Type: text/plain; Charset=\"UTF-8\"" . PHP_EOL;
  $datamsg .= "Content-Transfer-Encoding: 8bit" . PHP_EOL . PHP_EOL;
  $datamsg .= $message . PHP_EOL . PHP_EOL;
  for ($index = 0; $index < count($_FILES['attachment']['name']); $index++) {
    if ($_FILES['attachment']['name'][$index] != "") {
      $file_name = $_FILES['attachment']['name'][$index];
      $data_file = chunk_split(base64_encode(file_get_contents($_FILES['attachment']['tmp_name'][$index])));
      $datamsg .= "--{$mime_boundary}" . PHP_EOL;
      $datamsg .= "Content-Type: application/octet-stream; Name=\"{$file_name}\"" . PHP_EOL;
      $datamsg .= "Content-Disposition: attachment; Filename=\"{$file_name}\"" . PHP_EOL;
      $datamsg .= "Content-Transfer-Encoding: base64" . PHP_EOL . PHP_EOL . $data_file . PHP_EOL . PHP_EOL;
    }
  }
  $datamsg .= "--{$mime_boundary}--";
}
if (@mail($recipient_email, '=?UTF-8?B?' . base64_encode($subject) . '?=', $datamsg, $headers, "-f$from_email")) {
  exit("Files Sent Successfully");
} else {
  exit("Sorry but the email could not be sent. Please go back and try again!");
}
文件:
文件:
文件:
以下是附件的正确php邮件代码示例:

<label for="attachment1">File:</label>&nbsp;<input type="file" id="attachment1" name="attachment[]" size="35">
<label for="attachment2">File:</label>&nbsp;<input type="file" id="attachment2" name="attachment[]" size="35">
<label for="attachment3">File:</label>&nbsp;<input type="file" id="attachment3" name="attachment[]" size="35">
if (isset($_FILES['attachment']['name'])) {
  $semi_rand = md5(uniqid(time()));
  $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
  $headers = "From: " . '=?UTF-8?B?' . base64_encode($sender_name) . '?=' . " <$from_email>" . PHP_EOL;
  $headers .= "Reply-To: " . '=?UTF-8?B?' . base64_encode($sender_name) . '?=' . " <$from_email>" . PHP_EOL;
  $headers .= "Return-Path: $from_email" . PHP_EOL;
  $headers .= "MIME-Version: 1.0" . PHP_EOL;
  $headers .= "Content-Type: multipart/mixed;" . PHP_EOL;
  $headers .= " Boundary=\"{$mime_boundary}\"";
  $datamsg = "This is a multi-part message in MIME format." . PHP_EOL . PHP_EOL;
  $datamsg .= "--{$mime_boundary}" . PHP_EOL;
  $datamsg .= "Content-Type: text/plain; Charset=\"UTF-8\"" . PHP_EOL;
  $datamsg .= "Content-Transfer-Encoding: 8bit" . PHP_EOL . PHP_EOL;
  $datamsg .= $message . PHP_EOL . PHP_EOL;
  for ($index = 0; $index < count($_FILES['attachment']['name']); $index++) {
    if ($_FILES['attachment']['name'][$index] != "") {
      $file_name = $_FILES['attachment']['name'][$index];
      $data_file = chunk_split(base64_encode(file_get_contents($_FILES['attachment']['tmp_name'][$index])));
      $datamsg .= "--{$mime_boundary}" . PHP_EOL;
      $datamsg .= "Content-Type: application/octet-stream; Name=\"{$file_name}\"" . PHP_EOL;
      $datamsg .= "Content-Disposition: attachment; Filename=\"{$file_name}\"" . PHP_EOL;
      $datamsg .= "Content-Transfer-Encoding: base64" . PHP_EOL . PHP_EOL . $data_file . PHP_EOL . PHP_EOL;
    }
  }
  $datamsg .= "--{$mime_boundary}--";
}
if (@mail($recipient_email, '=?UTF-8?B?' . base64_encode($subject) . '?=', $datamsg, $headers, "-f$from_email")) {
  exit("Files Sent Successfully");
} else {
  exit("Sorry but the email could not be sent. Please go back and try again!");
}
if(isset($\u文件['attachment']['name'])){
$semi_rand=md5(uniqid(time());
$mime_boundary=“==Multipart_boundary_x{$semi_rand}x”;
$headers=“From:”..=?UTF-8?B?”.base64_编码($sender_name)。“?=”.PHP_EOL;
$headers.=“回复:”..=?UTF-8?B?”.base64_编码($sender_name)。“?=”.PHP_EOL;
$headers.=“返回路径:$from_email”.PHP_EOL;
$headers.=“MIME版本:1.0”。PHP_EOL;
$headers.=“内容类型:多部分/混合;”;
$headers.=“Boundary=\”{$mime\u Boundary}\”;
$datamsg=“这是MIME格式的多部分消息。”.PHP\u EOL.PHP\u EOL;
$datamsg.=“{$mime\u boundary}”.PHP\u EOL;
$datamsg.=“内容类型:文本/普通;字符集=\“UTF-8\”。PHP\u EOL;
$datamsg.=“内容传输编码:8比特”。PHP_EOL.PHP_EOL;
$datamsg.=$message.PHP_EOL.PHP_EOL;
对于($index=0;$index
其中,
$sender\u name
是发件人的姓名,
$from\u email
是发件人的电子邮件,
$recipient\u email
是您电子邮件的收件人

您可以从我的代码中选取一个例子,并将其集成到您的项目中,我只编写了有关发送附件的基本部分

我希望这能有所帮助。

1)除了html标记外,php代码中没有邮件附件代码,因此无法发送邮件附件

2) 您必须使用
chunk\u split(base64\u encode())
对附件进行编码,然后使用正确的方式将它们导入到消息部分

3) 您忘记输入正确的邮件头,这也是您无法发送邮件的另一个原因

4)你必须考虑,如果你使用Gmail,你可以发送的文件类型可能有限制,所以请阅读以下内容:

5) 我建议您使用长php标记,而不是短标记:

不要写
,而是写

6) 您的php中存在严重错误,这就是为什么按submit键时您会在家中而不是在联系人表单中的原因:

是错误的

是正确的

见第5点)

以下是附件的正确html标记示例:

<label for="attachment1">File:</label>&nbsp;<input type="file" id="attachment1" name="attachment[]" size="35">
<label for="attachment2">File:</label>&nbsp;<input type="file" id="attachment2" name="attachment[]" size="35">
<label for="attachment3">File:</label>&nbsp;<input type="file" id="attachment3" name="attachment[]" size="35">
if (isset($_FILES['attachment']['name'])) {
  $semi_rand = md5(uniqid(time()));
  $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
  $headers = "From: " . '=?UTF-8?B?' . base64_encode($sender_name) . '?=' . " <$from_email>" . PHP_EOL;
  $headers .= "Reply-To: " . '=?UTF-8?B?' . base64_encode($sender_name) . '?=' . " <$from_email>" . PHP_EOL;
  $headers .= "Return-Path: $from_email" . PHP_EOL;
  $headers .= "MIME-Version: 1.0" . PHP_EOL;
  $headers .= "Content-Type: multipart/mixed;" . PHP_EOL;
  $headers .= " Boundary=\"{$mime_boundary}\"";
  $datamsg = "This is a multi-part message in MIME format." . PHP_EOL . PHP_EOL;
  $datamsg .= "--{$mime_boundary}" . PHP_EOL;
  $datamsg .= "Content-Type: text/plain; Charset=\"UTF-8\"" . PHP_EOL;
  $datamsg .= "Content-Transfer-Encoding: 8bit" . PHP_EOL . PHP_EOL;
  $datamsg .= $message . PHP_EOL . PHP_EOL;
  for ($index = 0; $index < count($_FILES['attachment']['name']); $index++) {
    if ($_FILES['attachment']['name'][$index] != "") {
      $file_name = $_FILES['attachment']['name'][$index];
      $data_file = chunk_split(base64_encode(file_get_contents($_FILES['attachment']['tmp_name'][$index])));
      $datamsg .= "--{$mime_boundary}" . PHP_EOL;
      $datamsg .= "Content-Type: application/octet-stream; Name=\"{$file_name}\"" . PHP_EOL;
      $datamsg .= "Content-Disposition: attachment; Filename=\"{$file_name}\"" . PHP_EOL;
      $datamsg .= "Content-Transfer-Encoding: base64" . PHP_EOL . PHP_EOL . $data_file . PHP_EOL . PHP_EOL;
    }
  }
  $datamsg .= "--{$mime_boundary}--";
}
if (@mail($recipient_email, '=?UTF-8?B?' . base64_encode($subject) . '?=', $datamsg, $headers, "-f$from_email")) {
  exit("Files Sent Successfully");
} else {
  exit("Sorry but the email could not be sent. Please go back and try again!");
}
文件:
文件:
文件:
以下是附件的正确php邮件代码示例:

<label for="attachment1">File:</label>&nbsp;<input type="file" id="attachment1" name="attachment[]" size="35">
<label for="attachment2">File:</label>&nbsp;<input type="file" id="attachment2" name="attachment[]" size="35">
<label for="attachment3">File:</label>&nbsp;<input type="file" id="attachment3" name="attachment[]" size="35">
if (isset($_FILES['attachment']['name'])) {
  $semi_rand = md5(uniqid(time()));
  $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
  $headers = "From: " . '=?UTF-8?B?' . base64_encode($sender_name) . '?=' . " <$from_email>" . PHP_EOL;
  $headers .= "Reply-To: " . '=?UTF-8?B?' . base64_encode($sender_name) . '?=' . " <$from_email>" . PHP_EOL;
  $headers .= "Return-Path: $from_email" . PHP_EOL;
  $headers .= "MIME-Version: 1.0" . PHP_EOL;
  $headers .= "Content-Type: multipart/mixed;" . PHP_EOL;
  $headers .= " Boundary=\"{$mime_boundary}\"";
  $datamsg = "This is a multi-part message in MIME format." . PHP_EOL . PHP_EOL;
  $datamsg .= "--{$mime_boundary}" . PHP_EOL;
  $datamsg .= "Content-Type: text/plain; Charset=\"UTF-8\"" . PHP_EOL;
  $datamsg .= "Content-Transfer-Encoding: 8bit" . PHP_EOL . PHP_EOL;
  $datamsg .= $message . PHP_EOL . PHP_EOL;
  for ($index = 0; $index < count($_FILES['attachment']['name']); $index++) {
    if ($_FILES['attachment']['name'][$index] != "") {
      $file_name = $_FILES['attachment']['name'][$index];
      $data_file = chunk_split(base64_encode(file_get_contents($_FILES['attachment']['tmp_name'][$index])));
      $datamsg .= "--{$mime_boundary}" . PHP_EOL;
      $datamsg .= "Content-Type: application/octet-stream; Name=\"{$file_name}\"" . PHP_EOL;
      $datamsg .= "Content-Disposition: attachment; Filename=\"{$file_name}\"" . PHP_EOL;
      $datamsg .= "Content-Transfer-Encoding: base64" . PHP_EOL . PHP_EOL . $data_file . PHP_EOL . PHP_EOL;
    }
  }
  $datamsg .= "--{$mime_boundary}--";
}
if (@mail($recipient_email, '=?UTF-8?B?' . base64_encode($subject) . '?=', $datamsg, $headers, "-f$from_email")) {
  exit("Files Sent Successfully");
} else {
  exit("Sorry but the email could not be sent. Please go back and try again!");
}
if(isset($\u文件['attachment']['name'])){
$semi_rand=md5(uniqid(time());
$mime_boundary=“==Multipart_boundary_x{$semi_rand}x”;
$headers=“From:”..=?UTF-8?B?”.base64_编码($sender_name)。“?=”.PHP_EOL;
$headers.=“回复:”..=?UTF-8?B?”.base64_编码($sender_name)。“?=”.PHP_EOL;
$headers.=“返回路径:$from_email”.PHP_EOL;
$headers.=“MIME版本:1.0”。PHP_EOL;
$headers.=“内容类型:多部分/混合;”;
$headers.=“Boundary=\”{$mime\u Boundary}\”;
$datamsg=“这是MIME格式的多部分消息。”.PHP\u EOL.PHP\u EOL;
$datamsg.=“{$mime\u boundary}”.PHP\u EOL;
$datamsg.=“内容类型:文本/普通;字符集=\“UTF-8\”。PHP\u EOL;
$datamsg.=“内容传输编码:8比特”。PHP_EOL.PHP_EOL;
$datamsg.=$message.PHP_EOL.PHP_EOL;
对于($index=0;$index